From 3dc70b58a5713f77113d39d42a4754a08198c355 Mon Sep 17 00:00:00 2001 From: "Documenter.jl" Date: Mon, 15 Jan 2024 13:24:32 +0000 Subject: [PATCH] build based on 4250c8a --- dev/.documenter-siteinfo.json | 2 +- dev/api/index.html | 733 +- dev/assets/documenter.js | 58 +- dev/developer/conventions/index.html | 4 +- dev/developer/data_structures/0813bf68.svg | 75 - dev/developer/data_structures/7e88a2e8.svg | 75 + .../{a9cd5ec1.svg => 8f31188e.svg} | 11312 ++++++++-------- dev/developer/data_structures/index.html | 22 +- dev/developer/gpu_computations/index.html | 4 +- dev/developer/setup/index.html | 4 +- dev/developer/style_guide/index.html | 2 + dev/developer/symmetries/index.html | 70 +- dev/developer/useful_formulas/index.html | 4 +- dev/examples/anyons.ipynb | 678 +- .../anyons/{a544a969.svg => 87ce7fa8.svg} | 54 +- dev/examples/anyons/index.html | 4 +- dev/examples/arbitrary_floattype.ipynb | 19 +- dev/examples/arbitrary_floattype/index.html | 26 +- dev/examples/atomsbase.ipynb | 75 +- dev/examples/atomsbase/index.html | 72 +- dev/examples/cohen_bergstresser.ipynb | 800 +- dev/examples/cohen_bergstresser/e8c284e2.svg | 212 + dev/examples/cohen_bergstresser/index.html | 6 +- dev/examples/collinear_magnetism.ipynb | 2542 ++-- dev/examples/collinear_magnetism/19139c3c.svg | 54 + dev/examples/collinear_magnetism/ecba6944.svg | 593 + dev/examples/collinear_magnetism/index.html | 82 +- dev/examples/compare_solvers.ipynb | 202 +- dev/examples/compare_solvers/index.html | 181 +- dev/examples/convergence_study.ipynb | 422 +- dev/examples/convergence_study/343a7380.svg | 48 + dev/examples/convergence_study/73e993bc.svg | 48 - dev/examples/convergence_study/90c4acb3.svg | 49 + dev/examples/convergence_study/965a88e4.svg | 49 - dev/examples/convergence_study/index.html | 10 +- dev/examples/custom_potential.ipynb | 192 +- dev/examples/custom_potential/fc3355aa.svg | 52 + dev/examples/custom_potential/index.html | 58 +- dev/examples/custom_solvers.ipynb | 34 +- dev/examples/custom_solvers/index.html | 30 +- dev/examples/dielectric.ipynb | 170 +- dev/examples/dielectric/index.html | 166 +- dev/examples/energy_cutoff_smearing.ipynb | 334 +- .../energy_cutoff_smearing/6d245c30.svg | 60 + .../energy_cutoff_smearing/e118f994.svg | 50 + .../energy_cutoff_smearing/index.html | 8 +- dev/examples/error_estimates_forces.ipynb | 14 +- .../error_estimates_forces/index.html | 10 +- dev/examples/forwarddiff.ipynb | 81 +- dev/examples/forwarddiff/index.html | 29 +- dev/examples/gaas_surface.ipynb | 33 +- dev/examples/gaas_surface/index.html | 37 +- dev/examples/geometry_optimization.ipynb | 26 +- dev/examples/geometry_optimization/index.html | 24 +- dev/examples/graphene.ipynb | 514 +- dev/examples/graphene/4ca18e88.svg | 134 + dev/examples/graphene/index.html | 4 +- dev/examples/gross_pitaevskii.ipynb | 322 +- .../{12b19b3f.svg => 4c588a8d.svg} | 68 +- dev/examples/gross_pitaevskii/index.html | 10 +- dev/examples/gross_pitaevskii_2D.ipynb | 4302 +++--- dev/examples/gross_pitaevskii_2D/6e29fb12.svg | 506 + dev/examples/gross_pitaevskii_2D/b961a401.svg | 503 - dev/examples/gross_pitaevskii_2D/index.html | 4 +- dev/examples/input_output.ipynb | 78 +- dev/examples/input_output/index.html | 56 +- dev/examples/metallic_systems.ipynb | 194 +- dev/examples/metallic_systems/5b28b0d6.svg | 56 + dev/examples/metallic_systems/index.html | 34 +- dev/examples/polarizability.ipynb | 96 +- dev/examples/polarizability/index.html | 42 +- dev/examples/pseudopotentials.ipynb | 766 +- dev/examples/pseudopotentials/6f7d6b20.svg | 200 - dev/examples/pseudopotentials/a0eeed0b.svg | 200 + dev/examples/pseudopotentials/index.html | 30 +- dev/examples/scf_callbacks.ipynb | 328 +- dev/examples/scf_callbacks/1dee496a.svg | 82 - dev/examples/scf_callbacks/e34b9e8c.svg | 80 + dev/examples/scf_callbacks/index.html | 21 +- dev/examples/supercells.ipynb | 103 +- dev/examples/supercells/index.html | 99 +- dev/examples/wannier.ipynb | 1973 +-- dev/examples/wannier/b58c4f98.svg | 487 + dev/examples/wannier/index.html | 95 +- dev/features/index.html | 2 +- dev/guide/installation/index.html | 7 +- dev/guide/introductory_resources/index.html | 2 +- dev/guide/periodic_problems.ipynb | 1190 +- dev/guide/periodic_problems.jl | 2 - .../{367cf4e3.svg => 57884762.svg} | 56 +- .../{46379f45.svg => 71e8ef86.svg} | 230 +- dev/guide/periodic_problems/b9bb328d.svg | 134 + dev/guide/periodic_problems/f33b0c26.svg | 46 + dev/guide/periodic_problems/index.html | 10 +- dev/guide/tutorial.ipynb | 1374 +- dev/guide/tutorial.jl | 10 +- dev/guide/tutorial/557b9a2a.svg | 50 + dev/guide/tutorial/6617c44e.svg | 220 + dev/guide/tutorial/aff558dd.svg | 67 + dev/guide/tutorial/fd416e46.svg | 52 + dev/guide/tutorial/index.html | 52 +- dev/index.html | 2 +- dev/publications/index.html | 4 +- dev/school2022/index.html | 2 +- dev/search_index.js | 2 +- dev/tricks/compute_clusters/index.html | 117 + dev/tricks/parallelization/index.html | 54 +- dev/tricks/scf_checkpoints.ipynb | 192 +- dev/tricks/scf_checkpoints.jl | 103 +- dev/tricks/scf_checkpoints/index.html | 75 +- stable | 2 +- v0.6 | 2 +- v0.6.16/.documenter-siteinfo.json | 1 + v0.6.16/api/index.html | 986 ++ v0.6.16/assets/0_pregenerate.jl | 76 + v0.6.16/assets/convergence_study_ecut.png | Bin 0 -> 87469 bytes v0.6.16/assets/convergence_study_kgrid.png | Bin 0 -> 89081 bytes v0.6.16/assets/documenter.js | 909 ++ v0.6.16/assets/favicon.ico | Bin 0 -> 4286 bytes v0.6.16/assets/logo.png | Bin 0 -> 24252 bytes .../assets/si_pseudos_ecut_convergence.png | Bin 0 -> 31557 bytes v0.6.16/assets/themes/documenter-dark.css | 7 + v0.6.16/assets/themes/documenter-light.css | 9 + v0.6.16/assets/themeswap.js | 84 + v0.6.16/assets/warner.js | 52 + v0.6.16/developer/conventions/index.html | 6 + .../developer/data_structures/478441a8.svg | 75 + .../developer/data_structures/4b37fa93.svg | 5671 ++++++++ v0.6.16/developer/data_structures/index.html | 90 + v0.6.16/developer/gpu_computations/index.html | 20 + v0.6.16/developer/setup/index.html | 9 + v0.6.16/developer/symmetries/index.html | 59 + v0.6.16/developer/useful_formulas/index.html | 17 + v0.6.16/examples/Fe_afm.pwi | 44 + v0.6.16/examples/Si.extxyz | 4 + v0.6.16/examples/al_supercell.png | Bin 0 -> 8042 bytes v0.6.16/examples/anyons.ipynb | 1350 ++ v0.6.16/examples/anyons/2a117af3.svg | 466 + v0.6.16/examples/anyons/index.html | 30 + v0.6.16/examples/arbitrary_floattype.ipynb | 164 + .../examples/arbitrary_floattype/index.html | 32 + v0.6.16/examples/atomsbase.ipynb | 301 + v0.6.16/examples/atomsbase/index.html | 137 + v0.6.16/examples/cohen_bergstresser.ipynb | 568 + .../examples/cohen_bergstresser/b1e3a673.svg | 396 +- .../examples/cohen_bergstresser/index.html | 15 + v0.6.16/examples/collinear_magnetism.ipynb | 1688 +++ .../examples/collinear_magnetism/0a8b1dab.svg | 1158 +- .../examples/collinear_magnetism/c8b1621f.svg | 80 +- .../examples/collinear_magnetism/index.html | 73 + v0.6.16/examples/compare_solvers.ipynb | 344 + v0.6.16/examples/compare_solvers/index.html | 139 + v0.6.16/examples/convergence_study.ipynb | 569 + .../examples/convergence_study/c2193b56.svg | 48 + .../examples/convergence_study/fef04faf.svg | 49 + v0.6.16/examples/convergence_study/index.html | 37 + v0.6.16/examples/custom_potential.ipynb | 434 + .../examples/custom_potential/e8afb027.svg | 76 +- v0.6.16/examples/custom_potential/index.html | 63 + v0.6.16/examples/custom_solvers.ipynb | 190 + v0.6.16/examples/custom_solvers/index.html | 65 + v0.6.16/examples/dielectric.ipynb | 194 + v0.6.16/examples/dielectric/index.html | 109 + v0.6.16/examples/energy_cutoff_smearing.ipynb | 456 + .../energy_cutoff_smearing/4c696aae.svg | 92 +- .../energy_cutoff_smearing/c04f82c2.svg | 72 +- .../energy_cutoff_smearing/index.html | 43 + v0.6.16/examples/error_estimates_forces.ipynb | 542 + .../error_estimates_forces/index.html | 113 + v0.6.16/examples/forwarddiff.ipynb | 176 + v0.6.16/examples/forwarddiff/index.html | 52 + v0.6.16/examples/gaas_surface.ipynb | 226 + v0.6.16/examples/gaas_surface/index.html | 80 + v0.6.16/examples/geometry_optimization.ipynb | 191 + .../examples/geometry_optimization/index.html | 50 + v0.6.16/examples/graphene.ipynb | 379 + v0.6.16/examples/graphene/4ed4f9f8.svg | 134 + v0.6.16/examples/graphene/index.html | 34 + v0.6.16/examples/gross_pitaevskii.ipynb | 594 + .../examples/gross_pitaevskii/f18acb8b.svg | 48 + v0.6.16/examples/gross_pitaevskii/index.html | 37 + v0.6.16/examples/gross_pitaevskii_2D.ipynb | 2016 +++ .../examples/gross_pitaevskii_2D/6ff09bcb.svg | 506 + .../examples/gross_pitaevskii_2D/index.html | 33 + v0.6.16/examples/input_output.ipynb | 407 + v0.6.16/examples/input_output/index.html | 105 + v0.6.16/examples/metallic_systems.ipynb | 310 + .../examples/metallic_systems/78d8fa2f.svg | 56 + v0.6.16/examples/metallic_systems/index.html | 54 + v0.6.16/examples/polarizability.ipynb | 284 + v0.6.16/examples/polarizability/index.html | 73 + v0.6.16/examples/pseudopotentials.ipynb | 685 + .../examples/pseudopotentials/4f774466.svg | 200 + v0.6.16/examples/pseudopotentials/index.html | 44 + v0.6.16/examples/scf_callbacks.ipynb | 379 + v0.6.16/examples/scf_callbacks/f6bf0757.svg | 80 + v0.6.16/examples/scf_callbacks/index.html | 28 + v0.6.16/examples/supercells.ipynb | 348 + v0.6.16/examples/supercells/index.html | 99 + v0.6.16/examples/surface.png | Bin 0 -> 42687 bytes v0.6.16/examples/wannier.ipynb | 1530 +++ v0.6.16/examples/wannier/549c7c55.svg | 487 + v0.6.16/examples/wannier/index.html | 201 + v0.6.16/features/index.html | 2 + v0.6.16/guide/installation/index.html | 5 + .../guide/introductory_resources/index.html | 2 + v0.6.16/guide/periodic_problems.ipynb | 1252 ++ v0.6.16/guide/periodic_problems.jl | 332 + .../guide/periodic_problems/0c690b29.svg | 64 +- .../guide/periodic_problems/2b711f31.svg | 240 +- v0.6.16/guide/periodic_problems/ad9229ab.svg | 43 + v0.6.16/guide/periodic_problems/c12bcd7b.svg | 130 + v0.6.16/guide/periodic_problems/index.html | 79 + v0.6.16/guide/tutorial.ipynb | 1162 ++ v0.6.16/guide/tutorial.jl | 114 + v0.6.16/guide/tutorial/1ba2a556.svg | 50 + v0.6.16/guide/tutorial/541d21f0.svg | 220 + v0.6.16/guide/tutorial/a1be6357.svg | 67 + v0.6.16/guide/tutorial/baa778d4.svg | 52 + v0.6.16/guide/tutorial/index.html | 65 + v0.6.16/index.html | 2 + v0.6.16/publications/index.html | 10 + v0.6.16/school2022/index.html | 2 + v0.6.16/search_index.js | 3 + v0.6.16/siteinfo.js | 1 + v0.6.16/tricks/parallelization/index.html | 52 + v0.6.16/tricks/scaling.png | Bin 0 -> 95834 bytes v0.6.16/tricks/scf_checkpoints.ipynb | 358 + v0.6.16/tricks/scf_checkpoints.jl | 134 + v0.6.16/tricks/scf_checkpoints/index.html | 65 + v0.6.17/.documenter-siteinfo.json | 1 + v0.6.17/api/index.html | 1030 ++ v0.6.17/assets/0_pregenerate.jl | 76 + v0.6.17/assets/convergence_study_ecut.png | Bin 0 -> 87469 bytes v0.6.17/assets/convergence_study_kgrid.png | Bin 0 -> 89081 bytes v0.6.17/assets/documenter.js | 891 ++ v0.6.17/assets/favicon.ico | Bin 0 -> 4286 bytes v0.6.17/assets/logo.png | Bin 0 -> 24252 bytes .../assets/si_pseudos_ecut_convergence.png | Bin 0 -> 31557 bytes v0.6.17/assets/themes/documenter-dark.css | 7 + v0.6.17/assets/themes/documenter-light.css | 9 + v0.6.17/assets/themeswap.js | 84 + v0.6.17/assets/warner.js | 52 + v0.6.17/developer/conventions/index.html | 6 + .../developer/data_structures/408d0ed6.svg | 75 + .../developer/data_structures/6e0fd57e.svg | 5671 ++++++++ v0.6.17/developer/data_structures/index.html | 90 + v0.6.17/developer/gpu_computations/index.html | 20 + v0.6.17/developer/setup/index.html | 9 + v0.6.17/developer/style_guide/index.html | 2 + v0.6.17/developer/symmetries/index.html | 58 + v0.6.17/developer/useful_formulas/index.html | 17 + v0.6.17/examples/Fe_afm.pwi | 44 + v0.6.17/examples/Si.extxyz | 4 + v0.6.17/examples/al_supercell.png | Bin 0 -> 8042 bytes v0.6.17/examples/anyons.ipynb | 1224 ++ v0.6.17/examples/anyons/78a6d6d5.svg | 462 + v0.6.17/examples/anyons/index.html | 30 + v0.6.17/examples/arbitrary_floattype.ipynb | 164 + .../examples/arbitrary_floattype/index.html | 32 + v0.6.17/examples/atomsbase.ipynb | 301 + v0.6.17/examples/atomsbase/index.html | 138 + v0.6.17/examples/cohen_bergstresser.ipynb | 568 + .../examples/cohen_bergstresser/bd6318a6.svg | 212 + .../examples/cohen_bergstresser/index.html | 15 + v0.6.17/examples/collinear_magnetism.ipynb | 1687 +++ .../examples/collinear_magnetism/2f71a378.svg | 593 + .../examples/collinear_magnetism/5ffa70f8.svg | 54 + .../examples/collinear_magnetism/index.html | 73 + v0.6.17/examples/compare_solvers.ipynb | 308 + v0.6.17/examples/compare_solvers/index.html | 95 + v0.6.17/examples/convergence_study.ipynb | 569 + .../examples/convergence_study/46d2a475.svg | 49 + .../examples/convergence_study/c51f43ec.svg | 48 + v0.6.17/examples/convergence_study/index.html | 37 + v0.6.17/examples/custom_potential.ipynb | 435 + .../examples/custom_potential/9587e68c.svg | 52 + v0.6.17/examples/custom_potential/index.html | 63 + v0.6.17/examples/custom_solvers.ipynb | 190 + v0.6.17/examples/custom_solvers/index.html | 65 + v0.6.17/examples/dielectric.ipynb | 189 + v0.6.17/examples/dielectric/index.html | 112 + v0.6.17/examples/energy_cutoff_smearing.ipynb | 456 + .../energy_cutoff_smearing/0b21f989.svg | 60 + .../energy_cutoff_smearing/6c2309be.svg | 50 + .../energy_cutoff_smearing/index.html | 43 + v0.6.17/examples/error_estimates_forces.ipynb | 542 + .../error_estimates_forces/index.html | 113 + v0.6.17/examples/forwarddiff.ipynb | 180 + v0.6.17/examples/forwarddiff/index.html | 53 + v0.6.17/examples/gaas_surface.ipynb | 226 + v0.6.17/examples/gaas_surface/index.html | 82 + v0.6.17/examples/geometry_optimization.ipynb | 191 + .../examples/geometry_optimization/index.html | 50 + v0.6.17/examples/graphene.ipynb | 379 + .../examples/graphene/5f945849.svg | 240 +- v0.6.17/examples/graphene/index.html | 34 + v0.6.17/examples/gross_pitaevskii.ipynb | 538 + .../examples/gross_pitaevskii/5bcd81c8.svg | 48 + v0.6.17/examples/gross_pitaevskii/index.html | 37 + v0.6.17/examples/gross_pitaevskii_2D.ipynb | 1755 +++ .../examples/gross_pitaevskii_2D/18f264fe.svg | 508 + .../examples/gross_pitaevskii_2D/index.html | 33 + v0.6.17/examples/input_output.ipynb | 407 + v0.6.17/examples/input_output/index.html | 105 + v0.6.17/examples/metallic_systems.ipynb | 310 + .../examples/metallic_systems/cb0c430c.svg | 84 +- v0.6.17/examples/metallic_systems/index.html | 54 + v0.6.17/examples/polarizability.ipynb | 287 + v0.6.17/examples/polarizability/index.html | 74 + v0.6.17/examples/pseudopotentials.ipynb | 685 + .../examples/pseudopotentials/b6149c15.svg | 200 + v0.6.17/examples/pseudopotentials/index.html | 44 + v0.6.17/examples/scf_callbacks.ipynb | 379 + v0.6.17/examples/scf_callbacks/bbbf538b.svg | 80 + v0.6.17/examples/scf_callbacks/index.html | 28 + v0.6.17/examples/supercells.ipynb | 343 + v0.6.17/examples/supercells/index.html | 96 + v0.6.17/examples/surface.png | Bin 0 -> 42687 bytes v0.6.17/examples/wannier.ipynb | 1531 +++ .../examples/wannier/a1d210d0.svg | 946 +- v0.6.17/examples/wannier/index.html | 200 + v0.6.17/features/index.html | 2 + v0.6.17/guide/installation/index.html | 4 + .../guide/introductory_resources/index.html | 2 + v0.6.17/guide/periodic_problems.ipynb | 1252 ++ v0.6.17/guide/periodic_problems.jl | 330 + v0.6.17/guide/periodic_problems/6e9199df.svg | 43 + v0.6.17/guide/periodic_problems/ad5bfdcb.svg | 130 + v0.6.17/guide/periodic_problems/cd741dd8.svg | 134 + v0.6.17/guide/periodic_problems/dc9529d9.svg | 46 + v0.6.17/guide/periodic_problems/index.html | 79 + v0.6.17/guide/tutorial.ipynb | 1160 ++ v0.6.17/guide/tutorial.jl | 110 + .../guide/tutorial/373eeeef.svg | 72 +- .../guide/tutorial/68fcef46.svg | 412 +- .../guide/tutorial/f2cdf9f7.svg | 104 +- .../guide/tutorial/fcc99eff.svg | 76 +- v0.6.17/guide/tutorial/index.html | 65 + v0.6.17/index.html | 2 + v0.6.17/publications/index.html | 10 + v0.6.17/school2022/index.html | 2 + v0.6.17/search_index.js | 3 + v0.6.17/siteinfo.js | 1 + v0.6.17/tricks/compute_clusters/index.html | 117 + v0.6.17/tricks/parallelization/index.html | 52 + v0.6.17/tricks/scaling.png | Bin 0 -> 95834 bytes v0.6.17/tricks/scf_checkpoints.ipynb | 363 + v0.6.17/tricks/scf_checkpoints.jl | 134 + v0.6.17/tricks/scf_checkpoints/index.html | 65 + versions.js | 2 +- 351 files changed, 80966 insertions(+), 19277 deletions(-) delete mode 100644 dev/developer/data_structures/0813bf68.svg create mode 100644 dev/developer/data_structures/7e88a2e8.svg rename dev/developer/data_structures/{a9cd5ec1.svg => 8f31188e.svg} (63%) create mode 100644 dev/developer/style_guide/index.html rename dev/examples/anyons/{a544a969.svg => 87ce7fa8.svg} (93%) create mode 100644 dev/examples/cohen_bergstresser/e8c284e2.svg create mode 100644 dev/examples/collinear_magnetism/19139c3c.svg create mode 100644 dev/examples/collinear_magnetism/ecba6944.svg create mode 100644 dev/examples/convergence_study/343a7380.svg delete mode 100644 dev/examples/convergence_study/73e993bc.svg create mode 100644 dev/examples/convergence_study/90c4acb3.svg delete mode 100644 dev/examples/convergence_study/965a88e4.svg create mode 100644 dev/examples/custom_potential/fc3355aa.svg create mode 100644 dev/examples/energy_cutoff_smearing/6d245c30.svg create mode 100644 dev/examples/energy_cutoff_smearing/e118f994.svg create mode 100644 dev/examples/graphene/4ca18e88.svg rename dev/examples/gross_pitaevskii/{12b19b3f.svg => 4c588a8d.svg} (79%) create mode 100644 dev/examples/gross_pitaevskii_2D/6e29fb12.svg delete mode 100644 dev/examples/gross_pitaevskii_2D/b961a401.svg create mode 100644 dev/examples/metallic_systems/5b28b0d6.svg delete mode 100644 dev/examples/pseudopotentials/6f7d6b20.svg create mode 100644 dev/examples/pseudopotentials/a0eeed0b.svg delete mode 100644 dev/examples/scf_callbacks/1dee496a.svg create mode 100644 dev/examples/scf_callbacks/e34b9e8c.svg create mode 100644 dev/examples/wannier/b58c4f98.svg rename dev/guide/periodic_problems/{367cf4e3.svg => 57884762.svg} (91%) rename dev/guide/periodic_problems/{46379f45.svg => 71e8ef86.svg} (77%) create mode 100644 dev/guide/periodic_problems/b9bb328d.svg create mode 100644 dev/guide/periodic_problems/f33b0c26.svg create mode 100644 dev/guide/tutorial/557b9a2a.svg create mode 100644 dev/guide/tutorial/6617c44e.svg create mode 100644 dev/guide/tutorial/aff558dd.svg create mode 100644 dev/guide/tutorial/fd416e46.svg create mode 100644 dev/tricks/compute_clusters/index.html create mode 100644 v0.6.16/.documenter-siteinfo.json create mode 100644 v0.6.16/api/index.html create mode 100644 v0.6.16/assets/0_pregenerate.jl create mode 100644 v0.6.16/assets/convergence_study_ecut.png create mode 100644 v0.6.16/assets/convergence_study_kgrid.png create mode 100644 v0.6.16/assets/documenter.js create mode 100644 v0.6.16/assets/favicon.ico create mode 100644 v0.6.16/assets/logo.png create mode 100644 v0.6.16/assets/si_pseudos_ecut_convergence.png create mode 100644 v0.6.16/assets/themes/documenter-dark.css create mode 100644 v0.6.16/assets/themes/documenter-light.css create mode 100644 v0.6.16/assets/themeswap.js create mode 100644 v0.6.16/assets/warner.js create mode 100644 v0.6.16/developer/conventions/index.html create mode 100644 v0.6.16/developer/data_structures/478441a8.svg create mode 100644 v0.6.16/developer/data_structures/4b37fa93.svg create mode 100644 v0.6.16/developer/data_structures/index.html create mode 100644 v0.6.16/developer/gpu_computations/index.html create mode 100644 v0.6.16/developer/setup/index.html create mode 100644 v0.6.16/developer/symmetries/index.html create mode 100644 v0.6.16/developer/useful_formulas/index.html create mode 100644 v0.6.16/examples/Fe_afm.pwi create mode 100644 v0.6.16/examples/Si.extxyz create mode 100644 v0.6.16/examples/al_supercell.png create mode 100644 v0.6.16/examples/anyons.ipynb create mode 100644 v0.6.16/examples/anyons/2a117af3.svg create mode 100644 v0.6.16/examples/anyons/index.html create mode 100644 v0.6.16/examples/arbitrary_floattype.ipynb create mode 100644 v0.6.16/examples/arbitrary_floattype/index.html create mode 100644 v0.6.16/examples/atomsbase.ipynb create mode 100644 v0.6.16/examples/atomsbase/index.html create mode 100644 v0.6.16/examples/cohen_bergstresser.ipynb rename dev/examples/cohen_bergstresser/0b46fc7f.svg => v0.6.16/examples/cohen_bergstresser/b1e3a673.svg (75%) create mode 100644 v0.6.16/examples/cohen_bergstresser/index.html create mode 100644 v0.6.16/examples/collinear_magnetism.ipynb rename dev/examples/collinear_magnetism/b1dfe1a2.svg => v0.6.16/examples/collinear_magnetism/0a8b1dab.svg (70%) rename dev/examples/collinear_magnetism/023e08b6.svg => v0.6.16/examples/collinear_magnetism/c8b1621f.svg (61%) create mode 100644 v0.6.16/examples/collinear_magnetism/index.html create mode 100644 v0.6.16/examples/compare_solvers.ipynb create mode 100644 v0.6.16/examples/compare_solvers/index.html create mode 100644 v0.6.16/examples/convergence_study.ipynb create mode 100644 v0.6.16/examples/convergence_study/c2193b56.svg create mode 100644 v0.6.16/examples/convergence_study/fef04faf.svg create mode 100644 v0.6.16/examples/convergence_study/index.html create mode 100644 v0.6.16/examples/custom_potential.ipynb rename dev/examples/custom_potential/39b9dc10.svg => v0.6.16/examples/custom_potential/e8afb027.svg (56%) create mode 100644 v0.6.16/examples/custom_potential/index.html create mode 100644 v0.6.16/examples/custom_solvers.ipynb create mode 100644 v0.6.16/examples/custom_solvers/index.html create mode 100644 v0.6.16/examples/dielectric.ipynb create mode 100644 v0.6.16/examples/dielectric/index.html create mode 100644 v0.6.16/examples/energy_cutoff_smearing.ipynb rename dev/examples/energy_cutoff_smearing/a754526a.svg => v0.6.16/examples/energy_cutoff_smearing/4c696aae.svg (86%) rename dev/examples/energy_cutoff_smearing/71706795.svg => v0.6.16/examples/energy_cutoff_smearing/c04f82c2.svg (86%) create mode 100644 v0.6.16/examples/energy_cutoff_smearing/index.html create mode 100644 v0.6.16/examples/error_estimates_forces.ipynb create mode 100644 v0.6.16/examples/error_estimates_forces/index.html create mode 100644 v0.6.16/examples/forwarddiff.ipynb create mode 100644 v0.6.16/examples/forwarddiff/index.html create mode 100644 v0.6.16/examples/gaas_surface.ipynb create mode 100644 v0.6.16/examples/gaas_surface/index.html create mode 100644 v0.6.16/examples/geometry_optimization.ipynb create mode 100644 v0.6.16/examples/geometry_optimization/index.html create mode 100644 v0.6.16/examples/graphene.ipynb create mode 100644 v0.6.16/examples/graphene/4ed4f9f8.svg create mode 100644 v0.6.16/examples/graphene/index.html create mode 100644 v0.6.16/examples/gross_pitaevskii.ipynb create mode 100644 v0.6.16/examples/gross_pitaevskii/f18acb8b.svg create mode 100644 v0.6.16/examples/gross_pitaevskii/index.html create mode 100644 v0.6.16/examples/gross_pitaevskii_2D.ipynb create mode 100644 v0.6.16/examples/gross_pitaevskii_2D/6ff09bcb.svg create mode 100644 v0.6.16/examples/gross_pitaevskii_2D/index.html create mode 100644 v0.6.16/examples/input_output.ipynb create mode 100644 v0.6.16/examples/input_output/index.html create mode 100644 v0.6.16/examples/metallic_systems.ipynb create mode 100644 v0.6.16/examples/metallic_systems/78d8fa2f.svg create mode 100644 v0.6.16/examples/metallic_systems/index.html create mode 100644 v0.6.16/examples/polarizability.ipynb create mode 100644 v0.6.16/examples/polarizability/index.html create mode 100644 v0.6.16/examples/pseudopotentials.ipynb create mode 100644 v0.6.16/examples/pseudopotentials/4f774466.svg create mode 100644 v0.6.16/examples/pseudopotentials/index.html create mode 100644 v0.6.16/examples/scf_callbacks.ipynb create mode 100644 v0.6.16/examples/scf_callbacks/f6bf0757.svg create mode 100644 v0.6.16/examples/scf_callbacks/index.html create mode 100644 v0.6.16/examples/supercells.ipynb create mode 100644 v0.6.16/examples/supercells/index.html create mode 100644 v0.6.16/examples/surface.png create mode 100644 v0.6.16/examples/wannier.ipynb create mode 100644 v0.6.16/examples/wannier/549c7c55.svg create mode 100644 v0.6.16/examples/wannier/index.html create mode 100644 v0.6.16/features/index.html create mode 100644 v0.6.16/guide/installation/index.html create mode 100644 v0.6.16/guide/introductory_resources/index.html create mode 100644 v0.6.16/guide/periodic_problems.ipynb create mode 100644 v0.6.16/guide/periodic_problems.jl rename dev/guide/periodic_problems/1fe64def.svg => v0.6.16/guide/periodic_problems/0c690b29.svg (84%) rename dev/guide/periodic_problems/691b50fa.svg => v0.6.16/guide/periodic_problems/2b711f31.svg (76%) create mode 100644 v0.6.16/guide/periodic_problems/ad9229ab.svg create mode 100644 v0.6.16/guide/periodic_problems/c12bcd7b.svg create mode 100644 v0.6.16/guide/periodic_problems/index.html create mode 100644 v0.6.16/guide/tutorial.ipynb create mode 100644 v0.6.16/guide/tutorial.jl create mode 100644 v0.6.16/guide/tutorial/1ba2a556.svg create mode 100644 v0.6.16/guide/tutorial/541d21f0.svg create mode 100644 v0.6.16/guide/tutorial/a1be6357.svg create mode 100644 v0.6.16/guide/tutorial/baa778d4.svg create mode 100644 v0.6.16/guide/tutorial/index.html create mode 100644 v0.6.16/index.html create mode 100644 v0.6.16/publications/index.html create mode 100644 v0.6.16/school2022/index.html create mode 100644 v0.6.16/search_index.js create mode 100644 v0.6.16/siteinfo.js create mode 100644 v0.6.16/tricks/parallelization/index.html create mode 100644 v0.6.16/tricks/scaling.png create mode 100644 v0.6.16/tricks/scf_checkpoints.ipynb create mode 100644 v0.6.16/tricks/scf_checkpoints.jl create mode 100644 v0.6.16/tricks/scf_checkpoints/index.html create mode 100644 v0.6.17/.documenter-siteinfo.json create mode 100644 v0.6.17/api/index.html create mode 100644 v0.6.17/assets/0_pregenerate.jl create mode 100644 v0.6.17/assets/convergence_study_ecut.png create mode 100644 v0.6.17/assets/convergence_study_kgrid.png create mode 100644 v0.6.17/assets/documenter.js create mode 100644 v0.6.17/assets/favicon.ico create mode 100644 v0.6.17/assets/logo.png create mode 100644 v0.6.17/assets/si_pseudos_ecut_convergence.png create mode 100644 v0.6.17/assets/themes/documenter-dark.css create mode 100644 v0.6.17/assets/themes/documenter-light.css create mode 100644 v0.6.17/assets/themeswap.js create mode 100644 v0.6.17/assets/warner.js create mode 100644 v0.6.17/developer/conventions/index.html create mode 100644 v0.6.17/developer/data_structures/408d0ed6.svg create mode 100644 v0.6.17/developer/data_structures/6e0fd57e.svg create mode 100644 v0.6.17/developer/data_structures/index.html create mode 100644 v0.6.17/developer/gpu_computations/index.html create mode 100644 v0.6.17/developer/setup/index.html create mode 100644 v0.6.17/developer/style_guide/index.html create mode 100644 v0.6.17/developer/symmetries/index.html create mode 100644 v0.6.17/developer/useful_formulas/index.html create mode 100644 v0.6.17/examples/Fe_afm.pwi create mode 100644 v0.6.17/examples/Si.extxyz create mode 100644 v0.6.17/examples/al_supercell.png create mode 100644 v0.6.17/examples/anyons.ipynb create mode 100644 v0.6.17/examples/anyons/78a6d6d5.svg create mode 100644 v0.6.17/examples/anyons/index.html create mode 100644 v0.6.17/examples/arbitrary_floattype.ipynb create mode 100644 v0.6.17/examples/arbitrary_floattype/index.html create mode 100644 v0.6.17/examples/atomsbase.ipynb create mode 100644 v0.6.17/examples/atomsbase/index.html create mode 100644 v0.6.17/examples/cohen_bergstresser.ipynb create mode 100644 v0.6.17/examples/cohen_bergstresser/bd6318a6.svg create mode 100644 v0.6.17/examples/cohen_bergstresser/index.html create mode 100644 v0.6.17/examples/collinear_magnetism.ipynb create mode 100644 v0.6.17/examples/collinear_magnetism/2f71a378.svg create mode 100644 v0.6.17/examples/collinear_magnetism/5ffa70f8.svg create mode 100644 v0.6.17/examples/collinear_magnetism/index.html create mode 100644 v0.6.17/examples/compare_solvers.ipynb create mode 100644 v0.6.17/examples/compare_solvers/index.html create mode 100644 v0.6.17/examples/convergence_study.ipynb create mode 100644 v0.6.17/examples/convergence_study/46d2a475.svg create mode 100644 v0.6.17/examples/convergence_study/c51f43ec.svg create mode 100644 v0.6.17/examples/convergence_study/index.html create mode 100644 v0.6.17/examples/custom_potential.ipynb create mode 100644 v0.6.17/examples/custom_potential/9587e68c.svg create mode 100644 v0.6.17/examples/custom_potential/index.html create mode 100644 v0.6.17/examples/custom_solvers.ipynb create mode 100644 v0.6.17/examples/custom_solvers/index.html create mode 100644 v0.6.17/examples/dielectric.ipynb create mode 100644 v0.6.17/examples/dielectric/index.html create mode 100644 v0.6.17/examples/energy_cutoff_smearing.ipynb create mode 100644 v0.6.17/examples/energy_cutoff_smearing/0b21f989.svg create mode 100644 v0.6.17/examples/energy_cutoff_smearing/6c2309be.svg create mode 100644 v0.6.17/examples/energy_cutoff_smearing/index.html create mode 100644 v0.6.17/examples/error_estimates_forces.ipynb create mode 100644 v0.6.17/examples/error_estimates_forces/index.html create mode 100644 v0.6.17/examples/forwarddiff.ipynb create mode 100644 v0.6.17/examples/forwarddiff/index.html create mode 100644 v0.6.17/examples/gaas_surface.ipynb create mode 100644 v0.6.17/examples/gaas_surface/index.html create mode 100644 v0.6.17/examples/geometry_optimization.ipynb create mode 100644 v0.6.17/examples/geometry_optimization/index.html create mode 100644 v0.6.17/examples/graphene.ipynb rename dev/examples/graphene/171ec854.svg => v0.6.17/examples/graphene/5f945849.svg (80%) create mode 100644 v0.6.17/examples/graphene/index.html create mode 100644 v0.6.17/examples/gross_pitaevskii.ipynb create mode 100644 v0.6.17/examples/gross_pitaevskii/5bcd81c8.svg create mode 100644 v0.6.17/examples/gross_pitaevskii/index.html create mode 100644 v0.6.17/examples/gross_pitaevskii_2D.ipynb create mode 100644 v0.6.17/examples/gross_pitaevskii_2D/18f264fe.svg create mode 100644 v0.6.17/examples/gross_pitaevskii_2D/index.html create mode 100644 v0.6.17/examples/input_output.ipynb create mode 100644 v0.6.17/examples/input_output/index.html create mode 100644 v0.6.17/examples/metallic_systems.ipynb rename dev/examples/metallic_systems/ab7c6680.svg => v0.6.17/examples/metallic_systems/cb0c430c.svg (58%) create mode 100644 v0.6.17/examples/metallic_systems/index.html create mode 100644 v0.6.17/examples/polarizability.ipynb create mode 100644 v0.6.17/examples/polarizability/index.html create mode 100644 v0.6.17/examples/pseudopotentials.ipynb create mode 100644 v0.6.17/examples/pseudopotentials/b6149c15.svg create mode 100644 v0.6.17/examples/pseudopotentials/index.html create mode 100644 v0.6.17/examples/scf_callbacks.ipynb create mode 100644 v0.6.17/examples/scf_callbacks/bbbf538b.svg create mode 100644 v0.6.17/examples/scf_callbacks/index.html create mode 100644 v0.6.17/examples/supercells.ipynb create mode 100644 v0.6.17/examples/supercells/index.html create mode 100644 v0.6.17/examples/surface.png create mode 100644 v0.6.17/examples/wannier.ipynb rename dev/examples/wannier/f0190eb2.svg => v0.6.17/examples/wannier/a1d210d0.svg (64%) create mode 100644 v0.6.17/examples/wannier/index.html create mode 100644 v0.6.17/features/index.html create mode 100644 v0.6.17/guide/installation/index.html create mode 100644 v0.6.17/guide/introductory_resources/index.html create mode 100644 v0.6.17/guide/periodic_problems.ipynb create mode 100644 v0.6.17/guide/periodic_problems.jl create mode 100644 v0.6.17/guide/periodic_problems/6e9199df.svg create mode 100644 v0.6.17/guide/periodic_problems/ad5bfdcb.svg create mode 100644 v0.6.17/guide/periodic_problems/cd741dd8.svg create mode 100644 v0.6.17/guide/periodic_problems/dc9529d9.svg create mode 100644 v0.6.17/guide/periodic_problems/index.html create mode 100644 v0.6.17/guide/tutorial.ipynb create mode 100644 v0.6.17/guide/tutorial.jl rename dev/guide/tutorial/40a8c7dd.svg => v0.6.17/guide/tutorial/373eeeef.svg (53%) rename dev/guide/tutorial/a6683c30.svg => v0.6.17/guide/tutorial/68fcef46.svg (76%) rename dev/guide/tutorial/45a61d0a.svg => v0.6.17/guide/tutorial/f2cdf9f7.svg (56%) rename dev/guide/tutorial/6f35d62d.svg => v0.6.17/guide/tutorial/fcc99eff.svg (53%) create mode 100644 v0.6.17/guide/tutorial/index.html create mode 100644 v0.6.17/index.html create mode 100644 v0.6.17/publications/index.html create mode 100644 v0.6.17/school2022/index.html create mode 100644 v0.6.17/search_index.js create mode 100644 v0.6.17/siteinfo.js create mode 100644 v0.6.17/tricks/compute_clusters/index.html create mode 100644 v0.6.17/tricks/parallelization/index.html create mode 100644 v0.6.17/tricks/scaling.png create mode 100644 v0.6.17/tricks/scf_checkpoints.ipynb create mode 100644 v0.6.17/tricks/scf_checkpoints.jl create mode 100644 v0.6.17/tricks/scf_checkpoints/index.html diff --git a/dev/.documenter-siteinfo.json b/dev/.documenter-siteinfo.json index f7461c6cd0..e56f1bf83e 100644 --- a/dev/.documenter-siteinfo.json +++ b/dev/.documenter-siteinfo.json @@ -1 +1 @@ -{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2023-12-25T09:10:55","documenter_version":"1.1.2"}} \ No newline at end of file +{"documenter":{"julia_version":"1.10.0","generation_timestamp":"2024-01-15T11:50:56","documenter_version":"1.1.2"}} \ No newline at end of file diff --git a/dev/api/index.html b/dev/api/index.html index 12bfe45838..0de8a7cb2e 100644 --- a/dev/api/index.html +++ b/dev/api/index.html @@ -1,42 +1,47 @@ -API reference · DFTK.jl

API reference

This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.

DFTK.AdaptiveBandsType

Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.

source
DFTK.AtomicNonlocalType

Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. $\text{Energy} = \sum_a \sum_{ij} \sum_{n} f_n <ψ_n|p_{ai}> D_{ij} <p_{aj}|ψ_n>.$

source
DFTK.BlowupCHVType

Blow-up function as proposed in https://arxiv.org/abs/2210.00442 The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.

source
DFTK.DielectricMixingType

We use a simplification of the Resta model DOI 10.1103/physrevb.16.2717 and set $χ_0(q) = \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)}$ where $C_0 = 1 - ε_r$ with $ε_r$ being the macroscopic relative permittivity. We neglect $K_\text{xc}$, such that $J^{-1} ≈ \frac{k_{TF}^2 - C_0 G^2}{ε_r k_{TF}^2 - C_0 G^2}$

By default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to $ρ$ and $ρ_\text{spin}$ in the same way.

source
DFTK.DielectricModelType

A localised dielectric model for $χ_0$:

\[\sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)}\]

where $C_0 = 1 - ε_r$, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.

source
DFTK.DivAgradOperatorType

Nonlocal "divAgrad" operator $-½ ∇ ⋅ (A ∇)$ where $A$ is a scalar field on the real-space grid. The $-½$ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for $A=1$).

source
DFTK.ElementCohenBergstresserMethod
ElementCohenBergstresser(
+API reference · DFTK.jl

API reference

This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.

DFTK.AdaptiveBandsType

Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.

source
DFTK.AdaptiveDiagtolType

Algorithm for the tolerance used for the next diagonalization. This function takes $|ρ_{\rm next} - ρ_{\rm in}|$ and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.

source
DFTK.AtomicNonlocalType

Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. $\text{Energy} = ∑_a ∑_{ij} ∑_{n} f_n \braket{ψ_n}{{\rm proj}_{ai}} D_{ij} \braket{{\rm proj}_{aj}}{ψ_n}.$

source
DFTK.BlowupCHVType

Blow-up function as proposed in arXiv:2210.00442. The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.

source
DFTK.DFTKCalculatorMethod
DFTKCalculator(
+    params::DFTK.DFTKParameters
+) -> DFTKCalculator
+

Construct a AtomsCalculators compatible calculator for DFTK. The model_kwargs are passed onto the Model constructor, the basis_kwargs to the PlaneWaveBasis constructor, the scf_kwargs to self_consistent_field. At the very least the DFT functionals and the Ecut needs to be specified.

By default the calculator preserves the symmetries that are stored inside the state (the basis is re-built, but symmetries are fixed and not re-computed).

Example

julia> DFTKCalculator(; model_kwargs=(; functionals=[:lda_x, :lda_c_vwn]),
+                        basis_kwargs=(; Ecut=10, kgrid=(2, 2, 2)),
+                        scf_kwargs=(; tol=1e-4))
source
DFTK.DielectricMixingType

We use a simplification of the Resta model and set $χ_0(q) = \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)}$ where $C_0 = 1 - ε_r$ with $ε_r$ being the macroscopic relative permittivity. We neglect $K_\text{xc}$, such that $J^{-1} ≈ \frac{k_{TF}^2 - C_0 G^2}{ε_r k_{TF}^2 - C_0 G^2}$

By default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to $ρ$ and $ρ_\text{spin}$ in the same way.

source
DFTK.DielectricModelType

A localised dielectric model for $χ_0$:

\[\sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)}\]

where $C_0 = 1 - ε_r$, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.

source
DFTK.DivAgradOperatorType

Nonlocal "divAgrad" operator $-½ ∇ ⋅ (A ∇)$ where $A$ is a scalar field on the real-space grid. The $-½$ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for $A=1$).

source
DFTK.ElementCohenBergstresserMethod
ElementCohenBergstresser(
     key;
     lattice_constant
 ) -> ElementCohenBergstresser
-

Element where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).

key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

source
DFTK.ElementCoulombMethod
ElementCoulomb(key; mass) -> ElementCoulomb
-

Element interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

source
DFTK.ElementGaussianMethod
ElementGaussian(α, L; symbol) -> ElementGaussian
-

Element interacting with electrons via a Gaussian potential. Symbol is non-mandatory.

source
DFTK.ElementPspMethod
ElementPsp(key; psp, mass)
-

Element interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

source
DFTK.EnergiesType

A simple struct to contain a vector of energies, and utilities to print them in a nice format.

source
DFTK.EntropyType

Entropy term -TS, where S is the electronic entropy. Turns the energy E into the free energy F=E-TS. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.

source
DFTK.EwaldType

Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.

source
DFTK.ExplicitKpointsType

Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)

source
DFTK.ExternalFromRealType

External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.

source
DFTK.FixedBandsType

In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).

source
DFTK.GPUMethod

Construct a particular GPU architecture by passing the ArrayType

source
DFTK.HartreeType

Hartree term: for a decaying potential V the energy would be

1/2 ∫ρ(x)ρ(y)V(x-y) dxdy

with the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather

1/2 ∫ρ(x)ρ(y) G(x-y) dx dy

where G is the Green's function of the periodic Laplacian with zero mean (-Δ G = sum{R} 4π δR, integral of G zero on a unit cell).

source
DFTK.KerkerMixingType

Kerker mixing: $J^{-1} ≈ \frac{|G|^2}{k_{TF}^2 + |G|^2}$ where $k_{TF}$ is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for $ΔDOS_Ω$ is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.

Notes:

  • Abinit calls $1/k_{TF}$ the dielectric screening length (parameter dielng)
source
DFTK.KpointType

Discretization information for $k$-point-dependent quantities such as orbitals. More generally, a $k$-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.

source
DFTK.LazyHcatType

Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).

source
DFTK.LdosModelType

Represents the LDOS-based $χ_0$ model

\[χ_0(r, r') = (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D)\]

where $D_\text{loc}$ is the local density of states and $D$ the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665

source
DFTK.LibxcDensitiesMethod
LibxcDensities(
+

Element where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).

key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

source
DFTK.ElementCoulombMethod
ElementCoulomb(key; mass) -> ElementCoulomb
+

Element interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

source
DFTK.ElementGaussianMethod
ElementGaussian(α, L; symbol) -> ElementGaussian
+

Element interacting with electrons via a Gaussian potential. Symbol is non-mandatory.

source
DFTK.ElementPspMethod
ElementPsp(key; psp, mass)
+

Element interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

source
DFTK.EnergiesType

A simple struct to contain a vector of energies, and utilities to print them in a nice format.

source
DFTK.EntropyType

Entropy term $-TS$, where $S$ is the electronic entropy. Turns the energy $E$ into the free energy $F=E-TS$. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.

source
DFTK.EwaldType

Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.

source
DFTK.ExplicitKpointsType

Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)

source
DFTK.ExternalFromRealType

External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.

source
DFTK.FixedBandsType

In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).

source
DFTK.GPUMethod

Construct a particular GPU architecture by passing the ArrayType

source
DFTK.HartreeType

Hartree term: for a decaying potential V the energy would be

\[1/2 ∫ρ(x)ρ(y)V(x-y) dxdy,\]

with the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather

\[1/2 ∫ρ(x)ρ(y) G(x-y) dx dy,\]

where G is the Green's function of the periodic Laplacian with zero mean ($-Δ G = ∑_R 4π δ_R$, integral of G zero on a unit cell).

source
DFTK.KerkerMixingType

Kerker mixing: $J^{-1} ≈ \frac{|G|^2}{k_{TF}^2 + |G|^2}$ where $k_{TF}$ is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for $ΔDOS_Ω$ is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.

Notes:

  • Abinit calls $1/k_{TF}$ the dielectric screening length (parameter dielng)
source
DFTK.KineticType

Kinetic energy:

\[1/2 ∑_n f_n ∫ |∇ψ_n|^2 * {\rm blowup}(-i∇Ψ_n).\]

source
DFTK.KpointType

Discretization information for $k$-point-dependent quantities such as orbitals. More generally, a $k$-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.

source
DFTK.LazyHcatType

Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).

source
DFTK.LdosModelType

Represents the LDOS-based $χ_0$ model

\[χ_0(r, r') = (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D)\]

where $D_\text{loc}$ is the local density of states and $D$ the density of states. For details see Herbst, Levitt 2020.

source
DFTK.LibxcDensitiesMethod
LibxcDensities(
     basis,
     max_derivative::Integer,
     ρ,
     τ
 ) -> DFTK.LibxcDensities
-

Compute density in real space and its derivatives starting from ρ

source
DFTK.MagneticType

Magnetic term $A⋅(-i∇)$. It is assumed (but not checked) that $∇⋅A = 0$.

source
DFTK.ModelMethod
Model(system::AbstractSystem; kwargs...)

AtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.

source
DFTK.ModelMethod
Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,
-      smearing, spin_polarization, symmetries)

Creates the physical specification of a model (without any discretization information).

n_electrons is taken from atoms if not specified.

spin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.

magnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.

smearing is Fermi-Dirac if temperature is non-zero, none otherwise

The symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.

source
DFTK.ModelMethod
Model(model; [lattice, positions, atoms, kwargs...])
-Model{T}(model; [lattice, positions, atoms, kwargs...])

Construct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.

source
DFTK.NonlocalOperatorType

Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.

source
DFTK.NoopOperatorType

Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).

source
DFTK.MagneticType

Magnetic term $A⋅(-i∇)$. It is assumed (but not checked) that $∇⋅A = 0$.

source
DFTK.ModelMethod
Model(system::AbstractSystem; kwargs...)

AtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.

source
DFTK.ModelMethod
Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,
+      smearing, spin_polarization, symmetries)

Creates the physical specification of a model (without any discretization information).

n_electrons is taken from atoms if not specified.

spin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.

magnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.

smearing is Fermi-Dirac if temperature is non-zero, none otherwise

The symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.

source
DFTK.ModelMethod
Model(model; [lattice, positions, atoms, kwargs...])
+Model{T}(model; [lattice, positions, atoms, kwargs...])

Construct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.

source
DFTK.NonlocalOperatorType

Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.

source
DFTK.NoopOperatorType

Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).

source
DFTK.PairwisePotentialMethod
PairwisePotential(
     V,
     params;
     max_radius
 ) -> PairwisePotential
-

Pairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.

source
DFTK.PlaneWaveBasisType

A plane-wave discretized Model. Normalization conventions:

  • Things that are expressed in the G basis are normalized so that if $x$ is the vector, then the actual function is $\sum_G x_G e_G$ with $e_G(x) = e^{iG x} / \sqrt(\Omega)$, where $\Omega$ is the unit cell volume. This is so that, eg $norm(ψ) = 1$ gives the correct normalization. This also holds for the density and the potentials.
  • Quantities expressed on the real-space grid are in actual values.

ifft and fft convert between these representations.

source
DFTK.PlaneWaveBasisMethod

Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.

source
DFTK.PreconditionerTPAType

(simplified version of) Tetter-Payne-Allan preconditioning ↑ M.P. Teter, M.C. Payne and D.C. Allan, Phys. Rev. B 40, 12255 (1989).

source
DFTK.PspHghMethod
PspHgh(path[, identifier, description])

Construct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.

source
DFTK.PspUpfMethod
PspUpf(path[, identifier])

Construct a Unified Pseudopotential Format pseudopotential from file.

Does not support:

  • Fully-realtivistic / spin-orbit pseudos
  • Bare Coulomb / all-electron potentials
  • Semilocal potentials
  • Ultrasoft potentials
  • Projector-augmented wave potentials
  • GIPAW reconstruction data
source
DFTK.RealFourierOperatorType

Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (real, fourier) They also implement mul! and Matrix(op) for exploratory use.

source
DFTK.XcType

Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.

source
DFTK.χ0MixingType

Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).

source
AbstractFFTs.fft!Method
fft!(
+

Pairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.

source
DFTK.PlaneWaveBasisType

A plane-wave discretized Model. Normalization conventions:

  • Things that are expressed in the G basis are normalized so that if $x$ is the vector, then the actual function is $\sum_G x_G e_G$ with $e_G(x) = e^{iG x} / \sqrt(\Omega)$, where $\Omega$ is the unit cell volume. This is so that, eg $norm(ψ) = 1$ gives the correct normalization. This also holds for the density and the potentials.
  • Quantities expressed on the real-space grid are in actual values.

ifft and fft convert between these representations.

source
DFTK.PlaneWaveBasisMethod

Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.

source
DFTK.PspHghMethod
PspHgh(path[, identifier, description])

Construct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.

source
DFTK.PspUpfMethod
PspUpf(path[, identifier])

Construct a Unified Pseudopotential Format pseudopotential from file.

Does not support:

  • Fully-realtivistic / spin-orbit pseudos
  • Bare Coulomb / all-electron potentials
  • Semilocal potentials
  • Ultrasoft potentials
  • Projector-augmented wave potentials
  • GIPAW reconstruction data
source
DFTK.RealFourierOperatorType

Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (; real, fourier). They also implement mul! and Matrix(op) for exploratory use.

source
DFTK.ScfSaveCheckpointsType

Adds checkpointing to a DFTK self-consistent field calculation. The checkpointing file is silently overwritten. Requires the package for writing the output file (usually JLD2) to be loaded.

  • filename: Name of the checkpointing file.
  • compress: Should compression be used on writing (rarely useful)
  • save_ψ: Should the bands also be saved (noteworthy additional cost ... use carefully)
source
DFTK.XcType

Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.

source
DFTK.χ0MixingType

Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).

source
AbstractFFTs.fft!Method
fft!(
     f_fourier::AbstractArray{T, 3} where T,
     basis::PlaneWaveBasis,
     f_real::AbstractArray{T, 3} where T
 ) -> Any
-

In-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.

source
AbstractFFTs.fftMethod
fft(
+

In-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.

source
AbstractFFTs.fftMethod
fft(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     f_real::AbstractArray{U}
 ) -> Any
-
fft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)

Perform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.

source
AbstractFFTs.ifft!Method
ifft!(
+
fft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)

Perform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.

source
AbstractFFTs.ifft!Method
ifft!(
     f_real::AbstractArray{T, 3} where T,
     basis::PlaneWaveBasis,
     f_fourier::AbstractArray{T, 3} where T
 ) -> Any
-

In-place version of ifft.

source
AbstractFFTs.ifftMethod
ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any
-
ifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)

Perform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.

source
AbstractFFTs.ifftMethod
ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any
+
ifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)

Perform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.

source
AtomsBase.atomic_systemFunction
atomic_system(
     lattice::AbstractMatrix{<:Number},
     atoms::Vector{<:DFTK.Element},
     positions::AbstractVector
@@ -48,26 +53,29 @@
     magnetic_moments::AbstractVector
 ) -> AtomsBase.FlexibleSystem
 
atomic_system(model::DFTK.Model, magnetic_moments=[])
-atomic_system(lattice, atoms, positions, magnetic_moments=[])

Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

source
AtomsBase.periodic_systemFunction
periodic_system(model::Model) -> AtomsBase.FlexibleSystem
+atomic_system(lattice, atoms, positions, magnetic_moments=[])

Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

source
AtomsBase.periodic_systemFunction
periodic_system(model::Model) -> AtomsBase.FlexibleSystem
 periodic_system(
     model::Model,
     magnetic_moments
 ) -> AtomsBase.FlexibleSystem
 
periodic_system(model::DFTK.Model, magnetic_moments=[])
-periodic_system(lattice, atoms, positions, magnetic_moments=[])

Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

source
Brillouin.KPaths.irrfbz_pathFunction
irrfbz_path(model::Model) -> Brillouin.KPaths.KPath
+periodic_system(lattice, atoms, positions, magnetic_moments=[])

Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

source
Brillouin.KPaths.irrfbz_pathFunction
irrfbz_path(
+    model::Model;
+    ...
+) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}
 irrfbz_path(
     model::Model,
     magnetic_moments;
     dim,
     space_group_number
-) -> Brillouin.KPaths.KPath
-

Extract the high-symmetry $k$-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the $k$-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.

If the cell is a supercell of a smaller primitive cell, the standard $k$-path of the associated primitive cell is returned. So, the high-symmetry $k$ points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.

The dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).

Due to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.

source
DFTK.CROPFunction
CROP(
+) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}
+

Extract the high-symmetry $k$-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the $k$-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.

If the cell is a supercell of a smaller primitive cell, the standard $k$-path of the associated primitive cell is returned. So, the high-symmetry $k$ points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.

The dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).

Due to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.

source
DFTK.CROPFunction
CROP(
     f,
     x0,
     m::Int64,
     max_iter::Int64,
     tol::Real
-) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}
+) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}
 CROP(
     f,
     x0,
@@ -75,25 +83,25 @@
     max_iter::Int64,
     tol::Real,
     warming
-) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}
-

CROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.

source
DFTK.G_vectorsMethod
G_vectors(
+) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}
+

CROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.

source
DFTK.G_vectorsMethod
G_vectors(
     basis::PlaneWaveBasis
 ) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}
 
G_vectors(basis::PlaneWaveBasis)
-G_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

The list of wave vectors $G$ in reduced (integer) coordinates of a basis or a $k$-point kpt.

source
DFTK.G_vectorsMethod
G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any
-
G_vectors([architecture=AbstractArchitecture], fft_size::Tuple)

The wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.

source
DFTK.G_vectors_cartMethod
G_vectors_cart(basis::PlaneWaveBasis) -> Any
+G_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

The list of wave vectors $G$ in reduced (integer) coordinates of a basis or a $k$-point kpt.

source
DFTK.G_vectorsMethod
G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any
+
G_vectors(fft_size::Tuple)

The wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.

source
DFTK.G_vectors_cartMethod
G_vectors_cart(basis::PlaneWaveBasis) -> Any
 
G_vectors_cart(basis::PlaneWaveBasis)
-G_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

The list of $G$ vectors of a given basis or kpt, in cartesian coordinates.

source
DFTK.Gplusk_vectorsMethod
Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any
-
Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

The list of $G + k$ vectors, in reduced coordinates.

source
DFTK.Gplusk_vectors_cartMethod
Gplusk_vectors_cart(
+G_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

The list of $G$ vectors of a given basis or kpt, in cartesian coordinates.

source
DFTK.Gplusk_vectorsMethod
Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any
+
Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

The list of $G + k$ vectors, in reduced coordinates.

source
DFTK.Gplusk_vectors_cartMethod
Gplusk_vectors_cart(
     basis::PlaneWaveBasis,
     kpt::Kpoint
 ) -> Any
-
Gplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

The list of $G + k$ vectors, in cartesian coordinates.

source
DFTK.Gplusk_vectors_in_supercellMethod
Gplusk_vectors_in_supercell(
     basis::PlaneWaveBasis,
     basis_supercell::PlaneWaveBasis,
     kpt::Kpoint
 ) -> Any
-

Maps all $k+G$ vectors of an given basis as $G$ vectors of the supercell basis, in reduced coordinates.

source
DFTK.HybridMixingMethod
HybridMixing(
+

Maps all $k+G$ vectors of an given basis as $G$ vectors of the supercell basis, in reduced coordinates.

source
DFTK.HybridMixingMethod
HybridMixing(
 ;
     εr,
     kTF,
@@ -104,62 +112,36 @@
 

The model for the susceptibility is

\[\begin{aligned} χ_0(r, r') &= (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D) \\ &+ \sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)} -\end{aligned}\]

where $C_0 = 1 - ε_r$, $D_\text{loc}$ is the local density of states, $D$ is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020 arXiv:2009.01665

Important kwargs passed on to χ0Mixing

  • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
  • verbose: Run the GMRES in verbose mode.
  • reltol: Relative tolerance for GMRES
source
DFTK.IncreaseMixingTemperatureMethod
IncreaseMixingTemperature(
+\end{aligned}\]

where $C_0 = 1 - ε_r$, $D_\text{loc}$ is the local density of states, $D$ is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020.

Important kwargs passed on to χ0Mixing

  • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
  • verbose: Run the GMRES in verbose mode.
  • reltol: Relative tolerance for GMRES
source
DFTK.IncreaseMixingTemperatureMethod
IncreaseMixingTemperature(
 ;
     factor,
     above_ρdiff,
     temperature_max
-) -> DFTK.var"#callback#643"{DFTK.var"#callback#642#644"{Int64, Float64}}
-

Increase the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.

source
DFTK.LdosMixingMethod
LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing
+) -> DFTK.var"#callback#688"{DFTK.var"#callback#687#689"{Int64, Float64}}
+

Increase the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.

source
DFTK.LdosMixingMethod
LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing
 

The model for the susceptibility is

\[\begin{aligned} χ_0(r, r') &= (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D) -\end{aligned}\]

where $D_\text{loc}$ is the local density of states, $D$ is the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665.

Important kwargs passed on to χ0Mixing

  • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
  • verbose: Run the GMRES in verbose mode.
  • reltol: Relative tolerance for GMRES
source
DFTK.ScfAcceptImprovingStepMethod
ScfAcceptImprovingStep(
+\end{aligned}\]

where $D_\text{loc}$ is the local density of states, $D$ is the density of states. For details see Herbst, Levitt 2020.

Important kwargs passed on to χ0Mixing

  • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
  • verbose: Run the GMRES in verbose mode.
  • reltol: Relative tolerance for GMRES
source
DFTK.ScfAcceptImprovingStepMethod
ScfAcceptImprovingStep(
 ;
     max_energy_change,
     max_relative_residual
-) -> DFTK.var"#accept_step#735"{Float64, Float64}
-

Accept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.

source
DFTK.ScfConvergenceDensityMethod
ScfConvergenceDensity(tolerance) -> DFTK.var"#689#690"
-

Flag convergence by using the L2Norm of the change between input density and unpreconditioned output density (ρout)

source
DFTK.ScfConvergenceEnergyMethod
ScfConvergenceEnergy(
-    tolerance
-) -> DFTK.var"#is_converged#688"
-

Flag convergence as soon as total energy change drops below tolerance

source
DFTK.ScfConvergenceForceMethod
ScfConvergenceForce(
-    tolerance
-) -> DFTK.var"#is_converged#691"
-

Flag convergence on the change in cartesian force between two iterations.

source
DFTK.ScfDefaultCallbackMethod
ScfDefaultCallback(
-;
-    show_damping,
-    show_time
-) -> DFTK.var"#callback#685"{Bool, Bool}
-

Default callback function for self_consistent_field and newton, which prints a convergence table.

source
DFTK.ScfDiagtolMethod
ScfDiagtol(
-;
-    ratio_ρdiff,
-    diagtol_min,
-    diagtol_max
-) -> DFTK.var"#determine_diagtol#693"{Float64}
-

Determine the tolerance used for the next diagonalization. This function takes $|ρnext - ρin|$ and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.

source
DFTK.ScfPlotTraceFunction

Plot the trace of an SCF, i.e. the absolute error of the total energy at each iteration versus the converged energy in a semilog plot. By default a new plot canvas is generated, but an existing one can be passed and reused along with kwargs for the call to plot!. Requires Plots to be loaded.

source
DFTK.ScfSaveCheckpointsFunction
ScfSaveCheckpoints(
-
-) -> DFTK.var"#callback#680"{Bool, Bool, String}
-ScfSaveCheckpoints(
-    filename;
-    keep,
-    overwrite
-) -> DFTK.var"#callback#680"{Bool, Bool}
-

Adds simplistic checkpointing to a DFTK self-consistent field calculation. Requires JLD2 to be loaded.

source
DFTK.apply_KMethod
apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any
-
apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)

Compute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.

source
DFTK.apply_kernelMethod
apply_kernel(
+) -> DFTK.var"#accept_step#778"{Float64, Float64}
+

Accept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.

source
DFTK.apply_KMethod
apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any
+
apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)

Compute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.

source
DFTK.apply_kernelMethod
apply_kernel(
     basis::PlaneWaveBasis,
     δρ;
     RPA,
     kwargs...
 ) -> Any
-
apply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)

Computes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.

source
DFTK.apply_symopMethod
apply_symop(
+
apply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)

Computes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.

source
DFTK.apply_symopMethod
apply_symop(
     symop::SymOp,
     basis,
     kpoint,
     ψk::AbstractVecOrMat
 ) -> Tuple{Any, Any}
-

Apply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new $k$-point).

source
DFTK.apply_symopMethod
apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any
-

Apply a symmetry operation to a density.

source
DFTK.apply_ΩMethod
apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any
-
apply_Ω(δψ, ψ, H::Hamiltonian, Λ)

Compute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.

source
DFTK.apply_χ0Method
apply_χ0(
+

Apply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new $k$-point).

source
DFTK.apply_symopMethod
apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any
+

Apply a symmetry operation to a density.

source
DFTK.apply_ΩMethod
apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any
+
apply_Ω(δψ, ψ, H::Hamiltonian, Λ)

Compute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.

source
DFTK.apply_χ0Method
apply_χ0(
     ham,
     ψ,
     occupation,
@@ -170,41 +152,45 @@
     q,
     kwargs_sternheimer...
 ) -> Any
-

Get the density variation δρ corresponding to a potential variation δV.

source
DFTK.attach_pspMethod
attach_psp(
+

Get the density variation δρ corresponding to a potential variation δV.

source
DFTK.attach_pspMethod
attach_psp(
     system::AtomsBase.AbstractSystem,
     pspmap::AbstractDict{Symbol, String}
 ) -> AtomsBase.FlexibleSystem
 
attach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})
-attach_psp(system::AbstractSystem; psps::String...)

Return a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.

Examples

Select pseudopotentials for all silicon and oxygen atoms in the system.

julia> attach_psp(system, Dict(:Si => "hgh/lda/si-q4", :O => "hgh/lda/o-q6")

Same thing but using the kwargs syntax:

julia> attach_psp(system, Si="hgh/lda/si-q4", O="hgh/lda/o-q6")
source
DFTK.band_data_to_dictMethod
band_data_to_dict(
-    band_data::NamedTuple
-) -> Union{Nothing, Dict}
-

Convert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns the dictionary. On all other processors nothing is returned.

Some details on the conventions for the returned data:

  • εF: Computed Fermi level (if present in band_data)
  • labels: A mapping of high-symmetry k-Point labels to the index in the "kcoords" vector of the corresponding k-Point.
  • eigenvalues, eigenvalueserror, occupation, residualnorms: (nspin, nkpoints, n_bands) arrays of the respective data.
  • niter: (nspin, n_kpoints) array of the number of iterations the diagonalisation routine required.
source
DFTK.build_fft_plans!Method
build_fft_plans!(
+attach_psp(system::AbstractSystem; psps::String...)

Return a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.

Examples

Select pseudopotentials for all silicon and oxygen atoms in the system.

julia> attach_psp(system, Dict(:Si => "hgh/lda/si-q4", :O => "hgh/lda/o-q6")

Same thing but using the kwargs syntax:

julia> attach_psp(system, Si="hgh/lda/si-q4", O="hgh/lda/o-q6")
source
DFTK.band_data_to_dictMethod
band_data_to_dict(
+    band_data::NamedTuple;
+    kwargs...
+) -> Dict{String, Any}
+

Convert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns meaningful data. All other processors still return a dictionary (to simplify code in calling locations), but the data may be dummy.

Some details on the conventions for the returned data:

  • εF: Computed Fermi level (if present in band_data)
  • labels: A mapping of high-symmetry k-Point labels to the index in the "kcoords" vector of the corresponding k-Point.
  • eigenvalues, eigenvalues_error, occupation, residual_norms: (n_bands, n_kpoints, n_spin) arrays of the respective data.
  • n_iter: (n_kpoints, n_spin) array of the number of iterations the diagonalization routine required.
  • kpt_max_n_G: Maximal number of G-vectors used for any k-point.
  • kpt_n_G_vectors: (n_kpoints, n_spin) array, the number of valid G-vectors for each k-point, i.e. the extend along the first axis of ψ where data is valid.
  • kpt_G_vectors: (3, max_n_G, n_kpoints, n_spin) array of the integer (reduced) coordinates of the G-points used for each k-point.
  • ψ: (max_n_G, n_bands, n_kpoints, n_spin) arrays where max_n_G is the maximal number of G-vectors used for any k-point. The data is zero-padded, i.e. for k-points which have less G-vectors than maxnG, then there are tailing zeros.
source
DFTK.build_fft_plans!Method
build_fft_plans!(
     tmp::Array{ComplexF64}
 ) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}
-

Plan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.

source
DFTK.build_form_factorsMethod
build_form_factors(psp, qs::Array) -> Matrix
-

Build form factors (Fourier transforms of projectors) for an atom centered at 0.

source
DFTK.build_projection_vectors_Method
build_projection_vectors_(
+

Plan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.

source
DFTK.build_form_factorsMethod
build_form_factors(
+    psp,
+    G_plus_k::AbstractArray{StaticArraysCore.SArray{Tuple{3}, TT, 1, 3}, 1}
+) -> Matrix{T} where T<:(Complex{_A} where _A)
+

Build form factors (Fourier transforms of projectors) for an atom centered at 0.

source
DFTK.build_projection_vectorsMethod
build_projection_vectors(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     kpt::Kpoint,
     psps,
     psp_positions
 ) -> Any
 

Build projection vectors for a atoms array generated by term_nonlocal

\[\begin{aligned} -H_{\rm at} &= \sum_{ij} C_{ij} \ket{p_i} \bra{p_j} \\ -H_{\rm per} &= \sum_R \sum_{ij} C_{ij} \ket{p_i(x-R)} \bra{p_j(x-R)} +H_{\rm at} &= \sum_{ij} C_{ij} \ket{{\rm proj}_i} \bra{{\rm proj}_j} \\ +H_{\rm per} &= \sum_R \sum_{ij} C_{ij} \ket{{\rm proj}_i(x-R)} \bra{{\rm proj}_j(x-R)} \end{aligned}\]

\[\begin{aligned} \braket{e_k(G') \middle| H_{\rm per}}{e_k(G)} &= \ldots \\ - &= \frac{1}{Ω} \sum_{ij} C_{ij} \hat p_i(k+G') \hat p_j^*(k+G), -\end{aligned}\]

where $\hat p_i(q) = ∫_{ℝ^3} p_i(r) e^{-iq·r} dr$.

We store $\frac{1}{\sqrt Ω} \hat p_i(k+G)$ in proj_vectors.

source
DFTK.cell_to_supercellMethod
cell_to_supercell(scfres::NamedTuple) -> Any
-

Transpose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:

  • basis_supercell and ψ_supercell are computed by the routines above.
  • The supercell occupations vector is the concatenation of all input occupations vectors.
  • The supercell density is computed with supercell occupations and ψ_supercell.
  • Supercell energies are the multiplication of input energies by the number of unit cells in the supercell.

Other parameters stay untouched.

source
DFTK.cell_to_supercellMethod
cell_to_supercell(
+        &= \frac{1}{Ω} \sum_{ij} C_{ij} \widehat{\rm proj}_i(k+G') \widehat{\rm proj}_j^*(k+G),
+\end{aligned}\]

where $\widehat{\rm proj}_i(p) = ∫_{ℝ^3} {\rm proj}_i(r) e^{-ip·r} dr$.

We store $\frac{1}{\sqrt Ω} \widehat{\rm proj}_i(k+G)$ in proj_vectors.

source
DFTK.cell_to_supercellMethod
cell_to_supercell(scfres::NamedTuple) -> NamedTuple
+

Transpose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:

  • basis_supercell and ψ_supercell are computed by the routines above.
  • The supercell occupations vector is the concatenation of all input occupations vectors.
  • The supercell density is computed with supercell occupations and ψ_supercell.
  • Supercell energies are the multiplication of input energies by the number of unit cells in the supercell.

Other parameters stay untouched.

source
DFTK.cell_to_supercellMethod
cell_to_supercell(
     basis::PlaneWaveBasis{T, VT} where VT<:Real
-) -> PlaneWaveBasis
-

Construct a plane-wave basis whose unit cell is the supercell associated to an input basis $k$-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.

source
DFTK.cell_to_supercellMethod
cell_to_supercell(
+) -> PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}
+

Construct a plane-wave basis whose unit cell is the supercell associated to an input basis $k$-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.

source
DFTK.cell_to_supercellMethod
cell_to_supercell(
     ψ,
     basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,
     basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real
 ) -> Any
-

Re-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at $Γ$-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.

source
DFTK.cg!Method
cg!(
+

Re-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at $Γ$-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.

source
DFTK.cg!Method
cg!(
     x::AbstractArray{T, 1},
     A::LinearMaps.LinearMap{T},
     b::AbstractArray{T, 1};
@@ -214,30 +200,30 @@
     tol,
     maxiter,
     miniter
-) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), _A} where _A<:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}
-

Implementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.

source
DFTK.charge_ionicMethod
charge_ionic(el::DFTK.Element) -> Int64
-

Return the total ionic charge of an atom type (nuclear charge - core electrons)

source
DFTK.charge_nuclearMethod
charge_nuclear(_::DFTK.Element) -> Int64
-

Return the total nuclear charge of an atom type

source
DFTK.compute_amn_kpointMethod
compute_amn_kpoint(
+) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), <:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}}
+

Implementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.

source
DFTK.charge_ionicMethod
charge_ionic(el::DFTK.Element) -> Int64
+

Return the total ionic charge of an atom type (nuclear charge - core electrons)

source
DFTK.charge_nuclearMethod
charge_nuclear(_::DFTK.Element) -> Int64
+

Return the total nuclear charge of an atom type

source
DFTK.compute_amn_kpointMethod
compute_amn_kpoint(
     basis::PlaneWaveBasis,
     kpt,
     ψk,
     projections,
     n_bands
 ) -> Any
-

Compute the starting matrix for Wannierization.

Wannierization searches for a unitary matrix $U_{m_n}$. As a starting point for the search, we can provide an initial guess function $g$ for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called $[A_k]_{m,n}$, and is computed as follows: $[A_k]_{m,n} = \langle ψ_m^k | g^{\text{per}}_n \rangle$. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.

Centers are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.

Given an orbital $g_n$, the periodized orbital is defined by : $g^{per}_n = \sum\limits_{R \in {\rm lattice}} g_n( \cdot - R)$. The Fourier coefficient of $g^{per}_n$ at any G is given by the value of the Fourier transform of $g_n$ in G.

Each projection is a callable object that accepts the basis and some qpoints as an argument, and returns the Fourier transform of $g_n$ at the qpoints.

source
DFTK.compute_bandsMethod
compute_bands(
+

Compute the starting matrix for Wannierization.

Wannierization searches for a unitary matrix $U_{m_n}$. As a starting point for the search, we can provide an initial guess function $g$ for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called $[A_k]_{m,n}$, and is computed as follows: $[A_k]_{m,n} = \langle ψ_m^k | g^{\text{per}}_n \rangle$. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.

Centers are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.

Given an orbital $g_n$, the periodized orbital is defined by : $g^{per}_n = \sum\limits_{R \in {\rm lattice}} g_n( \cdot - R)$. The Fourier coefficient of $g^{per}_n$ at any G is given by the value of the Fourier transform of $g_n$ in G.

Each projection is a callable object that accepts the basis and some p-points as an argument, and returns the Fourier transform of $g_n$ at the p-points.

source
DFTK.compute_bandsMethod
compute_bands(
     basis_or_scfres,
     kpath::Brillouin.KPaths.KPath;
     kline_density,
     kwargs...
-) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization, :kinter)}
-

Compute band data along a specific Brillouin.KPath using a kline_density, the number of $k$-points per inverse bohrs (i.e. overall in units of length).

If not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.

source
DFTK.compute_bandsMethod
compute_bands(
+) -> NamedTuple
+

Compute band data along a specific Brillouin.KPath using a kline_density, the number of $k$-points per inverse bohrs (i.e. overall in units of length).

If not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.

source
DFTK.compute_bandsMethod
compute_bands(
     scfres::NamedTuple,
     kgrid::DFTK.AbstractKgrid;
     n_bands,
     kwargs...
-) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Any, Any, Vector}
-

Compute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).

source
DFTK.compute_bandsMethod
compute_bands(
+) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Any, Any, Vector{T} where T<:NamedTuple}}
+

Compute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).

source
DFTK.compute_bandsMethod
compute_bands(
     basis::PlaneWaveBasis,
     kgrid::DFTK.AbstractKgrid;
     n_bands,
@@ -247,26 +233,26 @@
     eigensolver,
     tol,
     kwargs...
-) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Nothing, Nothing, Vector}
-

Compute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:

  • kgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.
  • tol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.
  • eigensolver: The diagonalisation method to be employed.
source
DFTK.compute_currentMethod
compute_current(
+) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Nothing, Nothing, Vector{T} where T<:NamedTuple}}
+

Compute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:

  • kgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.
  • tol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.
  • eigensolver: The diagonalisation method to be employed.
source
DFTK.compute_currentMethod
compute_current(
     basis::PlaneWaveBasis,
     ψ,
     occupation
 ) -> Vector
-

Computes the probability (not charge) current, ∑ fn Im(ψn* ∇ψn)

source
DFTK.compute_densityMethod
compute_density(
+

Computes the probability (not charge) current, $∑_n f_n \Im(ψ_n · ∇ψ_n)$.

source
DFTK.compute_densityMethod
compute_density(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     ψ,
     occupation;
     occupation_threshold
 ) -> AbstractArray{_A, 4} where _A
-
compute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)

Compute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per $k$-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.

source
DFTK.compute_dosMethod
compute_dos(
+
compute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)

Compute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per $k$-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.

source
DFTK.compute_dosMethod
compute_dos(
     ε,
     basis,
     eigenvalues;
     smearing,
     temperature
 ) -> Any
-

Total density of states at energy ε

source
DFTK.compute_dynmatMethod
compute_dynmat(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     ψ,
     occupation;
@@ -277,15 +263,16 @@
     eigenvalues,
     kwargs...
 ) -> Any
-

Compute the dynamical matrix in the form of a $3×n_{\rm atoms}×3×n_{\rm atoms}$ tensor in reduced coordinates.

source
DFTK.compute_dynmat_cartMethod
compute_dynmat_cart(
+

Compute the dynamical matrix in the form of a $3×n_{\rm atoms}×3×n_{\rm atoms}$ tensor in reduced coordinates.

source
DFTK.compute_fft_sizeMethod
compute_fft_size(
     model::Model{T},
-    Ecut
+    Ecut;
+    ...
 ) -> Tuple{Vararg{Any, _A}} where _A
 compute_fft_size(
     model::Model{T},
@@ -296,22 +283,22 @@
     factors,
     kwargs...
 ) -> Tuple{Vararg{Any, _A}} where _A
-

Determine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).

Optionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.

The function will determine the smallest parallelepiped containing the wave vectors $|G|^2/2 \leq E_\text{cut} ⋅ \text{supersampling}^2$. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.

If factors is not empty, ensure that the resulting fft_size contains all the factors

source
DFTK.compute_forcesMethod
compute_forces(scfres) -> Any
-

Compute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.

source
DFTK.compute_forces_cartMethod
compute_forces_cart(
+

Determine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).

Optionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.

The function will determine the smallest parallelepiped containing the wave vectors $|G|^2/2 \leq E_\text{cut} ⋅ \text{supersampling}^2$. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.

If factors is not empty, ensure that the resulting fft_size contains all the factors

source
DFTK.compute_forcesMethod
compute_forces(scfres) -> Any
+

Compute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.

source
DFTK.compute_forces_cartMethod
compute_forces_cart(
     basis::PlaneWaveBasis,
     ψ,
     occupation;
     kwargs...
 ) -> Any
-

Compute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.

source
DFTK.compute_inverse_latticeMethod
compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any
-

Compute the inverse of the lattice. Takes special care of 1D or 2D cases.

source
DFTK.compute_kernelMethod
compute_kernel(
+

Compute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.

source
DFTK.compute_inverse_latticeMethod
compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any
+

Compute the inverse of the lattice. Takes special care of 1D or 2D cases.

source
DFTK.compute_kernelMethod
compute_kernel(
     basis::PlaneWaveBasis{T, VT} where VT<:Real;
     kwargs...
 ) -> Any
 
compute_kernel(basis::PlaneWaveBasis; kwargs...)

Computes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks

\[\left(\begin{array}{cc} K_{αα} & K_{αβ}\\ K_{βα} & K_{ββ} -\end{array}\right)\]

source
DFTK.compute_ldosMethod
compute_ldos(
     ε,
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     eigenvalues,
@@ -320,17 +307,18 @@
     temperature,
     weight_threshold
 ) -> AbstractArray{_A, 4} where _A
-

Local density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.

source
DFTK.compute_occupationMethod
compute_occupation(
+

Local density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.

source
DFTK.compute_occupationMethod
compute_occupation(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     eigenvalues::AbstractVector,
     εF::Number;
     temperature,
     smearing
-) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}
-

Compute occupation given eigenvalues and Fermi level

source
DFTK.compute_occupationMethod
compute_occupation(
+) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}
+

Compute occupation given eigenvalues and Fermi level

source
DFTK.compute_occupationMethod
compute_occupation(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
-    eigenvalues::AbstractVector
-) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}
+    eigenvalues::AbstractVector;
+    ...
+) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}
 compute_occupation(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     eigenvalues::AbstractVector,
@@ -338,44 +326,42 @@
     tol_n_elec,
     temperature,
     smearing
-) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}
-

Compute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.

source
DFTK.compute_recip_latticeMethod
compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any
-

Compute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.

source
DFTK.compute_stresses_cartMethod
compute_stresses_cart(scfres) -> Any
-

Compute the stresses (= 1/Vol dE/d(M*lattice), taken at M=I) of an obtained SCF solution.

source
DFTK.compute_transfer_matrixMethod
compute_transfer_matrix(
-    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
+) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}
+

Compute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.

source
DFTK.compute_recip_latticeMethod
compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any
+

Compute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.

source
DFTK.compute_stresses_cartMethod
compute_stresses_cart(scfres) -> Any
+

Compute the stresses of an obtained SCF solution. The stress tensor is given by

\[\left( \begin{array}{ccc} +σ_{xx} σ_{xy} σ_{xz} \\ +σ_{yx} σ_{yy} σ_{yz} \\ +σ_{zx} σ_{zy} σ_{zz} +\right) = \frac{1}{|Ω|} \left. \frac{dE[ (I+ϵ) * L]}{dM}\right|_{ϵ=0}\]

where $ϵ$ is the strain. See O. Nielsen, R. Martin Phys. Rev. B. 32, 3792 (1985) for details. In Voigt notation one would use the vector $[σ_{xx} σ_{yy} σ_{zz} σ_{zy} σ_{zx} σ_{yx}]$.

source
DFTK.compute_transfer_matrixMethod
compute_transfer_matrix(
+    basis_in::PlaneWaveBasis,
     kpt_in::Kpoint,
-    basis_out::PlaneWaveBasis{T, VT} where VT<:Real,
+    basis_out::PlaneWaveBasis,
     kpt_out::Kpoint
 ) -> Any
-

Return a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.

source
DFTK.compute_transfer_matrixMethod
compute_transfer_matrix(
-    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
-    basis_out::PlaneWaveBasis{T, VT} where VT<:Real
-) -> Any
-

Return a list of sparse matrices (one per $k$-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.

source
DFTK.compute_unit_cell_volumeMethod
compute_unit_cell_volume(lattice) -> Any
-

Compute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.

source
DFTK.compute_δHψ_sαMethod
compute_δHψ_sα(
-    basis::PlaneWaveBasis,
-    ψ,
-    q,
-    s,
-    α;
-    kwargs...
-) -> Any
-

Assemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.

source
DFTK.compute_δocc!Method
compute_δocc!(
+

Return a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.

source
DFTK.compute_transfer_matrixMethod
compute_transfer_matrix(
+    basis_in::PlaneWaveBasis,
+    basis_out::PlaneWaveBasis
+) -> Vector
+

Return a list of sparse matrices (one per $k$-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.

source
DFTK.compute_unit_cell_volumeMethod
compute_unit_cell_volume(lattice) -> Any
+

Compute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.

source
DFTK.compute_δHψ_αsMethod
compute_δHψ_αs(basis::PlaneWaveBasis, ψ, α, s, q) -> Any
+

Assemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.

source
DFTK.compute_δocc!Method
compute_δocc!(
     δocc,
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     ψ,
     εF,
     ε,
     δHψ
-) -> NamedTuple{(:δocc, :δεF), _A} where _A<:Tuple{Any, Any}
-

Compute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.

source
DFTK.compute_δψ!Method
compute_δψ!(
+) -> NamedTuple{(:δocc, :δεF), <:Tuple{Any, Any}}
+

Compute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.

source
DFTK.compute_δψ!Method
compute_δψ!(
     δψ,
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     H,
     ψ,
     εF,
     ε,
-    δHψ
+    δHψ;
+    ...
 )
 compute_δψ!(
     δψ,
@@ -390,30 +376,30 @@
     q,
     kwargs_sternheimer...
 )
-

Perform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.

source
DFTK.compute_χ0Method
compute_χ0(ham; temperature) -> Any
+

Perform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.

source
DFTK.compute_χ0Method
compute_χ0(ham; temperature) -> Any
 

Compute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:

\[\left(\begin{array}{cc} (χ_0)_{αα} & (χ_0)_{αβ} \\ (χ_0)_{βα} & (χ_0)_{ββ} -\end{array}\right)\]

source
DFTK.count_n_projMethod
count_n_proj(psps, psp_positions) -> Any
-
count_n_proj(psps, psp_positions)

Number of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.

source
DFTK.count_n_projMethod
count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any
-
count_n_proj(psp, l)

Number of projector functions for angular momentum l, including angular parts from -m:m.

source
DFTK.count_n_projMethod
count_n_proj(psp::DFTK.NormConservingPsp) -> Int64
-
count_n_proj(psp)

Number of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.

source
DFTK.count_n_projMethod
count_n_proj(psps, psp_positions) -> Any
+
count_n_proj(psps, psp_positions)

Number of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.

source
DFTK.count_n_projMethod
count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any
+
count_n_proj(psp, l)

Number of projector functions for angular momentum l, including angular parts from -m:m.

source
DFTK.count_n_projMethod
count_n_proj(psp::DFTK.NormConservingPsp) -> Int64
+
count_n_proj(psp)

Number of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.

source
DFTK.count_n_proj_radialMethod
count_n_proj_radial(
     psp::DFTK.NormConservingPsp,
     l::Integer
 ) -> Any
-
count_n_proj_radial(psp, l)

Number of projector radial functions at angular momentum l.

source
DFTK.count_n_proj_radialMethod
count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64
-
count_n_proj_radial(psp)

Number of projector radial functions at all angular momenta up to psp.lmax.

source
DFTK.create_supercellMethod
create_supercell(
+
count_n_proj_radial(psp, l)

Number of projector radial functions at angular momentum l.

source
DFTK.count_n_proj_radialMethod
count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64
+
count_n_proj_radial(psp)

Number of projector radial functions at all angular momenta up to psp.lmax.

source
DFTK.create_supercellMethod
create_supercell(
     lattice,
     atoms,
     positions,
     supercell_size
-) -> NamedTuple{(:lattice, :atoms, :positions), _A} where _A<:Tuple{Any, Any, Any}
-

Construct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.

source
DFTK.datadir_pspMethod
datadir_psp() -> String
-

Return the data directory with pseudopotential files

source
DFTK.default_fermialgMethod
default_fermialg(
+) -> NamedTuple{(:lattice, :atoms, :positions), <:Tuple{Any, Any, Any}}
+

Construct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.

source
DFTK.datadir_pspMethod
datadir_psp() -> String
+

Return the data directory with pseudopotential files

source
DFTK.default_fermialgMethod
default_fermialg(
     _::DFTK.Smearing.SmearingFunction
 ) -> FermiBisection
-

Default selection of a Fermi level determination algorithm

source
DFTK.default_symmetriesMethod
default_symmetries(
     lattice,
     atoms,
     positions,
@@ -422,9 +408,9 @@
     terms;
     tol_symmetry
 ) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
-

Default logic to determine the symmetry operations to be used in the model.

source
DFTK.default_wannier_centersMethod
default_wannier_centers(n_wannier) -> Any
-

Default random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.

source
DFTK.default_wannier_centersMethod
default_wannier_centers(n_wannier) -> Any
+

Default random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.

source
DFTK.diagonalize_all_kblocksMethod
diagonalize_all_kblocks(
     eigensolver,
     ham::Hamiltonian,
     nev_per_kpoint::Int64;
@@ -435,29 +421,37 @@
     miniter,
     maxiter,
     n_conv_check
-) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}
-

Function for diagonalising each $k$-Point blow of ham one step at a time. Some logic for interpolating between $k$-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single $k$-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)

source
DFTK.diameterMethod
diameter(lattice::AbstractMatrix) -> Any
-

Compute the diameter of the unit cell

source
DFTK.direct_minimizationMethod
direct_minimization(
-    basis::PlaneWaveBasis;
+) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}
+

Function for diagonalising each $k$-Point blow of ham one step at a time. Some logic for interpolating between $k$-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single $k$-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)

source
DFTK.diameterMethod
diameter(lattice::AbstractMatrix) -> Any
+

Compute the diameter of the unit cell

source
DFTK.direct_minimizationMethod
direct_minimization(
+    basis::PlaneWaveBasis{T, VT} where VT<:Real;
+    ψ,
+    tol,
+    is_converged,
+    maxiter,
+    prec_type,
+    callback,
+    optim_method,
+    linesearch,
     kwargs...
-) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :ψ, :eigenvalues, :occupation, :εF, :optim_res), _A} where _A<:Tuple{Any, PlaneWaveBasis, Any, Bool, Any, Any, Vector{Any}, Vector, Nothing, Optim.MultivariateOptimizationResults{Optim.LBFGS{DFTK.DMPreconditioner, LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, typeof(DFTK.precondprep!)}, _A, _B, _C, _D, Bool} where {_A, _B, _C, _D}}
-

Computes the ground state by direct minimization. kwargs... are passed to Optim.Options(). Note that the resulting ψ are not necessarily eigenvectors of the Hamiltonian.

source
DFTK.disable_threadingMethod
disable_threading() -> Union{Nothing, Bool}
-

Convenience function to disable all threading in DFTK and assert that Julia threading is off as well.

source
DFTK.divergence_realMethod
divergence_real(operand, basis) -> Any
-

Compute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.

source
DFTK.energy_forces_ewaldMethod
energy_forces_ewald(
+) -> Any
+

Computes the ground state by direct minimization. kwargs... are passed to Optim.Options() and optim_method selects the optim approach which is employed.

source
DFTK.disable_threadingMethod
disable_threading() -> Union{Nothing, Bool}
+

Convenience function to disable all threading in DFTK and assert that Julia threading is off as well.

source
DFTK.divergence_realMethod
divergence_real(operand, basis) -> Any
+

Compute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.

source
DFTK.energy_forces_ewaldMethod
energy_forces_ewald(
     lattice::AbstractArray{T},
     charges::AbstractArray,
     positions;
     kwargs...
-) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
-

Standard computation of energy and forces.

source
DFTK.energy_forces_ewaldMethod
energy_forces_ewald(
+) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
+

Standard computation of energy and forces.

source
DFTK.energy_forces_ewaldMethod
energy_forces_ewald(
     lattice::AbstractArray{T},
     charges,
     positions,
     q,
     ph_disp;
     kwargs...
-) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
-

Computation for phonons; required to build the dynamical matrix.

source
DFTK.energy_forces_ewaldMethod
energy_forces_ewald(
+) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
+

Computation for phonons; required to build the dynamical matrix.

source
DFTK.energy_forces_ewaldMethod
energy_forces_ewald(
     S,
     lattice::AbstractArray{T},
     charges,
@@ -465,16 +459,16 @@
     q,
     ph_disp;
     η
-) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
-

Compute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.

lattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.

For now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.

source
DFTK.energy_forces_pairwiseMethod
energy_forces_pairwise(
+) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
+

Compute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.

lattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.

For now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.

source
DFTK.energy_forces_pairwiseMethod
energy_forces_pairwise(
     lattice::AbstractArray{T},
     symbols,
     positions,
     V,
     params;
     kwargs...
-) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
-

Standard computation of energy and forces.

source
DFTK.energy_forces_pairwiseMethod
energy_forces_pairwise(
+) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
+

Standard computation of energy and forces.

source
DFTK.energy_forces_pairwiseMethod
energy_forces_pairwise(
     lattice::AbstractArray{T},
     symbols,
     positions,
@@ -483,8 +477,8 @@
     q,
     ph_disp;
     kwargs...
-) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
-

Computation for phonons; required to build the dynamical matrix.

source
DFTK.energy_forces_pairwiseMethod
energy_forces_pairwise(
+) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
+

Computation for phonons; required to build the dynamical matrix.

source
DFTK.energy_forces_pairwiseMethod
energy_forces_pairwise(
     S,
     lattice::AbstractArray{T},
     symbols,
@@ -494,90 +488,100 @@
     q,
     ph_disp;
     max_radius
-) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
-

Compute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.

lattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).

The potential is expected to decrease quickly at infinity.

source
DFTK.energy_psp_correctionMethod
energy_psp_correction(
+) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
+

Compute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.

lattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).

The potential is expected to decrease quickly at infinity.

source
DFTK.energy_psp_correctionMethod
energy_psp_correction(
     lattice::AbstractArray{T, 2},
     atoms,
     atom_groups
 ) -> Any
-

Compute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.

source
DFTK.enforce_real!Method
enforce_real!(
+

Compute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.

source
DFTK.enforce_real!Method
enforce_real!(
     fourier_coeffs,
     basis::PlaneWaveBasis
 ) -> AbstractArray
-

Ensure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.

source
DFTK.estimate_integer_lattice_boundsMethod
estimate_integer_lattice_bounds(
+

Ensure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.

source
DFTK.estimate_integer_lattice_boundsMethod
estimate_integer_lattice_bounds(
     M::AbstractArray{T, 2},
-    δ
-) -> Any
+    δ;
+    ...
+) -> Vector
 estimate_integer_lattice_bounds(
     M::AbstractArray{T, 2},
     δ,
     shift;
     tol
-) -> Any
-

Estimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.

source
DFTK.eval_psp_density_core_fourierMethod
eval_psp_density_core_fourier(
+) -> Vector
+

Estimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.

source
DFTK.eval_psp_density_core_fourierMethod
eval_psp_density_core_fourier(
     _::DFTK.NormConservingPsp,
     _::Real
-) -> Real
-
eval_psp_density_core_fourier(psp, q)

Evaluate the atomic core charge density in reciprocal space: ρval(q) = ∫{R^3} ρcore(r) e^{-iqr} dr = 4π ∫{R+} ρcore(r) sin(qr)/qr r^2 dr

source
DFTK.eval_psp_density_core_realMethod
eval_psp_density_core_real(
+) -> Any
+
eval_psp_density_core_fourier(psp, p)

Evaluate the atomic core charge density in reciprocal space:

\[\begin{aligned} +ρ_{\rm core}(p) &= ∫_{ℝ^3} ρ_{\rm core}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} ρ_{\rm core}(r) \frac{\sin(p·r)}{ρ·r} r^2 dr. +\end{aligned}\]

source
DFTK.eval_psp_density_core_realMethod
eval_psp_density_core_real(
     _::DFTK.NormConservingPsp,
     _::Real
 ) -> Any
-
eval_psp_density_core_real(psp, r)

Evaluate the atomic core charge density in real space.

source
DFTK.eval_psp_density_valence_fourierMethod
eval_psp_density_valence_fourier(
     psp::DFTK.NormConservingPsp,
-    q::AbstractVector
-) -> Real
-
eval_psp_density_valence_fourier(psp, q)

Evaluate the atomic valence charge density in reciprocal space: ρval(q) = ∫{R^3} ρval(r) e^{-iqr} dr = 4π ∫{R+} ρval(r) sin(qr)/qr r^2 dr

source
DFTK.eval_psp_density_valence_realMethod
eval_psp_density_valence_real(
+    p::AbstractVector
+) -> Any
+
eval_psp_density_valence_fourier(psp, p)

Evaluate the atomic valence charge density in reciprocal space:

\[\begin{aligned} +ρ_{\rm val}(p) &= ∫_{ℝ^3} ρ_{\rm val}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} ρ_{\rm val}(r) \frac{\sin(p·r)}{ρ·r} r^2 dr. +\end{aligned}\]

source
DFTK.eval_psp_density_valence_realMethod
eval_psp_density_valence_real(
     psp::DFTK.NormConservingPsp,
     r::AbstractVector
 ) -> Any
-
eval_psp_density_valence_real(psp, r)

Evaluate the atomic valence charge density in real space.

source
DFTK.eval_psp_energy_correctionFunction
eval_psp_energy_correction([T=Float64,] psp, n_electrons)

Evaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.

Notice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.

The energy correction is defined as the limit of the Fourier-transform of the local potential as $q \to 0$, using the same correction as in the Fourier-transform of the local potential: math \lim_{q \to 0} 4π N_{\rm elec} ∫_{ℝ_+} (V(r) - C(r)) \frac{\sin(qr)}{qr} r^2 dr + F[C(r)] = 4π N_{\rm elec} ∫_{ℝ_+} (V(r) + Z/r) r^2 dr

source
DFTK.eval_psp_energy_correctionFunction
eval_psp_energy_correction([T=Float64,] psp, n_electrons)

Evaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.

Notice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.

The energy correction is defined as the limit of the Fourier-transform of the local potential as $p \to 0$, using the same correction as in the Fourier-transform of the local potential:

\[\lim_{p \to 0} 4π N_{\rm elec} ∫_{ℝ_+} (V(r) - C(r)) \frac{\sin(p·r)}{p·r} r^2 dr + F[C(r)] + = 4π N_{\rm elec} ∫_{ℝ_+} (V(r) + Z/r) r^2 dr.\]

source
DFTK.eval_psp_local_fourierMethod
eval_psp_local_fourier(
     psp::DFTK.NormConservingPsp,
-    q::AbstractVector
+    p::AbstractVector
 ) -> Any
-
eval_psp_local_fourier(psp, q)

Evaluate the local part of the pseudopotential in reciprocal space:

\[\begin{aligned} -V_{\rm loc}(q) &= ∫_{ℝ^3} V_{\rm loc}(r) e^{-iqr} dr \\ - &= 4π ∫_{ℝ_+} V_{\rm loc}(r) \frac{\sin(qr)}{q} r dr +

eval_psp_local_fourier(psp, p)

Evaluate the local part of the pseudopotential in reciprocal space:

\[\begin{aligned} +V_{\rm loc}(p) &= ∫_{ℝ^3} V_{\rm loc}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} V_{\rm loc}(r) \frac{\sin(p·r)}{p} r dr \end{aligned}\]

In practice, the local potential should be corrected using a Coulomb-like term $C(r) = -Z/r$ to remove the long-range tail of $V_{\rm loc}(r)$ from the integral:

\[\begin{aligned} -V_{\rm loc}(q) &= ∫_{ℝ^3} (V_{\rm loc}(r) - C(r)) e^{-iq·r} dr + F[C(r)] \\ - &= 4π ∫_{ℝ_+} (V_{\rm loc}(r) + Z/r) \frac{\sin(qr)}{qr} r^2 dr - Z/q^2 -\end{aligned}\]

source
DFTK.eval_psp_local_realMethod
eval_psp_local_real(
+V_{\rm loc}(p) &= ∫_{ℝ^3} (V_{\rm loc}(r) - C(r)) e^{-ip·r} dr + F[C(r)] \\
+               &= 4π ∫_{ℝ_+} (V_{\rm loc}(r) + Z/r) \frac{\sin(p·r)}{p·r} r^2 dr - Z/p^2.
+\end{aligned}\]

source
DFTK.eval_psp_local_realMethod
eval_psp_local_real(
     psp::DFTK.NormConservingPsp,
     r::AbstractVector
 ) -> Any
-
eval_psp_local_real(psp, r)

Evaluate the local part of the pseudopotential in real space.

source
DFTK.eval_psp_projector_fourierMethod
eval_psp_projector_fourier(
     psp::DFTK.NormConservingPsp,
-    q::AbstractVector
+    p::AbstractVector
 )
-
eval_psp_projector_fourier(psp, i, l, q)

Evaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus q:

\[\begin{aligned} -p(q) &= ∫_{ℝ^3} p_{il}(r) e^{-iq·r} dr \\ - &= 4π ∫_{ℝ_+} r^2 p_{il}(r) j_l(qr) dr -\end{aligned}\]

source
DFTK.eval_psp_projector_realMethod
eval_psp_projector_real(
+
eval_psp_projector_fourier(psp, i, l, p)

Evaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus p:

\[\begin{aligned} +{\rm proj}(p) &= ∫_{ℝ^3} {\rm proj}_{il}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} r^2 {\rm proj}_{il}(r) j_l(p·r) dr. +\end{aligned}\]

source
DFTK.eval_psp_projector_realMethod
eval_psp_projector_real(
     psp::DFTK.NormConservingPsp,
     i,
     l,
     r::AbstractVector
 ) -> Any
-
eval_psp_projector_real(psp, i, l, r)

Evaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.

source
DFTK.filled_occupationMethod
filled_occupation(model) -> Int64
-

Maximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).

source
DFTK.find_equivalent_kptMethod
find_equivalent_kpt(
+
eval_psp_projector_real(psp, i, l, r)

Evaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.

source
DFTK.filled_occupationMethod
filled_occupation(model) -> Int64
+

Maximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).

source
DFTK.find_equivalent_kptMethod
find_equivalent_kpt(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     kcoord,
     spin;
     tol
-) -> NamedTuple{(:index, :ΔG), _A} where _A<:Tuple{Int64, Any}
-

Find the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.

source
DFTK.gather_kptsMethod
gather_kpts(
-    data::AbstractArray,
-    basis::PlaneWaveBasis
-) -> Any
-

Gather the distributed data of a quantity depending on k-Points on the master process and return it. On the other (non-master) processes nothing is returned.

source
DFTK.gather_kptsMethod
gather_kpts(
+) -> NamedTuple{(:index, :ΔG), <:Tuple{Int64, Any}}
+

Find the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.

source
DFTK.gather_kptsMethod
gather_kpts(
     basis::PlaneWaveBasis
 ) -> Union{Nothing, PlaneWaveBasis}
-

Gather the distributed $k$-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only to extract data for post-processing and serialisation to disk.

source
DFTK.gaussian_valence_charge_density_fourierMethod
gaussian_valence_charge_density_fourier(
+

Gather the distributed $k$-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only for debugging or to extract data for serialisation to disk.

source
DFTK.gather_kpts_block!Method
gather_kpts_block!(
+    dest,
+    basis::PlaneWaveBasis,
+    kdata::AbstractArray{A, 1}
+) -> Any
+

Gather the distributed data of a quantity depending on k-Points on the master process and save it in dest as a dense (size(kdata[1])..., n_kpoints) array. On the other (non-master) processes nothing is returned.

source
DFTK.guess_densityFunction
guess_density(
+    p::Real
+) -> Any
+

Gaussian valence charge density using Abinit's coefficient table, in Fourier space.

source
DFTK.guess_densityFunction
guess_density(
     basis::PlaneWaveBasis,
-    method::AtomicDensity
+    method::AtomicDensity;
+    ...
 ) -> Any
 guess_density(
     basis::PlaneWaveBasis,
@@ -586,74 +590,102 @@
     n_electrons
 ) -> Any
 
guess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,
-              magnetic_moments=[]; n_electrons=basis.model.n_electrons)

Build a superposition of atomic densities (SAD) guess density or a rarndom guess density.

The guess atomic densities are taken as one of the following depending on the input method:

-RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:

\[\hat{ρ}(G) = Z_{\mathrm{valence}} \exp\left(-(2π \text{length} |G|)^2\right)\]

  • ValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the

pseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.

When magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of $μ_B$.

source
DFTK.hamiltonian_with_total_potentialMethod
hamiltonian_with_total_potential(
+              magnetic_moments=[]; n_electrons=basis.model.n_electrons)

Build a superposition of atomic densities (SAD) guess density or a rarndom guess density.

The guess atomic densities are taken as one of the following depending on the input method:

-RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:

\[\hat{ρ}(G) = Z_{\mathrm{valence}} \exp\left(-(2π \text{length} |G|)^2\right)\]

  • ValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the

pseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.

When magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of $μ_B$.

source
DFTK.hankelMethod
hankel(
+

Returns a new Hamiltonian with local potential replaced by the given one

source
DFTK.hankelMethod
hankel(
     r::AbstractVector,
     r2_f::AbstractVector,
     l::Integer,
-    q::Real
-) -> Real
-
hankel(r, r2_f, l, q)

Compute the Hankel transform

\[ H[f] = 4\pi \int_0^\infty r f(r) j_l(qr) r dr.\]

The integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate q.

source
DFTK.has_core_densityMethod
has_core_density(_::DFTK.Element) -> Any
-

Check presence of model core charge density (non-linear core correction).

source
DFTK.index_G_vectorsMethod
index_G_vectors(
+    p::Real
+) -> Any
+
hankel(r, r2_f, l, p)

Compute the Hankel transform

\[ H[f] = 4\pi \int_0^\infty r f(r) j_l(p·r) r dr.\]

The integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate p.

source
DFTK.has_core_densityMethod
has_core_density(_::DFTK.Element) -> Any
+

Check presence of model core charge density (non-linear core correction).

source
DFTK.index_G_vectorsMethod
index_G_vectors(
     fft_size::Tuple,
     G::AbstractVector{<:Integer}
 ) -> Any
-

Return the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.

source
DFTK.interpolate_densityMethod
interpolate_density(
-    ρ_in,
+

Return the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.

source
DFTK.interpolate_densityMethod
interpolate_density(
+    ρ_in::AbstractArray{T, 4},
     basis_in::PlaneWaveBasis,
     basis_out::PlaneWaveBasis
-) -> Any
-

Interpolate a function expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.

source
DFTK.interpolate_kpointMethod
interpolate_kpoint(
+) -> AbstractArray{T, 4} where T
+

Interpolate a density expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.

source
DFTK.interpolate_densityMethod
interpolate_density(
+    ρ_in::AbstractArray{T, 4},
+    grid_in::Tuple{T, T, T} where T,
+    grid_out::Tuple{T, T, T} where T,
+    lattice_in,
+    lattice_out
+) -> AbstractArray{T, 4} where T
+

Interpolate a density in real space from one FFT grid to another, where lattice_in and lattice_out may be supercells of each other.

source
DFTK.interpolate_densityMethod
interpolate_density(
+    ρ_in::AbstractArray{T, 4},
+    grid_out::Tuple{T, T, T} where T
+) -> AbstractArray{T, 4} where T
+

Interpolate a density in real space from one FFT grid to another. Assumes the lattice is unchanged.

source
DFTK.interpolate_kpointMethod
interpolate_kpoint(
     data_in::AbstractVecOrMat,
     basis_in::PlaneWaveBasis,
     kpoint_in::Kpoint,
     basis_out::PlaneWaveBasis,
     kpoint_out::Kpoint
 ) -> Any
-

Interpolate some data from one $k$-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.

source
DFTK.irfftMethod
irfft(
+

Interpolate some data from one $k$-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.

source
DFTK.irfftMethod
irfft(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     f_fourier::AbstractArray
 ) -> Any
-

Perform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.

source
DFTK.irreducible_kcoordsMethod
irreducible_kcoords(
     kgrid::MonkhorstPack,
     symmetries::AbstractVector{<:SymOp};
     check_symmetry
-) -> Union{NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, Vector{Float64}}}, NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Float64}}, Vector{Float64}}}}
-

Construct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.

source
DFTK.is_metalMethod
is_metal(eigenvalues, εF; tol) -> Bool
-
is_metal(eigenvalues, εF; tol)

Determine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.

source
DFTK.k_to_equivalent_kpq_permutationMethod
k_to_equivalent_kpq_permutation(
+) -> Union{@NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, kweights::Vector{Float64}}, @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Float64}}, kweights::Vector{Float64}}}
+

Construct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.

source
DFTK.is_metalMethod
is_metal(eigenvalues, εF; tol) -> Bool
+
is_metal(eigenvalues, εF; tol)

Determine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.

source
DFTK.k_to_equivalent_kpq_permutationMethod
k_to_equivalent_kpq_permutation(
     basis::PlaneWaveBasis,
     qcoord
-) -> Any
-

Return the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.

source
DFTK.kgrid_from_maximal_spacingMethod
kgrid_from_maximal_spacing(
+) -> Vector
+

Return the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.

source
DFTK.kgrid_from_maximal_spacingMethod
kgrid_from_maximal_spacing(
     lattice,
     spacing;
     kshift
 ) -> Union{MonkhorstPack, Vector{Int64}}
-

Build a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around $2π * 0.04 \AA^{-1}$).

source
DFTK.kgrid_from_minimal_n_kpointsMethod
kgrid_from_minimal_n_kpoints(
     lattice,
     n_kpoints::Integer;
     kshift
 ) -> Union{MonkhorstPack, Vector{Int64}}
-

Selects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of $k$-points are used. The distribution of $k$-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.

source
DFTK.kpath_get_kcoordsMethod
kpath_get_kcoords(
+

Selects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of $k$-points are used. The distribution of $k$-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.

source
DFTK.kpath_get_kcoordsMethod
kpath_get_kcoords(
     kinter::Brillouin.KPaths.KPathInterpolant{D}
-) -> Any
-

Return kpoint coordinates in reduced coordinates

source
DFTK.kpq_equivalent_blochwave_to_kpqMethod
kpq_equivalent_blochwave_to_kpq(
     basis,
     kpt,
     q,
     ψk_plus_q_equivalent
-) -> NamedTuple{(:kpt, :ψk), _A} where _A<:Tuple{Kpoint, Any}
-

Create the Fourier expansion of $ψ_{k+q}$ from $ψ_{[k+q]}$, where $[k+q]$ is in basis.kpoints. while $k+q$ may or may not be inside.

If $ΔG ≔ [k+q] - (k+q)$, then we have that

\[ ∑_G \hat{u}_{[k+q]}(G) e^{i(k+q+G)·r} &= ∑_{G'} \hat{u}_{k+q}(G'-ΔG) e^{i(k+q+ΔG+G')·r},\]

hence

\[ u_{k+q}(G) = u_{[k+q]}(G + ΔG).\]

source
DFTK.krange_spinMethod
krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any
-

Return the index range of $k$-points that have a particular spin component.

source
DFTK.list_pspFunction
list_psp() -> Any
+) -> NamedTuple{(:kpt, :ψk), <:Tuple{Kpoint, Any}}
+

Create the Fourier expansion of $ψ_{k+q}$ from $ψ_{[k+q]}$, where $[k+q]$ is in basis.kpoints. while $k+q$ may or may not be inside.

If $ΔG ≔ [k+q] - (k+q)$, then we have that

\[ ∑_G \hat{u}_{[k+q]}(G) e^{i(k+q+G)·r} &= ∑_{G'} \hat{u}_{k+q}(G'-ΔG) e^{i(k+q+ΔG+G')·r},\]

hence

\[ u_{k+q}(G) = u_{[k+q]}(G + ΔG).\]

source
DFTK.krange_spinMethod
krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any
+

Return the index range of $k$-points that have a particular spin component.

source
DFTK.kwargs_scf_checkpointsMethod
kwargs_scf_checkpoints(
+    basis::DFTK.AbstractBasis;
+    filename,
+    callback,
+    diagtolalg,
+    ρ,
+    ψ,
+    save_ψ,
+    kwargs...
+) -> NamedTuple{(:callback, :diagtolalg, :ψ, :ρ), <:Tuple{ComposedFunction{ScfDefaultCallback, ScfSaveCheckpoints}, AdaptiveDiagtol, Any, Any}}
+

Transparently handle checkpointing by either returning kwargs for self_consistent_field, which start checkpointing (if no checkpoint file is present) or that continue a checkpointed run (if a checkpoint file can be loaded). filename is the location where the checkpoint is saved, save_ψ determines whether orbitals are saved in the checkpoint as well. The latter is discouraged, since generally slow.

source
DFTK.list_pspFunction
list_psp(; ...) -> Any
 list_psp(element; family, functional, core) -> Any
-
list_psp(element; functional, family, core)

List the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.

Examples

julia> list_psp(; family="hgh")

will list all HGH-type pseudopotentials and

julia> list_psp(; family="hgh", functional="lda")

will only list those for LDA (also known as Pade in this context) and

julia> list_psp(:O, core=:semicore)

will list all oxygen semicore pseudopotentials known to DFTK.

source
DFTK.load_pspMethod
load_psp(
+
list_psp(element; functional, family, core)

List the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.

Examples

julia> list_psp(; family="hgh")

will list all HGH-type pseudopotentials and

julia> list_psp(; family="hgh", functional="lda")

will only list those for LDA (also known as Pade in this context) and

julia> list_psp(:O, core=:semicore)

will list all oxygen semicore pseudopotentials known to DFTK.

source
DFTK.load_pspMethod
load_psp(
     key::AbstractString;
     kwargs...
-) -> Union{PspHgh{Float64}, PspUpf}
-

Load a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.

source
DFTK.model_DFTMethod
model_DFT(
+) -> Union{PspHgh{Float64}, PspUpf{_A, Interpolations.Extrapolation{T, 1, ITPT, IT, Interpolations.Throw{Nothing}}} where {_A, T, ITPT, IT}}
+

Load a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.

source
DFTK.load_scfresFunction
load_scfres(filename::AbstractString; ...) -> Any
+load_scfres(
+    filename::AbstractString,
+    basis;
+    skip_hamiltonian,
+    strict
+) -> Any
+

Load back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.

If basis is nothing, the basis is also loaded and reconstructed from the file, in which case architecture=CPU(). If a basis is passed, this one is used, which can be used to continue computation on a slightly different model or to avoid the cost of rebuilding the basis. If the stored basis and the passed basis are inconsistent (e.g. different FFT size, Ecut, k-points etc.) the load_scfres will error out.

By default the energies and ham (Hamiltonian object) are recomputed. To avoid this, set skip_hamiltonian=true. On errors the routine exits unless strict=false in which case it tries to recover from the file as much data as it can, but then the resulting scfres might not be fully consistent.

No compatibility guarantees

No guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions (including patch versions) or stop working / be removed in the future.

source
DFTK.model_DFTMethod
model_DFT(
     lattice::AbstractMatrix,
     atoms::Vector{<:DFTK.Element},
     positions::Vector{<:AbstractVector},
@@ -661,25 +693,25 @@
     extra_terms,
     kwargs...
 ) -> Model
-

Build a DFT model from the specified atoms, with the specified functionals.

source
DFTK.model_LDAMethod
model_LDA(
+

Build a DFT model from the specified atoms, with the specified functionals.

source
DFTK.model_LDAMethod
model_LDA(
     lattice::AbstractMatrix,
     atoms::Vector{<:DFTK.Element},
     positions::Vector{<:AbstractVector};
     kwargs...
 ) -> Model
-

Build an LDA model (Perdew & Wang parametrization) from the specified atoms. DOI:10.1103/PhysRevB.45.13244

source
DFTK.model_PBEMethod
model_PBE(
     lattice::AbstractMatrix,
     atoms::Vector{<:DFTK.Element},
     positions::Vector{<:AbstractVector};
     kwargs...
 ) -> Model
-

Build an PBE-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.77.3865

source
DFTK.model_SCANMethod
model_SCAN(
     lattice::AbstractMatrix,
     atoms::Vector{<:DFTK.Element},
     positions::Vector{<:AbstractVector};
     kwargs...
 ) -> Model
-

Build a SCAN meta-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.115.036402

source
DFTK.model_atomicMethod
model_atomic(
     lattice::AbstractMatrix,
     atoms::Vector{<:DFTK.Element},
     positions::Vector{<:AbstractVector};
@@ -687,18 +719,18 @@
     kinetic_blowup,
     kwargs...
 ) -> Model
-

Convenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.

source
DFTK.mpi_nprocsFunction
mpi_nprocs() -> Int64
+

Convenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.

source
DFTK.mpi_nprocsFunction
mpi_nprocs() -> Int64
 mpi_nprocs(comm) -> Int64
-

Number of processors used in MPI. Can be called without ensuring initialization.

source
DFTK.multiply_ψ_by_blochwaveMethod
multiply_ψ_by_blochwave(
     basis::PlaneWaveBasis,
     ψ,
     f_real,
     q
 ) -> Any
-
multiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)

Return the Fourier coefficients for the Bloch waves $f^{\rm real}_{q} ψ_{k-q}$ in an element of basis.kpoints equivalent to $k-q$.

source
DFTK.newtonMethod
newton(
+
multiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)

Return the Fourier coefficients for the Bloch waves $f^{\rm real}_{q} ψ_{k-q}$ in an element of basis.kpoints equivalent to $k-q$.

source
DFTK.newtonMethod
newton(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     ψ0;
     tol,
@@ -706,21 +738,23 @@
     maxiter,
     callback,
     is_converged
-) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String}
+) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String, UInt64}}
 
newton(basis::PlaneWaveBasis{T}, ψ0;
        tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),
-       is_converged=ScfConvergenceDensity(tol))

Newton algorithm. Be careful that the starting point needs to be not too far from the solution.

source
DFTK.next_compatible_fft_sizeMethod
next_compatible_fft_size(
+       is_converged=ScfConvergenceDensity(tol))

Newton algorithm. Be careful that the starting point needs to be not too far from the solution.

source
DFTK.next_compatible_fft_sizeMethod
next_compatible_fft_size(
     size::Int64;
     smallprimes,
     factors
 ) -> Int64
-

Find the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.

source
DFTK.next_densityFunction
next_density(
-    ham::Hamiltonian
-) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Float64}
+

Find the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.

source
DFTK.next_densityFunction
next_density(
+    ham::Hamiltonian;
+    ...
+) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Float64}}
 next_density(
     ham::Hamiltonian,
-    nbandsalg::DFTK.NbandsAlgorithm
-) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}
+    nbandsalg::DFTK.NbandsAlgorithm;
+    ...
+) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}
 next_density(
     ham::Hamiltonian,
     nbandsalg::DFTK.NbandsAlgorithm,
@@ -730,33 +764,33 @@
     eigenvalues,
     occupation,
     kwargs...
-) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}
-

Obtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.

source
DFTK.norm_cplxMethod
norm_cplx(x) -> Any
-

Complex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.

source
DFTK.overlap_Mmn_k_kpbMethod
overlap_Mmn_k_kpb(
+) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}
+

Obtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.

source
DFTK.norm_cplxMethod
norm_cplx(x) -> Any
+

Complex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.

source
DFTK.overlap_Mmn_k_kpbMethod
overlap_Mmn_k_kpb(
     basis::PlaneWaveBasis,
     ψ,
     ik,
-    ikpb,
+    ik_plus_b,
     G_shift,
     n_bands
 ) -> Any
-

Computes the matrix $[M^{k,b}]_{m,n} = \langle u_{m,k} | u_{n,k+b} \rangle$ for given k, kpb = $k+b$.

G_shift is the "shifting" vector, correction due to the periodicity conditions imposed on $k \to ψ_k$. It is non zero if kpb is taken in another unit cell of the reciprocal lattice. We use here that: $u_{n(k + G_{\rm shift})}(r) = e^{-i*\langle G_{\rm shift},r \rangle} u_{nk}$.

source
DFTK.phonon_modesMethod
phonon_modes(
+

Computes the matrix $[M^{k,b}]_{m,n} = \langle u_{m,k} | u_{n,k+b} \rangle$ for given k.

G_shift is the "shifting" vector, correction due to the periodicity conditions imposed on $k \to ψ_k$. It is non zero if k_plus_b is taken in another unit cell of the reciprocal lattice. We use here that: $u_{n(k + G_{\rm shift})}(r) = e^{-i*\langle G_{\rm shift},r \rangle} u_{nk}$.

source
DFTK.pcut_psp_localMethod
pcut_psp_local(psp::PspHgh{T}) -> Any
+

Estimate an upper bound for the argument p after which abs(eval_psp_local_fourier(psp, p)) is a strictly decreasing function.

source
DFTK.pcut_psp_projectorMethod
pcut_psp_projector(psp::PspHgh{T}, i, l) -> Any
+

Estimate an upper bound for the argument p after which eval_psp_projector_fourier(psp, p) is a strictly decreasing function.

source
DFTK.phonon_modesMethod
phonon_modes(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     dynmat
-) -> NamedTuple{(:frequencies, :vectors), _A} where _A<:Tuple{Any, Any}
-

Solve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).

source
DFTK.plot_bandstructureFunction

Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u"eV" (electron volts).

source
DFTK.plot_dosFunction

Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.

source
DFTK.psp_local_polynomialFunction
psp_local_polynomial(T, psp::PspHgh) -> Any
+) -> NamedTuple{(:frequencies, :vectors), <:Tuple{Any, Any}}
+

Solve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).

source
DFTK.plot_bandstructureFunction

Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u"eV" (electron volts).

source
DFTK.plot_dosFunction

Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.

source
DFTK.psp_local_polynomialFunction
psp_local_polynomial(T, psp::PspHgh) -> Any
 psp_local_polynomial(T, psp::PspHgh, t) -> Any
-

The local potential of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) / (t^2 exp(t^2 / 2))$ where $t = r_\text{loc} q$ and Q is a polynomial of at most degree 8. This function returns Q.

source
DFTK.psp_projector_polynomialFunction
psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any
+

The local potential of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) / (t^2 exp(t^2 / 2))$ where $t = r_\text{loc} p$ and Q is a polynomial of at most degree 8. This function returns Q.

source
DFTK.psp_projector_polynomialFunction
psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any
 psp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any
-

The nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) exp(-t^2 / 2)$ where $t = r_l q$ and Q is a polynomial. This function returns Q.

source
DFTK.qcut_psp_localMethod
qcut_psp_local(psp::PspHgh{T}) -> Any
-

Estimate an upper bound for the argument q after which abs(eval_psp_local_fourier(psp, q)) is a strictly decreasing function.

source
DFTK.qcut_psp_projectorMethod
qcut_psp_projector(psp::PspHgh{T}, i, l) -> Any
-

Estimate an upper bound for the argument q after which eval_psp_projector_fourier(psp, q) is a strictly decreasing function.

source
DFTK.r_vectorsMethod
r_vectors(
+

The nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) exp(-t^2 / 2)$ where $t = r_l p$ and Q is a polynomial. This function returns Q.

source
DFTK.r_vectorsMethod
r_vectors(
     basis::PlaneWaveBasis
 ) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real
-
r_vectors(basis::PlaneWaveBasis)

The list of $r$ vectors, in reduced coordinates. By convention, this is in [0,1)^3.

source
DFTK.r_vectors_cartMethod
r_vectors_cart(basis::PlaneWaveBasis) -> Any
-
r_vectors_cart(basis::PlaneWaveBasis)

The list of $r$ vectors, in cartesian coordinates.

source
DFTK.radial_hydrogenicMethod
radial_hydrogenic(
+
r_vectors(basis::PlaneWaveBasis)

The list of $r$ vectors, in reduced coordinates. By convention, this is in [0,1)^3.

source
DFTK.r_vectors_cartMethod
r_vectors_cart(basis::PlaneWaveBasis) -> Any
+
r_vectors_cart(basis::PlaneWaveBasis)

The list of $r$ vectors, in cartesian coordinates.

source
DFTK.radial_hydrogenicMethod
radial_hydrogenic(
     r::AbstractArray{T<:Real, 1},
     n::Integer
 ) -> Any
@@ -765,44 +799,58 @@
     n::Integer,
     α::Real
 ) -> Any
-

Radial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.

Arguments

  • r: radial grid
  • n: principal quantum number
  • α: diffusivity, $\frac{Z}/{a}$ where $Z$ is the atomic number and $a$ is the Bohr radius.
source
DFTK.random_densityMethod
random_density(
+

Radial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.

Arguments

  • r: radial grid
  • n: principal quantum number
  • α: diffusivity, $\frac{Z}{a}$ where $Z$ is the atomic number and $a$ is the Bohr radius.
source
DFTK.random_densityMethod
random_density(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     n_electrons::Integer
 ) -> Any
-

Build a random charge density normalized to the provided number of electrons.

source
DFTK.read_w90_nnkpMethod
read_w90_nnkp(
+

Build a random charge density normalized to the provided number of electrons.

source
DFTK.read_w90_nnkpMethod
read_w90_nnkp(
     fileprefix::String
-) -> NamedTuple{(:nntot, :nnkpts), Tuple{Int64, Vector{NamedTuple{(:ik, :ikpb, :G_shift), Tuple{Int64, Int64, Vector{Int64}}}}}}
-

Read the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. "wannier90.x -pp prefix") Returns:

  1. the array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).
  2. the number 'nntot' of neighbors per k point.

TODO: add the possibility to exclude bands

source
DFTK.reducible_kcoordsMethod
reducible_kcoords(
+) -> @NamedTuple{nntot::Int64, nnkpts::Vector{@NamedTuple{ik::Int64, ik_plus_b::Int64, G_shift::Vector{Int64}}}}
+

Read the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. "wannier90.x -pp prefix") Returns:

  1. the array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).
  2. the number 'nntot' of neighbors per k point.

TODO: add the possibility to exclude bands

source
DFTK.reducible_kcoordsMethod
reducible_kcoords(
     kgrid::MonkhorstPack
-) -> NamedTuple{(:kcoords,), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}}
-

Construct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid

source
DFTK.run_wannier90Function

Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.

Experimental feature

Currently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.

source
DFTK.save_bandsMethod
save_bands(
+) -> @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}
+

Construct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid

source
DFTK.run_wannier90Function

Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.

Experimental feature

Currently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.

source
DFTK.save_bandsMethod
save_bands(
     filename::AbstractString,
     band_data::NamedTuple;
-    save_ψ,
-    kwargs...
+    save_ψ
 )
-

Write the computed bands to a file. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.

source
DFTK.save_scfresMethod
save_scfres(
+

Write the computed bands to a file. On all processes, but the master one the filename is ignored. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.

Changes to data format reserved

No guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.

source
DFTK.save_scfresMethod
save_scfres(
     filename::AbstractString,
     scfres::NamedTuple;
-    kwargs...
+    save_ψ,
+    extra_data,
+    compress,
+    save_ρ
 ) -> Any
-
save_scfres(filename, scfres)

Save an scfres obtained from self_consistent_field to a file. The format is determined from the file extension. Currently the following file extensions are recognized and supported:

  • jld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. See Saving SCF results on disk and SCF checkpoints for details.
  • vts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density and some metadata (energy, Fermi level, occupation etc.). Supports these keyword arguments:
    • save_ψ: Save the real-space representation of the orbitals as well (may lead to larger files).
    • extra_data: Dict{String,Array} with additional data on the 3D real-space grid to store into the VTK file.
  • json: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, norm of the most recent density change, eigenvalues, Fermi level etc.
No compatibility guarantees

No guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions or stop working / be removed in the future.

source
DFTK.scf_anderson_solverFunction
scf_anderson_solver(
-
-) -> DFTK.var"#anderson#650"{DFTK.var"#anderson#649#651"{Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, Int64}}
-scf_anderson_solver(m; kwargs...) -> DFTK.var"#anderson#650"
-

Create a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.

source
DFTK.scf_damping_quadratic_modelMethod
scf_damping_quadratic_model(
+

Save an scfres obtained from self_consistent_field to a file. On all processes but the master one the filename is ignored. The format is determined from the file extension. Currently the following file extensions are recognized and supported:

  • jld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. Note that this file is also a valid HDF5 file, which can thus similarly be read by external non-Julia libraries such as h5py or similar. See Saving SCF results on disk and SCF checkpoints for details.
  • vts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density, optionally bands and some metadata.
  • json: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, some information about the basis, eigenvalues, Fermi level etc.

Keyword arguments:

  • save_ψ: Save the orbitals as well (may lead to larger files). This is the default for jld2, but false for all other formats, where this is considerably more expensive.
  • save_ρ: Save the density as well (may lead to larger files). This is the default for all but json.
  • extra_data: Additional data to place into the file. The data is just copied like fp["key"] = value, where fp is a JLD2.JLDFile, WriteVTK.vtk_grid and so on.
  • compress: Apply compression to array data. Requires the CodecZlib package to be available.
Changes to data format reserved

No guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.

source
DFTK.scatter_kpts_blockMethod
scatter_kpts_block(
+    basis::PlaneWaveBasis,
+    data::Union{Nothing, AbstractArray}
+) -> Any
+

Scatter the data of a quantity depending on k-Points from the master process to the child processes and return it as a Vector{Array}, where the outer vector is a list over all k-points. On non-master processes nothing may be passed.

source
DFTK.scf_anderson_solverFunction
scf_anderson_solver(
+;
+    ...
+) -> DFTK.var"#anderson#695"{DFTK.var"#anderson#694#696"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, Int64}}
+scf_anderson_solver(
+    m;
+    kwargs...
+) -> DFTK.var"#anderson#695"{DFTK.var"#anderson#694#696"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, _A}} where _A
+

Create a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.

source
DFTK.scf_damping_quadratic_modelMethod
scf_damping_quadratic_model(
     info,
     info_next;
     modeltol
-) -> NamedTuple{(:α, :relerror), _A} where _A<:Tuple{Any, Any}
-

Use the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.

source
DFTK.scf_damping_solverFunction
scf_damping_solver(
+) -> NamedTuple{(:α, :relerror), <:Tuple{Any, Any}}
+

Use the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.

source
DFTK.scf_damping_solverFunction
scf_damping_solver(
 
-) -> DFTK.var"#fp_solver#646"{DFTK.var"#fp_solver#645#647"}
+) -> DFTK.var"#fp_solver#691"{DFTK.var"#fp_solver#690#692"}
 scf_damping_solver(
     β
-) -> DFTK.var"#fp_solver#646"{DFTK.var"#fp_solver#645#647"}
-

Create a damped SCF solver updating the density as x = β * x_new + (1 - β) * x

source
DFTK.select_eigenpairs_all_kblocksMethod
select_eigenpairs_all_kblocks(eigres, range) -> Any
-

Function to select a subset of eigenpairs on each $k$-Point. Works on the Tuple returned by diagonalize_all_kblocks.

source
DFTK.self_consistent_fieldMethod
self_consistent_field(
+) -> DFTK.var"#fp_solver#691"{DFTK.var"#fp_solver#690#692"}
+

Create a damped SCF solver updating the density as x = β * x_new + (1 - β) * x

source
DFTK.scfres_to_dictMethod
scfres_to_dict(
+    scfres::NamedTuple;
+    kwargs...
+) -> Dict{String, Any}
+

Convert an scfres to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis as well as the band_data_to_dict functions, which are called by this function and their outputs merged. Only the master process returns meaningful data.

Some details on the conventions for the returned data:

  • ρ: (fftsize[1], fftsize[2], fftsize[3], nspin) array of density on real-space grid.
  • energies: Dictionary / subdirectory containing the energy terms
  • converged: Has the SCF reached convergence
  • norm_Δρ: Most recent change in ρ during an SCF step
  • occupation_threshold: Threshold below which orbitals are considered unoccupied
  • nbandsconverge: Number of bands that have been fully converged numerically.
  • n_iter: Number of iterations.
source
DFTK.select_eigenpairs_all_kblocksMethod
select_eigenpairs_all_kblocks(eigres, range) -> NamedTuple
+

Function to select a subset of eigenpairs on each $k$-Point. Works on the Tuple returned by diagonalize_all_kblocks.

source
DFTK.self_consistent_fieldMethod
self_consistent_field(
     basis::PlaneWaveBasis{T, VT} where VT<:Real;
     ρ,
     ψ,
@@ -813,24 +861,24 @@
     damping,
     solver,
     eigensolver,
-    determine_diagtol,
+    diagtolalg,
     nbandsalg,
     fermialg,
     callback,
     compute_consistent_energies,
     response
-) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :norm_Δρ), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}
-
self_consistent_field(basis; [tol, mixing, damping, ρ, ψ])

Solve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where $ρ_\text{next} = α P^{-1} (ρ_\text{out} - ρ_\text{in})$.

Overview of parameters:

  • ρ: Initial density
  • ψ: Initial orbitals
  • tol: Tolerance for the density change ($\|ρ_\text{out} - ρ_\text{in}\|$) to flag convergence. Default is 1e-6.
  • is_converged: Convergence control callback. Typical objects passed here are DFTK.ScfConvergenceDensity(tol) (the default), DFTK.ScfConvergenceEnergy(tol) or DFTK.ScfConvergenceForce(tol).
  • maxiter: Maximal number of SCF iterations
  • mixing: Mixing method, which determines the preconditioner $P^{-1}$ in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()
  • damping: Damping parameter $α$ in the above equation. Default is 0.8.
  • nbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.
  • callback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.
source
DFTK.simpsonFunction
simpson(x, y)

Integrate y(x) over x using Simpson's method quadrature.

source
DFTK.solve_ΩplusKMethod
solve_ΩplusK(
+) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}}
+
self_consistent_field(basis; [tol, mixing, damping, ρ, ψ])

Solve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where $ρ_\text{next} = α P^{-1} (ρ_\text{out} - ρ_\text{in})$.

Overview of parameters:

  • ρ: Initial density
  • ψ: Initial orbitals
  • tol: Tolerance for the density change ($\|ρ_\text{out} - ρ_\text{in}\|$) to flag convergence. Default is 1e-6.
  • is_converged: Convergence control callback. Typical objects passed here are ScfConvergenceDensity(tol) (the default), ScfConvergenceEnergy(tol) or ScfConvergenceForce(tol).
  • maxiter: Maximal number of SCF iterations
  • mixing: Mixing method, which determines the preconditioner $P^{-1}$ in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()
  • damping: Damping parameter $α$ in the above equation. Default is 0.8.
  • nbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.
  • callback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.
source
DFTK.simpsonFunction
simpson(x, y)

Integrate y(x) over x using Simpson's method quadrature.

source
DFTK.solve_ΩplusKMethod
solve_ΩplusK(
     basis::PlaneWaveBasis{T, VT} where VT<:Real,
     ψ,
     rhs,
     occupation;
     callback,
     tol
-) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), _A} where _A<:Tuple{Any, Bool, Any, Any, Int64}
+) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), <:Tuple{Any, Bool, Float64, Any, Int64}}
 
solve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;
-             tol=1e-10, verbose=false) where {T}

Return δψ where (Ω+K) δψ = rhs

source
DFTK.solve_ΩplusK_splitMethod
solve_ΩplusK_split(
     ham::Hamiltonian,
     ρ::AbstractArray{T},
     ψ,
@@ -845,11 +893,12 @@
     q,
     kwargs...
 )
-

Solve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).

source
DFTK.spglib_standardize_cellMethod
spglib_standardize_cell(
+

Solve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).

source
DFTK.spglib_standardize_cellMethod
spglib_standardize_cell(
     lattice::AbstractArray{T},
     atom_groups,
-    positions
-) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
+    positions;
+    ...
+) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
 spglib_standardize_cell(
     lattice::AbstractArray{T},
     atom_groups,
@@ -858,38 +907,40 @@
     correct_symmetry,
     primitive,
     tol_symmetry
-) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
-

Returns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.

source
DFTK.sphericalbesselj_fastMethod
sphericalbesselj_fast(l::Integer, x) -> Any
-
sphericalbesselj_fast(l::Integer, x::Number)

Returns the spherical Bessel function of the first kind jl(x). Consistent with https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.

source
DFTK.spin_componentsMethod
spin_components(
+) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
+

Returns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.

source
DFTK.sphericalbesselj_fastMethod
sphericalbesselj_fast(l::Integer, x) -> Any
+
sphericalbesselj_fast(l::Integer, x::Number)

Returns the spherical Bessel function of the first kind jl(x). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions) and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.

source
DFTK.spin_componentsMethod
spin_components(
     spin_polarization::Symbol
 ) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}
-

Explicit spin components of the KS orbitals and the density

source
DFTK.split_evenlyMethod
split_evenly(itr, N) -> Any
-

Split an iterable evenly into N chunks, which will be returned.

source
DFTK.split_evenlyMethod
split_evenly(itr, N) -> Any
+

Split an iterable evenly into N chunks, which will be returned.

source
DFTK.standardize_atomsFunction
standardize_atoms(
     lattice,
     atoms,
-    positions
-) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
+    positions;
+    ...
+) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
 standardize_atoms(
     lattice,
     atoms,
     positions,
     magnetic_moments;
     kwargs...
-) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
-

Apply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.

source
DFTK.symmetries_preserving_kgridMethod
symmetries_preserving_kgrid(symmetries, kcoords) -> Any
-

Filter out the symmetry operations that don't respect the symmetries of the discrete BZ grid

source
DFTK.symmetries_preserving_rgridMethod
symmetries_preserving_rgrid(symmetries, fft_size) -> Any
-

Filter out the symmetry operations that don't respect the symmetries of the discrete real-space grid

source
DFTK.symmetrize_forcesMethod
symmetrize_forces(model::Model, forces; symmetries)
-

Symmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i]

source
DFTK.symmetrize_stressesMethod
symmetrize_stresses(model::Model, stresses; symmetries)
-

Symmetrize the stress tensor, given as a Matrix in cartesian coordinates

source
DFTK.symmetrize_ρMethod
symmetrize_ρ(
+) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
+

Apply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.

source
DFTK.symmetries_preserving_kgridMethod
symmetries_preserving_kgrid(symmetries, kcoords) -> Any
+

Filter out the symmetry operations that don't respect the symmetries of the discrete BZ grid

source
DFTK.symmetries_preserving_rgridMethod
symmetries_preserving_rgrid(symmetries, fft_size) -> Any
+

Filter out the symmetry operations that don't respect the symmetries of the discrete real-space grid

source
DFTK.symmetrize_forcesMethod
symmetrize_forces(model::Model, forces; symmetries)
+

Symmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i].

source
DFTK.symmetrize_stressesMethod
symmetrize_stresses(model::Model, stresses; symmetries)
+

Symmetrize the stress tensor, given as a Matrix in cartesian coordinates

source
DFTK.symmetrize_ρMethod
symmetrize_ρ(
     basis,
     ρ::AbstractArray{T};
     symmetries,
     do_lowpass
 ) -> Any
-

Symmetrize a density by applying all the basis (by default) symmetries and forming the average.

source
DFTK.symmetry_operationsFunction
symmetry_operations(
+

Symmetrize a density by applying all the basis (by default) symmetries and forming the average.

source
DFTK.symmetry_operationsFunction
symmetry_operations(
     lattice,
     atoms,
-    positions
+    positions;
+    ...
 ) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
 symmetry_operations(
     lattice,
@@ -899,63 +950,63 @@
     tol_symmetry,
     check_symmetry
 ) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
-

Return the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.

source
DFTK.symmetry_operationsMethod
symmetry_operations(
+

Return the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.

source
DFTK.symmetry_operationsMethod
symmetry_operations(
     hall_number::Integer
 ) -> Vector{SymOp{Float64}}
-

Return the Symmetry operations given a hall_number.

This function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.

The definition of hall_number is found at Space group type.

source
DFTK.synchronize_deviceMethod
synchronize_device(_::DFTK.AbstractArchitecture)
-

Synchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).

source
DFTK.to_cpuMethod
to_cpu(x::AbstractArray) -> Array
-

Transfer an array from a device (typically a GPU) to the CPU.

source
DFTK.to_deviceMethod
to_device(_::DFTK.CPU, x) -> Any
-

Transfer an array to a particular device (typically a GPU)

source
DFTK.todictMethod
todict(energies::Energies) -> Dict{String}
-

Convert an Energies struct to a dictionary representation

source
DFTK.todictMethod
todict(model::Model) -> Dict
-

Convert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).

Some details on the conventions for the returned data:

  • lattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension
  • atomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.
  • atomic_symbols: Atomic symbols if known.
  • terms: Some rough information on the terms used for the computation.
  • n_electrons: Number of electrons, may be missing if εF is fixed instead
  • εF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.
source
DFTK.todictMethod
todict(basis::PlaneWaveBasis) -> Dict
-

Convert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.

Some details on the conventions for the returned data:

  • dvol: Volume element for real-space integration
  • variational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.
  • kweights: Weights for the k-points, summing to 1.0
source
DFTK.total_local_potentialMethod
total_local_potential(ham::Hamiltonian) -> Any
-

Get the total local potential of the given Hamiltonian, in real space in the spin components.

source
DFTK.transfer_blochwaveMethod
transfer_blochwave(
+

Return the Symmetry operations given a hall_number.

This function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.

The definition of hall_number is found at Space group type.

source
DFTK.synchronize_deviceMethod
synchronize_device(_::DFTK.AbstractArchitecture)
+

Synchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).

source
DFTK.to_cpuMethod
to_cpu(x::AbstractArray) -> Array
+

Transfer an array from a device (typically a GPU) to the CPU.

source
DFTK.to_deviceMethod
to_device(_::DFTK.CPU, x) -> Any
+

Transfer an array to a particular device (typically a GPU)

source
DFTK.todictMethod
todict(energies::Energies) -> Dict
+

Convert an Energies struct to a dictionary representation

source
DFTK.todictMethod
todict(model::Model) -> Dict{String, Any}
+

Convert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).

Some details on the conventions for the returned data:

  • lattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension
  • atomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.
  • atomic_symbols: Atomic symbols if known.
  • terms: Some rough information on the terms used for the computation.
  • n_electrons: Number of electrons, may be missing if εF is fixed instead
  • εF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.
source
DFTK.todictMethod
todict(basis::PlaneWaveBasis) -> Dict{String, Any}
+

Convert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.

Some details on the conventions for the returned data:

  • dvol: Volume element for real-space integration
  • variational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.
  • kweights: Weights for the k-points, summing to 1.0
source
DFTK.total_local_potentialMethod
total_local_potential(ham::Hamiltonian) -> Any
+

Get the total local potential of the given Hamiltonian, in real space in the spin components.

source
DFTK.transfer_blochwaveMethod
transfer_blochwave(
     ψ_in,
-    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
-    basis_out::PlaneWaveBasis{T, VT} where VT<:Real
-) -> Any
-

Transfer Bloch wave between two basis sets. Limited feature set.

source
DFTK.transfer_blochwave_kptMethod
transfer_blochwave_kpt(
+    basis_in::PlaneWaveBasis,
+    basis_out::PlaneWaveBasis
+) -> Vector
+

Transfer Bloch wave between two basis sets. Limited feature set.

source
DFTK.transfer_blochwave_kptMethod
transfer_blochwave_kpt(
     ψk_in,
     basis::PlaneWaveBasis,
     kpt_in,
     kpt_out,
     ΔG
 ) -> Any
-

Transfer an array ψk_in expanded on kpt_in, and produce $ψ(r) e^{i ΔG·r}$ expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.

source
DFTK.transfer_blochwave_kptMethod
transfer_blochwave_kpt(
+

Transfer an array ψk_in expanded on kpt_in, and produce $ψ(r) e^{i ΔG·r}$ expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.

source
DFTK.transfer_blochwave_kptMethod
transfer_blochwave_kpt(
     ψk_in,
-    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
+    basis_in::PlaneWaveBasis,
     kpt_in::Kpoint,
-    basis_out::PlaneWaveBasis{T, VT} where VT<:Real,
+    basis_out::PlaneWaveBasis,
     kpt_out::Kpoint
 ) -> Any
-

Transfer an array ψk defined on basisin $k$-point kptin to basisout $k$-point kptout.

source
DFTK.transfer_densityMethod
transfer_density(
+

Transfer an array ψk defined on basisin $k$-point kptin to basisout $k$-point kptout.

source
DFTK.transfer_densityMethod
transfer_density(
     ρ_in,
     basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
     basis_out::PlaneWaveBasis{T, VT} where VT<:Real
 ) -> Any
-

Transfer density (in real space) between two basis sets.

This function is fast by transferring only the Fourier coefficients from the small basis to the big basis.

Note that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity $c_G = c_{-G}^\ast$ does not fully hold).

Note further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.

source
DFTK.transfer_mappingMethod
transfer_mapping(
+

Transfer density (in real space) between two basis sets.

This function is fast by transferring only the Fourier coefficients from the small basis to the big basis.

Note that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity $c_G = c_{-G}^\ast$ does not fully hold).

Note further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.

source
DFTK.transfer_mappingMethod
transfer_mapping(
     basis_in::PlaneWaveBasis,
-    basis_out::PlaneWaveBasis
-) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}
-

Compute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).

source
DFTK.transfer_mappingMethod
transfer_mapping(
-    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
     kpt_in::Kpoint,
-    basis_out::PlaneWaveBasis{T, VT} where VT<:Real,
+    basis_out::PlaneWaveBasis,
     kpt_out::Kpoint
 ) -> Tuple{Any, Any}
-

Compute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).

source
DFTK.trapezoidalFunction
trapezoidal(x, y)

Integrate y(x) over x using trapezoidal method quadrature.

source
DFTK.unfold_bzMethod
unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis
-

" Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).

source
DFTK.versioninfoFunction
versioninfo()
+

Compute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).

source
DFTK.transfer_mappingMethod
transfer_mapping(
+    basis_in::PlaneWaveBasis,
+    basis_out::PlaneWaveBasis
+) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}
+

Compute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).

source
DFTK.trapezoidalFunction
trapezoidal(x, y)

Integrate y(x) over x using trapezoidal method quadrature.

source
DFTK.unfold_bzMethod
unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis
+

" Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).

source
DFTK.versioninfoFunction
versioninfo()
 versioninfo(io::IO)
-
DFTK.versioninfo([io::IO=stdout])

Summary of version and configuration of DFTK and its key dependencies.

source
DFTK.weighted_ksumMethod
weighted_ksum(basis::PlaneWaveBasis, array) -> Any
-

Sum an array over kpoints, taking weights into account

source
DFTK.write_w90_eigMethod
write_w90_eig(fileprefix::String, eigenvalues; n_bands)
-

Write the eigenvalues in a format readable by Wannier90.

source
DFTK.write_w90_winMethod
write_w90_win(
+
DFTK.versioninfo([io::IO=stdout])

Summary of version and configuration of DFTK and its key dependencies.

source
DFTK.weighted_ksumMethod
weighted_ksum(basis::PlaneWaveBasis, array) -> Any
+

Sum an array over kpoints, taking weights into account

source
DFTK.write_w90_eigMethod
write_w90_eig(fileprefix::String, eigenvalues; n_bands)
+

Write the eigenvalues in a format readable by Wannier90.

source
DFTK.write_w90_winMethod
write_w90_win(
     fileprefix::String,
     basis::PlaneWaveBasis;
     bands_plot,
     wannier_plot,
     kwargs...
 )
-

Write a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.

source
DFTK.write_wannier90_filesMethod
write_wannier90_files(
+

Write a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.

source
DFTK.write_wannier90_filesMethod
write_wannier90_files(
     preprocess_call,
     scfres;
     n_bands,
@@ -965,15 +1016,15 @@
     wannier_plot,
     kwargs...
 )
-

Shared file writing code for Wannier.jl and Wannier90.

source
DFTK.ylm_realMethod
ylm_real(
+

Shared file writing code for Wannier.jl and Wannier90.

source
DFTK.ylm_realMethod
ylm_real(
     l::Integer,
     m::Integer,
     rvec::AbstractArray{T, 1}
 ) -> Any
-

Returns the (l,m) real spherical harmonic Ylm(r). Consistent with https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics

source
DFTK.zeros_likeFunction
zeros_like(X::AbstractArray) -> Any
+

Returns the (l,m) real spherical harmonic Ylm(r). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics).

source
DFTK.zeros_likeFunction
zeros_like(X::AbstractArray) -> Any
 zeros_like(
     X::AbstractArray,
     T::Type,
     dims::Integer...
 ) -> Any
-

Create an array of same "array type" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.

source
DFTK.@timingMacro

Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.

source
DFTK.Smearing.entropyMethod

Entropy. Note that this is a function of the energy x, not of occupation(x). This function satisfies s' = x f' (see https://www.vasp.at/vasp-workshop/k-points.pdf p. 12 and https://arxiv.org/pdf/1805.07144.pdf p. 18.

source
DFTK.Smearing.occupationFunction
occupation(S::SmearingFunction, x)

Occupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.

source
+

Create an array of same "array type" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.

source
DFTK.@timingMacro

Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.

source
DFTK.Smearing.occupationFunction
occupation(S::SmearingFunction, x)

Occupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.

source
diff --git a/dev/assets/documenter.js b/dev/assets/documenter.js index c47a291d79..fd68688989 100644 --- a/dev/assets/documenter.js +++ b/dev/assets/documenter.js @@ -6,7 +6,6 @@ requirejs.config({ 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.13.2/jquery-ui.min', 'minisearch': 'https://cdn.jsdelivr.net/npm/minisearch@6.1.0/dist/umd/index.min', 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.0/jquery.min', - 'mathjax': 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML', 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min', 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/languages/julia-repl.min', @@ -17,9 +16,6 @@ requirejs.config({ "highlight" ] }, - "mathjax": { - "exports": "MathJax" - }, "headroom-jquery": { "deps": [ "jquery", @@ -34,15 +30,10 @@ requirejs.config({ } }); //////////////////////////////////////////////////////////////////////////////// -require(['mathjax'], function(MathJax) { -MathJax.Hub.Config({ - "jax": [ - "input/TeX", - "output/HTML-CSS", - "output/NativeMML" - ], - "TeX": { - "Macros": { +require([], function() { +window.MathJax = { + "tex": { + "macros": { "ket": [ "\\left|#1\\right\\rangle", 1 @@ -54,35 +45,26 @@ MathJax.Hub.Config({ "braket": [ "\\left\\langle#1\\middle|#2\\right\\rangle", 2 - ] - } - }, - "tex2jax": { - "inlineMath": [ - [ - "$", - "$" ], - [ - "\\(", - "\\)" + "abs": [ + "\\left\\|#1\\right\\|", + 1 ] - ], - "processEscapes": true + } }, - "config": [ - "MMLorHTML.js" - ], - "extensions": [ - "MathMenu.js", - "MathZoom.js", - "TeX/AMSmath.js", - "TeX/AMSsymbols.js", - "TeX/autobold.js", - "TeX/autoload-all.js" - ] + "options": { + "ignoreHtmlClass": "tex2jax_ignore", + "processHtmlClass": "tex2jax_process" + } } -); +; + +(function () { + var script = document.createElement('script'); + script.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-svg.js'; + script.async = true; + document.head.appendChild(script); +})(); }) //////////////////////////////////////////////////////////////////////////////// diff --git a/dev/developer/conventions/index.html b/dev/developer/conventions/index.html index d1504694c9..0454409c02 100644 --- a/dev/developer/conventions/index.html +++ b/dev/developer/conventions/index.html @@ -1,6 +1,6 @@ -Notation and conventions · DFTK.jl

Notation and conventions

Usage of unicode characters

DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.

Symbol conventions

  • Reciprocal-space vectors: $k$ for vectors in the Brillouin zone, $G$ for vectors of the reciprocal lattice, $q$ for general vectors
  • Real-space vectors: $R$ for lattice vectors, $r$ and $x$ are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.
  • $\Omega$ is the unit cell, and $|\Omega|$ (or sometimes just $\Omega$) is its volume.
  • $A$ are the real-space lattice vectors (model.lattice) and $B$ the Brillouin zone lattice vectors (model.recip_lattice).
  • The Bloch waves are

    \[\psi_{nk}(x) = e^{ik\cdot x} u_{nk}(x),\]

    where $n$ is the band index and $k$ the $k$-point. In the code we sometimes use $\psi$ and $u$ interchangeably.
  • $\varepsilon$ are the eigenvalues, $\varepsilon_F$ is the Fermi level.
  • $\rho$ is the density.
  • In the code we use normalized plane waves:

    \[e_G(r) = \frac 1 {\sqrt{\Omega}} e^{i G \cdot r}.\]

  • $Y^l_m$ are the complex spherical harmonics, and $Y_{lm}$ the real ones.
  • $j_l$ are the Bessel functions. In particular, $j_{0}(x) = \frac{\sin x}{x}$.

Units

In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:

using Unitful
+Notation and conventions · DFTK.jl

Notation and conventions

Usage of unicode characters

DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.

Symbol conventions

  • Reciprocal-space vectors: $k$ for vectors in the Brillouin zone, $G$ for vectors of the reciprocal lattice, $q$ for phonon vectors (i.e., vectors in the Brillouin zone characteristic of the crystal normal modes), $p$ for general vectors.
  • Real-space vectors: $R$ for lattice vectors, $r$ and $x$ are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.
  • $\Omega$ is the unit cell, and $|\Omega|$ (or sometimes just $\Omega$) is its volume.
  • $A$ are the real-space lattice vectors (model.lattice) and $B$ the Brillouin zone lattice vectors (model.recip_lattice).
  • The Bloch waves are

    \[\psi_{nk}(x) = e^{ik\cdot x} u_{nk}(x),\]

    where $n$ is the band index and $k$ the $k$-point. In the code we sometimes use $\psi$ and $u$ interchangeably.
  • $\varepsilon$ are the eigenvalues, $\varepsilon_F$ is the Fermi level.
  • $\rho$ is the density.
  • In the code we use normalized plane waves:

    \[e_G(r) = \frac 1 {\sqrt{\Omega}} e^{i G \cdot r}.\]

  • $Y^l_m$ are the complex spherical harmonics, and $Y_{lm}$ the real ones.
  • $j_l$ are the Bessel functions. In particular, $j_{0}(x) = \frac{\sin x}{x}$.

Units

In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:

using Unitful
 using UnitfulAtomic
 austrip(10u"eV")      # 10eV in Hartree
0.36749322175518595
using Unitful: Å
 using UnitfulAtomic
-auconvert(Å, 1.2)  # 1.2 Bohr in Ångström
0.6350126530835999 Å
Differing unit conventions

Different electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.

Lattices and lattice vectors

Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still $3 \times 3$ matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by $A$ and the reciprocal-space lattice vectors by $B = 2\pi A^{-T}$.

Row-major versus column-major storage order

Julia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices $A$ before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.

We use the convention that the unit cell in real space is $[0, 1)^3$ in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is $[-1/2, 1/2)^3$.

Reduced and cartesian coordinates

Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as $k$, $G$, $q$ or real-space vectors like $r$ and $R$ (see Symbol conventions). One switches to Cartesian coordinates by

\[x_\text{cart} = M x_\text{red}\]

where $M$ is either $A$ / model.lattice (for real-space vectors) or $B$ / model.recip_lattice (for reciprocal-space vectors). A useful relationship is

\[b_\text{cart} \cdot a_\text{cart}=2\pi b_\text{red} \cdot a_\text{red}\]

if $a$ and $b$ are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for $G$-vectors) or fractional coordinates (usually for $k$-points).

Normalization conventions

The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points and in reciprocal space its coefficients are $\ell^{2}$-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.

+auconvert(Å, 1.2) # 1.2 Bohr in Ångström
0.6350126530835999 Å
Differing unit conventions

Different electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.

Lattices and lattice vectors

Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still $3 \times 3$ matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by $A$ and the reciprocal-space lattice vectors by $B = 2\pi A^{-T}$.

Row-major versus column-major storage order

Julia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices $A$ before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.

We use the convention that the unit cell in real space is $[0, 1)^3$ in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is $[-1/2, 1/2)^3$.

Reduced and cartesian coordinates

Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as $k$, $G$, $q$, $p$ or real-space vectors like $r$ and $R$ (see Symbol conventions). One switches to Cartesian coordinates by

\[x_\text{cart} = M x_\text{red}\]

where $M$ is either $A$ / model.lattice (for real-space vectors) or $B$ / model.recip_lattice (for reciprocal-space vectors). A useful relationship is

\[b_\text{cart} \cdot a_\text{cart}=2\pi b_\text{red} \cdot a_\text{red}\]

if $a$ and $b$ are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for $G$-vectors) or fractional coordinates (usually for $k$-points).

Normalization conventions

The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points and in reciprocal space its coefficients are $\ell^{2}$-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.

diff --git a/dev/developer/data_structures/0813bf68.svg b/dev/developer/data_structures/0813bf68.svg deleted file mode 100644 index 07d394e975..0000000000 --- a/dev/developer/data_structures/0813bf68.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev/developer/data_structures/7e88a2e8.svg b/dev/developer/data_structures/7e88a2e8.svg new file mode 100644 index 0000000000..657f373a63 --- /dev/null +++ b/dev/developer/data_structures/7e88a2e8.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/developer/data_structures/a9cd5ec1.svg b/dev/developer/data_structures/8f31188e.svg similarity index 63% rename from dev/developer/data_structures/a9cd5ec1.svg rename to dev/developer/data_structures/8f31188e.svg index 74a18e1c9e..cd6c12ef30 100644 --- a/dev/developer/data_structures/a9cd5ec1.svg +++ b/dev/developer/data_structures/8f31188e.svg @@ -1,5671 +1,5671 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/developer/data_structures/index.html b/dev/developer/data_structures/index.html index 025fa67d59..7ce99c1344 100644 --- a/dev/developer/data_structures/index.html +++ b/dev/developer/data_structures/index.html @@ -1,5 +1,5 @@ -Data structures · DFTK.jl

Data structures

In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.

Model datastructure

The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:

typeof.(model.term_types)
7-element Vector{DataType}:
+Data structures · DFTK.jl

Data structures

In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.

Model datastructure

The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:

typeof.(model.term_types)
7-element Vector{DataType}:
  Kinetic{BlowupIdentity}
  AtomicLocal
  AtomicNonlocal
@@ -7,15 +7,15 @@
  PspCorrection
  Hartree
  Xc

DFTK computes energies for all terms of the model individually, which are available in scfres.energies:

scfres.energies
Energy breakdown (in Ha):
-    Kinetic             3.1739378 
-    AtomicLocal         -2.1467942
-    AtomicNonlocal      1.5858760 
+    Kinetic             3.1739302 
+    AtomicLocal         -2.1467818
+    AtomicNonlocal      1.5858751 
     Ewald               -8.4004648
     PspCorrection       -0.2948928
-    Hartree             0.5586753 
-    Xc                  -2.4032025
+    Hartree             0.5586689 
+    Xc                  -2.4031999
 
-    total               -7.926865084277

For now the following energy terms are available in DFTK:

  • Kinetic energy
  • Local potential energy, either given by analytic potentials or specified by the type of atoms.
  • Nonlocal potential energy, for norm-conserving pseudopotentials
  • Nuclei energies (Ewald or pseudopotential correction)
  • Hartree energy
  • Exchange-correlation energy
  • Power nonlinearities (useful for Gross-Pitaevskii type models)
  • Magnetic field energy
  • Entropy term

Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.

By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:

  • model_LDA: LDA model using the Teter parametrisation
  • model_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])
  • model_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).

PlaneWaveBasis and plane-wave discretisations

The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the $k$-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:

PlaneWaveBasis(model; Ecut, kgrid)
PlaneWaveBasis discretization:
+    total               -7.926865084496

For now the following energy terms are available in DFTK:

  • Kinetic energy
  • Local potential energy, either given by analytic potentials or specified by the type of atoms.
  • Nonlocal potential energy, for norm-conserving pseudopotentials
  • Nuclei energies (Ewald or pseudopotential correction)
  • Hartree energy
  • Exchange-correlation energy
  • Power nonlinearities (useful for Gross-Pitaevskii type models)
  • Magnetic field energy
  • Entropy term

Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.

By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:

  • model_LDA: LDA model using the Teter parametrisation
  • model_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])
  • model_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).

PlaneWaveBasis and plane-wave discretisations

The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the $k$-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:

PlaneWaveBasis(model; Ecut, kgrid)
PlaneWaveBasis discretization:
     architecture         : DFTK.CPU()
     num. mpi processes   : 1
     num. julia threads   : 1
@@ -53,8 +53,8 @@
   &= \sum_{G \in \mathcal R^{*}} c_{G}  e^{i  k \cdot  x} e_{G}(x)
 \end{aligned}\]

where $\mathcal R^*$ is the set of reciprocal lattice vectors. The $c_{{G}}$ are $\ell^{2}$-normalized. The summation is truncated to a "spherical", $k$-dependent basis set

\[ S_{k} = \left\{G \in \mathcal R^{*} \,\middle|\, \frac 1 2 |k+ G|^{2} \le E_\text{cut}\right\}\]

where $E_\text{cut}$ is the cutoff energy.

Densities involve terms like $|\psi_{k}|^{2} = |u_{k}|^{2}$ and therefore products $e_{-{G}} e_{{G}'}$ for ${G}, {G}'$ in $S_{k}$. To represent these we use a "cubic", $k$-independent basis set large enough to contain the set $\{{G}-G' \,|\, G, G' \in S_{k}\}$. We can obtain the coefficients of densities on the $e_{G}$ basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.

The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points.

For example let us check the normalization of the first eigenfunction at the first $k$-point in reciprocal space:

ψtest = scfres.ψ[1][:, 1]
-sum(abs2.(ψtest))
1.0

We now perform an IFFT to get ψ in real space. The $k$-point has to be passed because ψ is expressed on the $k$-dependent basis. Again the function is normalised:

ψreal = ifft(basis, basis.kpoints[1], ψtest)
-sum(abs2.(ψreal)) * basis.dvol
0.9999999999999994

The list of $k$ points of the basis can be obtained with basis.kpoints.

basis.kpoints
8-element Vector{Kpoint{Float64, Vector{StaticArraysCore.SVector{3, Int64}}}}:
+sum(abs2.(ψtest))
0.9999999999999992

We now perform an IFFT to get ψ in real space. The $k$-point has to be passed because ψ is expressed on the $k$-dependent basis. Again the function is normalised:

ψreal = ifft(basis, basis.kpoints[1], ψtest)
+sum(abs2.(ψreal)) * basis.dvol
0.9999999999999988

The list of $k$ points of the basis can be obtained with basis.kpoints.

basis.kpoints
8-element Vector{Kpoint{Float64, Vector{StaticArraysCore.SVector{3, Int64}}}}:
  KPoint([     0,      0,      0], spin = 1, num. G vectors =   725)
  KPoint([  0.25,      0,      0], spin = 1, num. G vectors =   754)
  KPoint([  -0.5,      0,      0], spin = 1, num. G vectors =   754)
@@ -85,6 +85,6 @@
  [0.06666666666666667, 0.0, 0.0]
  [0.1, 0.0, 0.0]

Accessing Bloch waves and densities

Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the $k$-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).

rvecs = collect(r_vectors(basis))[:, 1, 1]  # slice along the x axis
 x = [r[1] for r in rvecs]                   # only keep the x coordinate
-plot(x, scfres.ρ[:, 1, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
Example block output
G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]
+plot(x, scfres.ρ[:, 1, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
Example block output
G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]
 scatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);
-        yscale=:log10, ylims=(1e-12, 1), label="", xlabel="Energy", ylabel="|ρ|")
Example block output

Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to $\frac 1 2|k+G|^2 ≤ E_{\rm cut}$.

  • 2If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].
+ yscale=:log10, ylims=(1e-12, 1), label="", xlabel="Energy", ylabel="|ρ|")
Example block output

Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to $\frac 1 2|k+G|^2 ≤ E_{\rm cut}$.

  • 2If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].
diff --git a/dev/developer/gpu_computations/index.html b/dev/developer/gpu_computations/index.html index 2b5cb94e7e..b1d664813c 100644 --- a/dev/developer/gpu_computations/index.html +++ b/dev/developer/gpu_computations/index.html @@ -1,5 +1,5 @@ -GPU computations · DFTK.jl

GPU computations

Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.

To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.

Current implementation

For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.

PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())
+GPU computations · DFTK.jl

GPU computations

Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.

To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.

Current implementation

For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.

PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())
 PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))
GPU API is experimental

It is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.

Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.

Pitfalls

There are a few things to keep in mind when doing GPU programming in DFTK.

  • Transfers to and from a device can be done simply by converting an array to

an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.

cuda_gpu = DFTK.GPU(CuArray)
 cpu_architecture = DFTK.CPU()
 A = rand(10)  # A is on the CPU
@@ -17,4 +17,4 @@
     map(Gs) do Gi
         model.lattice * Gi
     end
-end
  • List comprehensions should be avoided, as they always return a CPU Array.

Instead, we should use map which returns an array of the same type as the input one.

  • Sometimes, creating a new array or making a copy can be necessary to achieve good

performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.

+end
  • List comprehensions should be avoided, as they always return a CPU Array.

Instead, we should use map which returns an array of the same type as the input one.

  • Sometimes, creating a new array or making a copy can be necessary to achieve good

performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.

diff --git a/dev/developer/setup/index.html b/dev/developer/setup/index.html index 693cd97b32..5ba9805cfe 100644 --- a/dev/developer/setup/index.html +++ b/dev/developer/setup/index.html @@ -1,9 +1,9 @@ -Developer setup · DFTK.jl

Developer setup

Source code installation

If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).

To achieve such a setup you have two recommended options:

  1. Clone DFTK into a location of your choice

    $ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/

    Whenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:

    import Pkg
    +Developer setup · DFTK.jl

    Developer setup

    Source code installation

    If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).

    To achieve such a setup you have two recommended options:

    1. Clone DFTK into a location of your choice

      $ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/

      Whenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:

      import Pkg
       Pkg.develop("/some/path/")

      To run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use

      $ julia --project=/some/path/

      The advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.

    2. Add a development version of DFTK to the global Julia environment:

      import Pkg
       Pkg.develop("DFTK")

      This clones DFTK to the path ~/.julia/dev/DFTK" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.

    Disabling precompilation

    For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.

    At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:

    [DFTK]
     precompile_workload = false

    Running the tests

    We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.

    Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use

    using TestEnv       # Optional: automatically installs required packages
     TestEnv.activate()  # for tests in a temporary environment.
     using TestItemRunner
     cd("test")          # By default, the following macro runs everything from the parent folder.
    -@run_package_tests filter = ti -> :core ∈ ti.tags

    Or to only run the tests of a particular file serialisation.jl use

    @run_package_tests filter = ti -> occursin("serialisation.jl", ti.filename)

    If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with

    using .MySetup: my_function

    It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with

    using ..MySetup: my_function
    +@run_package_tests filter = ti -> :core ∈ ti.tags

    Or to only run the tests of a particular file serialisation.jl use

    @run_package_tests filter = ti -> occursin("serialisation.jl", ti.filename)

    If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with

    using .MySetup: my_function

    It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with

    using ..MySetup: my_function
diff --git a/dev/developer/style_guide/index.html b/dev/developer/style_guide/index.html new file mode 100644 index 0000000000..ac5cbdc58b --- /dev/null +++ b/dev/developer/style_guide/index.html @@ -0,0 +1,2 @@ + +Developer's style guide · DFTK.jl

Developer's style guide

The following conventions are not strictly enforced in DFTK. The rule of thumb is readability over consistency.

Coding and formatting conventions

  • Line lengths should be 92 characters.
  • Avoid shortening variable names only for its own sake.
  • Named tuples should be explicit, i.e., (; var=val) over (var=val).
  • Use NamedTuple unpacking to prevent ambiguities when getting multiple arguments from a function.
  • Empty callbacks should use identity.
  • Use = to loop over a range but in to loop over elements.
  • Always format the where keyword with explicit braces: where {T <: Any}.
  • Do not use implicit arguments in functions but explicit keyword.
  • Prefix function name by _ if it is an internal helper function, which is not of general use and should thus be kept close to the vicinity of the calling function.
diff --git a/dev/developer/symmetries/index.html b/dev/developer/symmetries/index.html index 21ddd6b7a6..2312b45ee7 100644 --- a/dev/developer/symmetries/index.html +++ b/dev/developer/symmetries/index.html @@ -1,5 +1,5 @@ -Crystal symmetries · DFTK.jl

Crystal symmetries

Theory

In this discussion we will only describe the situation for a monoatomic crystal $\mathcal C \subset \mathbb R^3$, the extension being easy. A symmetry of the crystal is an orthogonal matrix $W$ and a real-space vector $w$ such that

\[W \mathcal{C} + w = \mathcal{C}.\]

The symmetries where $W = 1$ and $w$ is a lattice vector are always assumed and ignored in the following.

We can define a corresponding unitary operator $U$ on $L^2(\mathbb R^3)$ with action

\[ (Uu)(x) = u\left( W x + w \right).\]

We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that $U$ commutes with the Hamiltonian.

This operator acts on a plane-wave as

\[\begin{aligned} +Crystal symmetries · DFTK.jl

Crystal symmetries

Theory

In this discussion we will only describe the situation for a monoatomic crystal $\mathcal C \subset \mathbb R^3$, the extension being easy. A symmetry of the crystal is an orthogonal matrix $W$ and a real-space vector $w$ such that

\[W \mathcal{C} + w = \mathcal{C}.\]

The symmetries where $W = 1$ and $w$ is a lattice vector are always assumed and ignored in the following.

We can define a corresponding unitary operator $U$ on $L^2(\mathbb R^3)$ with action

\[ (Uu)(x) = u\left( W x + w \right).\]

We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that $U$ commutes with the Hamiltonian.

This operator acts on a plane-wave as

\[\begin{aligned} (U e^{iq\cdot x}) (x) &= e^{iq \cdot w} e^{i (W^T q) x}\\ &= e^{- i(S q) \cdot \tau } e^{i (S q) \cdot x} \end{aligned}\]

where we set

\[\begin{aligned} @@ -15,43 +15,45 @@ basis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid) scfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)

n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.864669378333                   -0.72    3.5
-  2   -7.868967640509       -2.37       -1.54    1.0    142ms
-  3   -7.869176901000       -3.68       -2.60    1.1    150ms
-  4   -7.869209092127       -4.49       -2.88    2.4    286ms
-  5   -7.869209586344       -6.31       -3.13    1.0    142ms
-  6   -7.869209810514       -6.65       -4.48    1.0    142ms
-  7   -7.869209817467       -8.16       -5.08    2.1    222ms
-  8   -7.869209817526      -10.22       -5.54    1.6    173ms
-  9   -7.869209817530      -11.39       -6.50    1.2    200ms
-  1.856107 seconds (1.45 M allocations: 652.203 MiB, 8.69% gc time)

and then redo it using symmetry (the default):

model_sym = model_LDA(lattice, atoms, positions)
+  1   -7.864789609264                   -0.72    3.6    325ms
+  2   -7.868982266147       -2.38       -1.54    1.0    139ms
+  3   -7.869172589839       -3.72       -2.58    1.0    141ms
+  4   -7.869208845110       -4.44       -2.85    2.4    244ms
+  5   -7.869209459919       -6.21       -3.03    1.0    142ms
+  6   -7.869209804306       -6.46       -4.65    1.0    138ms
+  7   -7.869209817296       -7.89       -4.65    2.6    262ms
+  8   -7.869209817519       -9.65       -5.63    1.0    150ms
+  9   -7.869209817528      -11.07       -5.58    2.0    196ms
+ 10   -7.869209817530      -11.56       -6.30    1.0    140ms
+  1.885918 seconds (1.54 M allocations: 722.233 MiB, 3.27% gc time)

and then redo it using symmetry (the default):

model_sym = model_LDA(lattice, atoms, positions)
 basis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)
 scfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.864401429300                   -0.72    4.1
-  2   -7.868962783356       -2.34       -1.54    1.0   26.0ms
-  3   -7.869175647112       -3.67       -2.60    1.2   27.6ms
-  4   -7.869209227446       -4.47       -2.88    2.6   38.2ms
-  5   -7.869209551831       -6.49       -3.03    1.0   26.4ms
-  6   -7.869209810681       -6.59       -4.10    1.0   26.4ms
-  7   -7.869209817334       -8.18       -5.11    2.0   34.2ms
-  8   -7.869209817522       -9.73       -5.31    2.1   36.5ms
-  9   -7.869209817527      -11.33       -5.45    1.0   27.0ms
- 10   -7.869209817530      -11.54       -5.77    1.1   27.4ms
- 11   -7.869209817530      -12.07       -6.16    1.0   26.8ms
-  0.352787 seconds (263.30 k allocations: 138.966 MiB)

Clearly both yield the same energy but the version employing symmetry is faster, since less $k$-points are explicitly treated:

(length(basis_sym.kpoints), length(basis_nosym.kpoints))
(8, 64)

Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.

We can also explicitly verify both methods to yield the same density:

(norm(scfres_sym.ρ - scfres_nosym.ρ),
- norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))
(6.122583955828115e-7, 1.3358242020119085e-6)

The symmetries can be used to map reducible to irreducible points:

ikpt_red = rand(1:length(basis_nosym.kpoints))
+  1   -7.865098378539                   -0.72    4.4   51.4ms
+  2   -7.869037635436       -2.40       -1.54    1.0   26.5ms
+  3   -7.869185029975       -3.83       -2.59    1.1   27.0ms
+  4   -7.869209020823       -4.62       -2.90    2.2   35.3ms
+  5   -7.869209571598       -6.26       -3.11    1.1   26.7ms
+  6   -7.869209805889       -6.63       -4.05    1.0   40.8ms
+  7   -7.869209816923       -7.96       -5.08    1.9   33.2ms
+  8   -7.869209817521       -9.22       -5.21    2.0   36.5ms
+  9   -7.869209817520   +  -12.12       -5.31    1.0   27.0ms
+ 10   -7.869209817529      -11.06       -5.64    1.0   27.4ms
+ 11   -7.869209817530      -11.92       -5.96    1.0   27.3ms
+ 12   -7.869209817531      -12.52       -6.65    1.0   26.9ms
+  0.391981 seconds (267.24 k allocations: 153.261 MiB, 3.37% gc time)

Clearly both yield the same energy but the version employing symmetry is faster, since less $k$-points are explicitly treated:

(length(basis_sym.kpoints), length(basis_nosym.kpoints))
(8, 64)

Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.

We can also explicitly verify both methods to yield the same density:

(norm(scfres_sym.ρ - scfres_nosym.ρ),
+ norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))
(2.8486605854976184e-7, 1.1979347901566972e-7)

The symmetries can be used to map reducible to irreducible points:

ikpt_red = rand(1:length(basis_nosym.kpoints))
 # find a (non-unique) corresponding irreducible point in basis_nosym,
 # and the symmetry that relates them
 ikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])
 [basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]
3×2 StaticArraysCore.SMatrix{3, 2, Float64, 6} with indices SOneTo(3)×SOneTo(2):
- -0.25   0.0
-  0.25  -0.75
-  0.0   -0.25

The eigenvalues match also:

[scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]
7×2 Matrix{Float64}:
- -0.0935298  -0.0935298
-  0.0674043   0.0674044
-  0.122319    0.122319
-  0.212029    0.212029
-  0.355694    0.355694
-  0.438698    0.438697
-  0.45481     0.454726
+ 0.25 0.25 + 0.0 0.0 + 0.0 0.0

The eigenvalues match also:

[scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]
7×2 Matrix{Float64}:
+ -0.14075   -0.14075
+  0.120309   0.120309
+  0.233237   0.233237
+  0.233237   0.233237
+  0.34283    0.34283
+  0.391626   0.391626
+  0.391626   0.391626
diff --git a/dev/developer/useful_formulas/index.html b/dev/developer/useful_formulas/index.html index cf28d7b50c..fb52614162 100644 --- a/dev/developer/useful_formulas/index.html +++ b/dev/developer/useful_formulas/index.html @@ -1,5 +1,5 @@ -Useful formulas · DFTK.jl

Useful formulas

This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.

Fourier transforms

diff --git a/dev/examples/anyons.ipynb b/dev/examples/anyons.ipynb index f5ae68bffa..ac38a6f376 100644 --- a/dev/examples/anyons.ipynb +++ b/dev/examples/anyons.ipynb @@ -20,360 +20,216 @@ "name": "stdout", "output_type": "stream", "text": [ - "Iter Function value Gradient norm \n", - " 0 8.231403e+01 1.695753e+01\n", - " * time: 0.0022840499877929688\n", - " 1 6.369772e+01 1.121712e+01\n", - " * time: 0.006314992904663086\n", - " 2 5.773962e+01 1.190377e+01\n", - " * time: 0.015205144882202148\n", - " 3 4.150108e+01 9.498576e+00\n", - " * time: 0.03936409950256348\n", - " 4 2.990003e+01 8.373057e+00\n", - " * time: 0.06511616706848145\n", - " 5 2.068349e+01 5.598168e+00\n", - " * time: 0.14768004417419434\n", - " 6 1.431025e+01 4.850245e+00\n", - " * time: 0.15649199485778809\n", - " 7 1.245118e+01 6.597384e+00\n", - " * time: 0.1636521816253662\n", - " 8 1.103198e+01 5.131579e+00\n", - " * time: 0.17982220649719238\n", - " 9 9.046344e+00 3.446913e+00\n", - " * time: 0.19861817359924316\n", - " 10 7.009266e+00 2.608344e+00\n", - " * time: 0.21733808517456055\n", - " 11 6.064704e+00 1.400064e+00\n", - " * time: 0.23601698875427246\n", - " 12 5.837871e+00 9.609452e-01\n", - " * time: 0.2510690689086914\n", - " 13 5.717602e+00 1.187848e+00\n", - " * time: 0.3011021614074707\n", - " 14 5.620110e+00 9.194174e-01\n", - " * time: 0.3083021640777588\n", - " 15 5.494441e+00 7.392799e-01\n", - " * time: 0.31543707847595215\n", - " 16 5.372071e+00 5.905685e-01\n", - " * time: 0.32251620292663574\n", - " 17 5.234276e+00 5.649910e-01\n", - " * time: 0.32965803146362305\n", - " 18 5.154961e+00 6.591887e-01\n", - " * time: 0.3367161750793457\n", - " 19 5.088194e+00 4.985902e-01\n", - " * time: 0.3437361717224121\n", - " 20 5.051473e+00 6.260271e-01\n", - " * time: 0.350736141204834\n", - " 21 5.009529e+00 4.852042e-01\n", - " * time: 0.3578031063079834\n", - " 22 4.965535e+00 4.613298e-01\n", - " * time: 0.3648710250854492\n", - " 23 4.961544e+00 9.493927e-01\n", - " * time: 0.40068912506103516\n", - " 24 4.926036e+00 6.580845e-01\n", - " * time: 0.40795207023620605\n", - " 25 4.901338e+00 4.585548e-01\n", - " * time: 0.4150700569152832\n", - " 26 4.882517e+00 5.362402e-01\n", - " * time: 0.4221370220184326\n", - " 27 4.862473e+00 4.429579e-01\n", - " * time: 0.4292311668395996\n", - " 28 4.839811e+00 4.105609e-01\n", - " * time: 0.436298131942749\n", - " 29 4.822122e+00 3.839175e-01\n", - " * time: 0.44333314895629883\n", - " 30 4.807041e+00 4.033148e-01\n", - " * time: 0.45029616355895996\n", - " 31 4.789637e+00 2.570978e-01\n", - " * time: 0.45729804039001465\n", - " 32 4.769848e+00 3.382371e-01\n", - " * time: 0.46432018280029297\n", - " 33 4.753963e+00 2.237424e-01\n", - " * time: 0.48310303688049316\n", - " 34 4.735107e+00 2.390489e-01\n", - " * time: 0.49038219451904297\n", - " 35 4.721640e+00 2.495853e-01\n", - " * time: 0.49752116203308105\n", - " 36 4.706331e+00 2.116014e-01\n", - " * time: 0.5047361850738525\n", - " 37 4.695491e+00 1.566357e-01\n", - " * time: 0.5119771957397461\n", - " 38 4.686388e+00 1.830490e-01\n", - " * time: 0.5191531181335449\n", - " 39 4.679136e+00 1.473174e-01\n", - " * time: 0.5261731147766113\n", - " 40 4.677728e+00 4.198551e-01\n", - " * time: 0.5315990447998047\n", - " 41 4.672488e+00 1.985445e-01\n", - " * time: 0.5386600494384766\n", - " 42 4.667737e+00 2.282890e-01\n", - " * time: 0.5457470417022705\n", - " 43 4.664202e+00 2.147751e-01\n", - " * time: 0.574592113494873\n", - " 44 4.661952e+00 2.048335e-01\n", - " * time: 0.5818371772766113\n", - " 45 4.658761e+00 1.975080e-01\n", - " * time: 0.5890231132507324\n", - " 46 4.656472e+00 1.415512e-01\n", - " * time: 0.5985190868377686\n", - " 47 4.654910e+00 1.257768e-01\n", - " * time: 0.6140570640563965\n", - " 48 4.653730e+00 1.155101e-01\n", - " * time: 0.6295170783996582\n", - " 49 4.652706e+00 8.367321e-02\n", - " * time: 0.644705057144165\n", - " 50 4.651888e+00 7.912778e-02\n", - " * time: 0.6598570346832275\n", - " 51 4.650980e+00 3.197015e-02\n", - " * time: 0.6750540733337402\n", - " 52 4.650713e+00 3.066412e-02\n", - " * time: 0.6903560161590576\n", - " 53 4.650571e+00 3.270553e-02\n", - " * time: 0.7130320072174072\n", - " 54 4.650415e+00 2.666759e-02\n", - " * time: 0.7203609943389893\n", - " 55 4.650239e+00 3.445226e-02\n", - " * time: 0.7275660037994385\n", - " 56 4.650085e+00 3.662553e-02\n", - " * time: 0.734788179397583\n", - " 57 4.649897e+00 3.334800e-02\n", - " * time: 0.7420070171356201\n", - " 58 4.649761e+00 2.678412e-02\n", - " * time: 0.7491521835327148\n", - " 59 4.649636e+00 2.839729e-02\n", - " * time: 0.7563021183013916\n", - " 60 4.649519e+00 1.876053e-02\n", - " * time: 0.7633810043334961\n", - " 61 4.649437e+00 1.754911e-02\n", - " * time: 0.7704811096191406\n", - " 62 4.649367e+00 1.522360e-02\n", - " * time: 0.7776000499725342\n", - " 63 4.649327e+00 8.465763e-03\n", - " * time: 0.796868085861206\n", - " 64 4.649316e+00 1.502621e-02\n", - " * time: 0.8024470806121826\n", - " 65 4.649296e+00 1.151753e-02\n", - " * time: 0.8095719814300537\n", - " 66 4.649282e+00 1.208593e-02\n", - " * time: 0.8167200088500977\n", - " 67 4.649270e+00 1.176409e-02\n", - " * time: 0.8238542079925537\n", - " 68 4.649264e+00 8.842769e-03\n", - " * time: 0.8309969902038574\n", - " 69 4.649259e+00 1.065973e-02\n", - " * time: 0.8379981517791748\n", - " 70 4.649252e+00 5.601304e-03\n", - " * time: 0.8450281620025635\n", - " 71 4.649248e+00 8.476418e-03\n", - " * time: 0.8522160053253174\n", - " 72 4.649245e+00 4.348248e-03\n", - " * time: 0.8593740463256836\n", - " 73 4.649242e+00 4.220550e-03\n", - " * time: 0.888261079788208\n", - " 74 4.649240e+00 3.028727e-03\n", - " * time: 0.8955111503601074\n", - " 75 4.649238e+00 1.986956e-03\n", - " * time: 0.9026889801025391\n", - " 76 4.649237e+00 1.507114e-03\n", - " * time: 0.9134700298309326\n", - " 77 4.649236e+00 5.274016e-03\n", - " * time: 0.9253699779510498\n", - " 78 4.649235e+00 2.550961e-03\n", - " * time: 0.9407260417938232\n", - " 79 4.649234e+00 3.109871e-03\n", - " * time: 0.9558680057525635\n", - " 80 4.649233e+00 2.326343e-03\n", - " * time: 0.971027135848999\n", - " 81 4.649233e+00 2.299948e-03\n", - " * time: 0.9861311912536621\n", - " 82 4.649232e+00 1.773154e-03\n", - " * time: 1.001507043838501\n", - " 83 4.649232e+00 1.877129e-03\n", - " * time: 1.024886131286621\n", - " 84 4.649232e+00 1.462427e-03\n", - " * time: 1.032196044921875\n", - " 85 4.649232e+00 1.130460e-03\n", - " * time: 1.039372205734253\n", - " 86 4.649232e+00 1.087113e-03\n", - " * time: 1.0465080738067627\n", - " 87 4.649232e+00 7.806238e-04\n", - " * time: 1.053642988204956\n", - " 88 4.649232e+00 3.557525e-04\n", - " * time: 1.0607759952545166\n", - " 89 4.649231e+00 6.457765e-04\n", - " * time: 1.0662550926208496\n", - " 90 4.649231e+00 5.101375e-04\n", - " * time: 1.0732800960540771\n", - " 91 4.649231e+00 5.766735e-04\n", - " * time: 1.0803930759429932\n", - " 92 4.649231e+00 6.774994e-04\n", - " * time: 1.0874791145324707\n", - " 93 4.649231e+00 4.499691e-04\n", - " * time: 1.1068851947784424\n", - " 94 4.649231e+00 2.870668e-04\n", - " * time: 1.114238977432251\n", - " 95 4.649231e+00 3.711780e-04\n", - " * time: 1.121394157409668\n", - " 96 4.649231e+00 2.886492e-04\n", - " * time: 1.1285741329193115\n", - " 97 4.649231e+00 2.666393e-04\n", - " * time: 1.1357309818267822\n", - " 98 4.649231e+00 1.970327e-04\n", - " * time: 1.1428601741790771\n", - " 99 4.649231e+00 2.386306e-04\n", - " * time: 1.149919033050537\n", - " 100 4.649231e+00 1.660176e-04\n", - " * time: 1.1569910049438477\n", - " 101 4.649231e+00 3.249179e-04\n", - " * time: 1.1624610424041748\n", - " 102 4.649231e+00 2.119273e-04\n", - " * time: 1.1694490909576416\n", - " 103 4.649231e+00 2.412566e-04\n", - " * time: 1.188683032989502\n", - " 104 4.649231e+00 2.394110e-04\n", - " * time: 1.1960391998291016\n", - " 105 4.649231e+00 1.956542e-04\n", - " * time: 1.2032370567321777\n", - " 106 4.649231e+00 2.080958e-04\n", - " * time: 1.210541009902954\n", - " 107 4.649231e+00 1.816678e-04\n", - " * time: 1.2177071571350098\n", - " 108 4.649231e+00 1.170507e-04\n", - " * time: 1.2249631881713867\n", - " 109 4.649231e+00 9.685914e-05\n", - " * time: 1.2320311069488525\n", - " 110 4.649231e+00 1.107822e-04\n", - " * time: 1.2391271591186523\n", - " 111 4.649231e+00 6.452410e-05\n", - " * time: 1.2461490631103516\n", - " 112 4.649231e+00 4.120965e-05\n", - " * time: 1.253188133239746\n", - " 113 4.649231e+00 1.016082e-04\n", - " * time: 1.2707290649414062\n", - " 114 4.649231e+00 8.896999e-05\n", - " * time: 1.2764360904693604\n", - " 115 4.649231e+00 5.926586e-05\n", - " * time: 1.2836551666259766\n", - " 116 4.649231e+00 5.507618e-05\n", - " * time: 1.2907540798187256\n", - " 117 4.649231e+00 6.645636e-05\n", - " * time: 1.2978150844573975\n", - " 118 4.649231e+00 4.532959e-05\n", - " * time: 1.3049659729003906\n", - " 119 4.649231e+00 5.176628e-05\n", - " * time: 1.3120121955871582\n", - " 120 4.649231e+00 3.947252e-05\n", - " * time: 1.3190929889678955\n", - " 121 4.649231e+00 3.563449e-05\n", - " * time: 1.3261260986328125\n", - " 122 4.649231e+00 2.302092e-05\n", - " * time: 1.3332099914550781\n", - " 123 4.649231e+00 4.899504e-05\n", - " * time: 1.3386530876159668\n", - " 124 4.649231e+00 2.574618e-05\n", - " * time: 1.3578681945800781\n", - " 125 4.649231e+00 2.568867e-05\n", - " * time: 1.3651440143585205\n", - " 126 4.649231e+00 3.623626e-05\n", - " * time: 1.3706769943237305\n", - " 127 4.649231e+00 2.459517e-05\n", - " * time: 1.377824068069458\n", - " 128 4.649231e+00 2.797556e-05\n", - " * time: 1.3850030899047852\n", - " 129 4.649231e+00 2.212471e-05\n", - " * time: 1.392125129699707\n", - " 130 4.649231e+00 2.361515e-05\n", - " * time: 1.399259090423584\n", - " 131 4.649231e+00 1.738009e-05\n", - " * time: 1.4063150882720947\n", - " 132 4.649231e+00 1.182872e-05\n", - " * time: 1.413450002670288\n", - " 133 4.649231e+00 1.129287e-05\n", - " * time: 1.4205741882324219\n", - " 134 4.649231e+00 5.556206e-06\n", - " * time: 1.4400570392608643\n", - " 135 4.649231e+00 1.289242e-05\n", - " * time: 1.4456281661987305\n", - " 136 4.649231e+00 9.050564e-06\n", - " * time: 1.45278000831604\n", - " 137 4.649231e+00 8.266877e-06\n", - " * time: 1.45992112159729\n", - " 138 4.649231e+00 7.978776e-06\n", - " * time: 1.4670541286468506\n", - " 139 4.649231e+00 6.691358e-06\n", - " * time: 1.4741389751434326\n", - " 140 4.649231e+00 5.497719e-06\n", - " * time: 1.481234073638916\n", - " 141 4.649231e+00 5.398598e-06\n", - " * time: 1.4883041381835938\n", - " 142 4.649231e+00 4.302397e-06\n", - " * time: 1.4952991008758545\n", - " 143 4.649231e+00 3.569479e-06\n", - " * time: 1.5023140907287598\n", - " 144 4.649231e+00 2.977093e-06\n", - " * time: 1.5316150188446045\n", - " 145 4.649231e+00 2.002678e-06\n", - " * time: 1.538931131362915\n", - " 146 4.649231e+00 1.073729e-06\n", - " * time: 1.5460920333862305\n", - " 147 4.649231e+00 1.732229e-06\n", - " * time: 1.5568602085113525\n", - " 148 4.649231e+00 9.899242e-07\n", - " * time: 1.5725831985473633\n", - " 149 4.649231e+00 1.066405e-06\n", - " * time: 1.5879781246185303\n", - " 150 4.649231e+00 8.443114e-07\n", - " * time: 1.603262186050415\n", - " 151 4.649231e+00 6.951630e-07\n", - " * time: 1.6184251308441162\n", - " 152 4.649231e+00 8.161672e-07\n", - " * time: 1.6335771083831787\n", - " 153 4.649231e+00 6.672061e-07\n", - " * time: 1.6489431858062744\n", - " 154 4.649231e+00 6.491127e-07\n", - " * time: 1.6698570251464844\n", - " 155 4.649231e+00 4.907003e-07\n", - " * time: 1.6771430969238281\n", - " 156 4.649231e+00 6.196994e-07\n", - " * time: 1.684291124343872\n", - " 157 4.649231e+00 5.134173e-07\n", - " * time: 1.691431999206543\n", - " 158 4.649231e+00 5.333163e-07\n", - " * time: 1.6985681056976318\n", - " 159 4.649231e+00 3.856743e-07\n", - " * time: 1.7056632041931152\n", - " 160 4.649231e+00 7.822283e-07\n", - " * time: 1.7112901210784912\n", - " 161 4.649231e+00 5.551106e-07\n", - " * time: 1.7184021472930908\n", - " 162 4.649231e+00 1.009262e-06\n", - " * time: 1.723940134048462\n", - " 163 4.649231e+00 7.158405e-07\n", - " * time: 1.7311110496520996\n", - " 164 4.649231e+00 7.009530e-07\n", - " * time: 1.7508161067962646\n", - " 165 4.649231e+00 8.464995e-07\n", - " * time: 1.758216142654419\n", - " 166 4.649231e+00 5.492089e-07\n", - " * time: 1.7654750347137451\n", - " 167 4.649231e+00 3.656692e-07\n", - " * time: 1.7726490497589111\n", - " 168 4.649231e+00 3.509967e-07\n", - " * time: 1.779829978942871\n", - " 169 4.649231e+00 4.250771e-07\n", - " * time: 1.787065029144287\n", - " 170 4.649231e+00 2.529635e-07\n", - " * time: 1.7942101955413818\n", - " 171 4.649231e+00 1.955352e-07\n", - " * time: 1.801326036453247\n", - " 172 4.649231e+00 1.555764e-07\n", - " * time: 1.808394193649292\n", - " 173 4.649231e+00 9.022544e-08\n", - " * time: 1.8171260356903076\n", - " 174 4.649231e+00 9.026650e-08\n", - " * time: 1.8417840003967285\n", - " 175 4.649231e+00 9.001027e-08\n", - " * time: 1.8525500297546387\n", - "e(1,1) / (2π) = 1.2158634835234263\n" + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +62.44260288243 -2.52 6.98s\n", + " 2 +57.90594876075 0.66 -1.37 9.62ms\n", + " 3 +40.14499260471 1.25 -0.99 12.4ms\n", + " 4 +29.84626788635 1.01 -0.83 12.4ms\n", + " 5 +21.49418588155 0.92 -0.70 41.0ms\n", + " 6 +18.33107952800 0.50 -0.72 9.32ms\n", + " 7 +9.088200433957 0.97 -0.61 9.06ms\n", + " 8 +8.064520605174 0.01 -0.63 8.95ms\n", + " 9 +7.261777998467 -0.10 -0.69 9.00ms\n", + " 10 +6.868566639783 -0.41 -0.71 7.35ms\n", + " 11 +6.477512650921 -0.41 -0.72 7.41ms\n", + " 12 +6.243183497608 -0.63 -0.78 9.54ms\n", + " 13 +5.948643475240 -0.53 -0.78 29.8ms\n", + " 14 +5.774225815945 -0.76 -0.74 7.93ms\n", + " 15 +5.627986151600 -0.83 -0.74 7.68ms\n", + " 16 +5.516518080117 -0.95 -0.81 7.64ms\n", + " 17 +5.413640088958 -0.99 -0.77 7.39ms\n", + " 18 +5.356007621648 -1.24 -0.71 7.42ms\n", + " 19 +5.323208774207 -1.48 -0.69 7.24ms\n", + " 20 +5.294907735308 -1.55 -0.72 7.43ms\n", + " 21 +5.272215923873 -1.64 -0.67 7.31ms\n", + " 22 +5.247017114550 -1.60 -0.63 7.31ms\n", + " 23 +5.220990301860 -1.58 -0.70 7.33ms\n", + " 24 +5.195496724535 -1.59 -0.69 10.4ms\n", + " 25 +5.175239168629 -1.69 -0.71 7.61ms\n", + " 26 +5.153956012838 -1.67 -0.69 7.56ms\n", + " 27 +5.131000442448 -1.64 -0.75 7.36ms\n", + " 28 +5.107252550778 -1.62 -0.81 7.39ms\n", + " 29 +5.083278395861 -1.62 -0.87 7.42ms\n", + " 30 +5.063085808313 -1.69 -0.83 7.33ms\n", + " 31 +5.044016970366 -1.72 -0.80 7.34ms\n", + " 32 +5.030127176372 -1.86 -0.78 7.28ms\n", + " 33 +5.009840475148 -1.69 -0.76 7.22ms\n", + " 34 +4.992056684614 -1.75 -0.77 10.1ms\n", + " 35 +4.973493051682 -1.73 -0.78 7.68ms\n", + " 36 +4.951178314340 -1.65 -0.67 7.55ms\n", + " 37 +4.927205544462 -1.62 -0.60 7.36ms\n", + " 38 +4.908228442392 -1.72 -0.60 7.53ms\n", + " 39 +4.885292494694 -1.64 -0.60 7.31ms\n", + " 40 +4.863305865621 -1.66 -0.60 7.33ms\n", + " 41 +4.847740598604 -1.81 -0.62 7.30ms\n", + " 42 +4.833475100412 -1.85 -0.65 7.29ms\n", + " 43 +4.820781913642 -1.90 -0.76 7.41ms\n", + " 44 +4.807738321329 -1.88 -0.67 10.7ms\n", + " 45 +4.795369421012 -1.91 -0.79 7.67ms\n", + " 46 +4.782982106306 -1.91 -0.74 7.60ms\n", + " 47 +4.770174963882 -1.89 -0.67 7.49ms\n", + " 48 +4.760327640893 -2.01 -0.71 7.45ms\n", + " 49 +4.754248162734 -2.22 -0.91 7.34ms\n", + " 50 +4.750103035565 -2.38 -0.96 5.79ms\n", + " 51 +4.746433628956 -2.44 -0.82 5.75ms\n", + " 52 +4.737685382123 -2.06 -0.85 7.46ms\n", + " 53 +4.728845367741 -2.05 -0.80 7.45ms\n", + " 54 +4.721560181506 -2.14 -0.73 10.0ms\n", + " 55 +4.714291634030 -2.14 -0.77 7.71ms\n", + " 56 +4.713480606019 -3.09 -0.90 6.02ms\n", + " 57 +4.709451943744 -2.39 -0.84 5.97ms\n", + " 58 +4.699971880949 -2.02 -0.88 7.49ms\n", + " 59 +4.693793551709 -2.21 -0.95 7.40ms\n", + " 60 +4.687931956089 -2.23 -0.81 7.34ms\n", + " 61 +4.681508258202 -2.19 -0.78 7.41ms\n", + " 62 +4.676859692483 -2.33 -0.97 7.32ms\n", + " 63 +4.675708346557 -2.94 -1.23 5.87ms\n", + " 64 +4.669915371883 -2.24 -1.02 7.27ms\n", + " 65 +4.665703235724 -2.38 -1.04 10.1ms\n", + " 66 +4.663768075851 -2.71 -1.29 7.78ms\n", + " 67 +4.662006664399 -2.75 -1.24 7.67ms\n", + " 68 +4.660209203543 -2.75 -1.18 7.53ms\n", + " 69 +4.658401427748 -2.74 -1.22 7.40ms\n", + " 70 +4.657002917553 -2.85 -1.24 7.46ms\n", + " 71 +4.656069712295 -3.03 -1.14 7.34ms\n", + " 72 +4.655184257085 -3.05 -1.28 7.46ms\n", + " 73 +4.654828726167 -3.45 -1.43 5.64ms\n", + " 74 +4.653942558159 -3.05 -1.42 7.25ms\n", + " 75 +4.653117169857 -3.08 -1.32 10.2ms\n", + " 76 +4.652567303407 -3.26 -1.45 7.63ms\n", + " 77 +4.652127891172 -3.36 -1.54 7.68ms\n", + " 78 +4.651636433366 -3.31 -1.44 7.49ms\n", + " 79 +4.650865938937 -3.11 -1.38 7.35ms\n", + " 80 +4.650517628673 -3.46 -1.54 7.48ms\n", + " 81 +4.650267606437 -3.60 -1.66 7.32ms\n", + " 82 +4.650129326899 -3.86 -1.71 7.28ms\n", + " 83 +4.649941525420 -3.73 -1.64 7.34ms\n", + " 84 +4.649797406028 -3.84 -1.68 7.09ms\n", + " 85 +4.649715934520 -4.09 -1.92 10.2ms\n", + " 86 +4.649648317288 -4.17 -1.84 7.68ms\n", + " 87 +4.649570400340 -4.11 -1.91 7.64ms\n", + " 88 +4.649504798806 -4.18 -1.90 7.46ms\n", + " 89 +4.649463268566 -4.38 -1.90 7.33ms\n", + " 90 +4.649419272626 -4.36 -1.92 7.41ms\n", + " 91 +4.649385357791 -4.47 -2.08 7.26ms\n", + " 92 +4.649357651768 -4.56 -1.96 7.41ms\n", + " 93 +4.649329135295 -4.54 -1.98 7.38ms\n", + " 94 +4.649310275302 -4.72 -1.92 7.36ms\n", + " 95 +4.649295510730 -4.83 -2.17 9.88ms\n", + " 96 +4.649291756924 -5.43 -2.33 5.90ms\n", + " 97 +4.649277322819 -4.84 -2.29 7.59ms\n", + " 98 +4.649269655810 -5.12 -2.38 7.54ms\n", + " 99 +4.649262008559 -5.12 -2.45 7.32ms\n", + " 100 +4.649256992703 -5.30 -2.55 7.55ms\n", + " 101 +4.649252824471 -5.38 -2.56 7.53ms\n", + " 102 +4.649247632540 -5.28 -2.58 7.44ms\n", + " 103 +4.649244121152 -5.45 -2.66 7.31ms\n", + " 104 +4.649241648722 -5.61 -2.65 7.22ms\n", + " 105 +4.649239834269 -5.74 -2.76 7.17ms\n", + " 106 +4.649238033816 -5.74 -2.71 10.1ms\n", + " 107 +4.649236663044 -5.86 -2.74 7.75ms\n", + " 108 +4.649235897490 -6.12 -3.00 5.91ms\n", + " 109 +4.649235052812 -6.07 -2.94 7.47ms\n", + " 110 +4.649234224699 -6.08 -2.88 7.36ms\n", + " 111 +4.649233760214 -6.33 -2.94 7.31ms\n", + " 112 +4.649233375856 -6.42 -2.98 7.31ms\n", + " 113 +4.649233008870 -6.44 -3.02 7.32ms\n", + " 114 +4.649232656345 -6.45 -3.07 7.30ms\n", + " 115 +4.649232431126 -6.65 -3.17 7.31ms\n", + " 116 +4.649232173137 -6.59 -3.18 10.3ms\n", + " 117 +4.649232008912 -6.78 -3.08 7.64ms\n", + " 118 +4.649231825334 -6.74 -3.16 7.57ms\n", + " 119 +4.649231720361 -6.98 -3.46 7.40ms\n", + " 120 +4.649231617649 -6.99 -3.42 7.35ms\n", + " 121 +4.649231521702 -7.02 -3.43 7.55ms\n", + " 122 +4.649231451272 -7.15 -3.48 7.40ms\n", + " 123 +4.649231407784 -7.36 -3.54 7.31ms\n", + " 124 +4.649231378411 -7.53 -3.66 7.25ms\n", + " 125 +4.649231351117 -7.56 -3.46 7.19ms\n", + " 126 +4.649231326615 -7.61 -3.64 10.0ms\n", + " 127 +4.649231326151 -9.33 -3.77 5.88ms\n", + " 128 +4.649231310430 -7.80 -3.71 7.57ms\n", + " 129 +4.649231297468 -7.89 -3.71 7.53ms\n", + " 130 +4.649231285948 -7.94 -3.73 7.36ms\n", + " 131 +4.649231273987 -7.92 -3.90 7.38ms\n", + " 132 +4.649231262045 -7.92 -3.84 7.19ms\n", + " 133 +4.649231251522 -7.98 -3.91 7.21ms\n", + " 134 +4.649231246907 -8.34 -4.06 5.56ms\n", + " 135 +4.649231240210 -8.17 -4.09 7.08ms\n", + " 136 +4.649231234680 -8.26 -4.02 7.13ms\n", + " 137 +4.649231229594 -8.29 -3.95 10.0ms\n", + " 138 +4.649231225019 -8.34 -4.10 7.54ms\n", + " 139 +4.649231221549 -8.46 -4.05 7.45ms\n", + " 140 +4.649231218437 -8.51 -4.13 7.26ms\n", + " 141 +4.649231216344 -8.68 -4.15 7.22ms\n", + " 142 +4.649231214366 -8.70 -4.18 7.23ms\n", + " 143 +4.649231213113 -8.90 -4.45 7.30ms\n", + " 144 +4.649231212942 -9.77 -4.50 5.62ms\n", + " 145 +4.649231212105 -9.08 -4.59 7.24ms\n", + " 146 +4.649231211822 -9.55 -4.64 6.17ms\n", + " 147 +4.649231211012 -9.09 -4.49 23.3ms\n", + " 148 +4.649231210317 -9.16 -4.45 9.25ms\n", + " 149 +4.649231209641 -9.17 -4.41 8.65ms\n", + " 150 +4.649231209090 -9.26 -4.46 7.33ms\n", + " 151 +4.649231208512 -9.24 -4.67 7.23ms\n", + " 152 +4.649231208223 -9.54 -4.78 7.22ms\n", + " 153 +4.649231207964 -9.59 -4.57 7.11ms\n", + " 154 +4.649231207784 -9.74 -4.88 7.14ms\n", + " 155 +4.649231207642 -9.85 -4.89 7.08ms\n", + " 156 +4.649231207526 -9.94 -4.85 7.19ms\n", + " 157 +4.649231207439 -10.06 -5.17 9.89ms\n", + " 158 +4.649231207385 -10.27 -5.14 7.36ms\n", + " 159 +4.649231207340 -10.35 -5.12 7.41ms\n", + " 160 +4.649231207313 -10.57 -5.06 7.31ms\n", + " 161 +4.649231207292 -10.68 -5.09 7.21ms\n", + " 162 +4.649231207273 -10.73 -5.27 7.22ms\n", + " 163 +4.649231207264 -11.02 -5.35 7.22ms\n", + " 164 +4.649231207254 -11.03 -5.38 7.18ms\n", + " 165 +4.649231207249 -11.29 -5.37 7.16ms\n", + " 166 +4.649231207243 -11.17 -5.38 7.15ms\n", + " 167 +4.649231207242 -12.29 -5.47 5.46ms\n", + " 168 +4.649231207238 -11.43 -5.51 9.87ms\n", + " 169 +4.649231207236 -11.67 -5.78 5.75ms\n", + " 170 +4.649231207233 -11.49 -5.78 7.39ms\n", + " 171 +4.649231207231 -11.65 -5.98 7.24ms\n", + " 172 +4.649231207229 -11.76 -5.82 7.16ms\n", + " 173 +4.649231207227 -11.80 -5.86 7.12ms\n", + " 174 +4.649231207226 -11.83 -5.92 7.15ms\n", + " 175 +4.649231207225 -11.87 -5.94 7.20ms\n", + " 176 +4.649231207224 -12.09 -6.01 7.15ms\n", + " 177 +4.649231207223 -12.20 -5.89 7.25ms\n", + " 178 +4.649231207223 -12.31 -6.02 10.0ms\n", + " 179 +4.649231207222 -12.40 -6.16 7.52ms\n", + " 180 +4.649231207222 -12.45 -6.16 7.46ms\n", + " 181 +4.649231207222 -12.67 -6.30 7.30ms\n", + " 182 +4.649231207221 -12.72 -6.15 7.18ms\n", + " 183 +4.649231207221 -12.68 -6.31 7.17ms\n", + " 184 +4.649231207221 -13.02 -6.38 7.20ms\n", + " 185 +4.649231207221 -12.98 -6.13 7.15ms\n", + " 186 +4.649231207221 -12.96 -6.35 7.17ms\n", + " 187 +4.649231207221 -13.10 -6.44 7.31ms\n", + " 188 +4.649231207221 -13.29 -6.37 9.90ms\n", + " 189 +4.649231207221 -13.34 -6.45 7.50ms\n", + " 190 +4.649231207221 -13.67 -6.54 7.42ms\n", + " 191 +4.649231207221 -13.42 -6.70 7.31ms\n", + " 192 +4.649231207221 -13.57 -6.71 7.26ms\n", + " 193 +4.649231207221 -13.80 -6.90 7.26ms\n", + " 194 +4.649231207221 -14.57 -6.91 7.14ms\n", + " 195 +4.649231207221 -14.35 -6.98 7.21ms\n", + " 196 +4.649231207221 -13.91 -6.88 7.15ms\n", + " 197 +4.649231207221 -13.97 -7.04 7.21ms\n", + " 198 +4.649231207221 -14.05 -6.93 9.92ms\n", + " 199 +4.649231207221 -14.35 -6.99 7.43ms\n", + " 200 +4.649231207221 -15.05 -7.11 9.14ms\n", + " 201 +4.649231207221 -14.75 -7.23 7.30ms\n", + " 202 +4.649231207221 -14.27 -7.06 7.22ms\n", + " 203 +4.649231207221 -15.05 -7.05 10.4ms\n", + " 204 +4.649231207221 + -Inf -7.13 21.5ms\n", + " 205 +4.649231207221 -15.05 -1.32 34.6ms\n", + "┌ Warning: DM not converged.\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/scf/scf_callbacks.jl:60\n", + "e(1,1) / (2π) = 1.2158634835234294\n" ] }, { @@ -385,41 +241,41 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "\n" ] }, @@ -1364,11 +1220,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/anyons/a544a969.svg b/dev/examples/anyons/87ce7fa8.svg similarity index 93% rename from dev/examples/anyons/a544a969.svg rename to dev/examples/anyons/87ce7fa8.svg index e54c85211c..8eab6687c1 100644 --- a/dev/examples/anyons/a544a969.svg +++ b/dev/examples/anyons/87ce7fa8.svg @@ -1,41 +1,41 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + - + - + - + diff --git a/dev/examples/anyons/index.html b/dev/examples/anyons/index.html index 00643e5ff9..b79d91b33e 100644 --- a/dev/examples/anyons/index.html +++ b/dev/examples/anyons/index.html @@ -1,5 +1,5 @@ -Anyonic models · DFTK.jl

Anyonic models

We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf

using DFTK
+Anyonic models · DFTK.jl

Anyonic models

We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf

using DFTK
 using StaticArrays
 using Plots
 
@@ -27,4 +27,4 @@
 s = 2
 E11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β
 println("e(1,1) / (2π) = ", E11 / (2π))
-heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
Example block output
+heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
Example block output
diff --git a/dev/examples/arbitrary_floattype.ipynb b/dev/examples/arbitrary_floattype.ipynb index b667a5f753..85b2f95edc 100644 --- a/dev/examples/arbitrary_floattype.ipynb +++ b/dev/examples/arbitrary_floattype.ipynb @@ -39,12 +39,11 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.900369644165 -0.70 4.6 \n", - " 2 -7.904992103577 -2.34 -1.52 1.0 1.01s\n", - " 3 -7.905173778534 -3.74 -2.53 1.1 600ms\n", - " 4 -7.905211448669 -4.42 -2.83 2.6 109ms\n", - " 5 -7.905212402344 -6.02 -2.94 1.0 79.2ms\n", - " 6 -7.905212402344 + -Inf -4.61 1.0 89.2ms\n" + " 1 -7.900385856628 -0.70 4.8 74.9s\n", + " 2 -7.904986381531 -2.34 -1.52 1.0 11.2s\n", + " 3 -7.905179023743 -3.72 -2.52 1.2 1.17s\n", + " 4 -7.905214309692 -4.45 -2.84 2.6 105ms\n", + " 5 -7.905213356018 + -6.02 -3.02 1.0 41.4ms\n" ] } ], @@ -82,7 +81,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1021593 \n AtomicLocal -2.1989079\n AtomicNonlocal 1.7296034 \n Ewald -8.3978958\n PspCorrection -0.2946220\n Hartree 0.5530785 \n Xc -2.3986285\n\n total -7.905212402344" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1026890 \n AtomicLocal -2.2005811\n AtomicNonlocal 1.7304240 \n Ewald -8.3978958\n PspCorrection -0.2946220\n Hartree 0.5535905 \n Xc -2.3988178\n\n total -7.905213356018" }, "metadata": {}, "execution_count": 2 @@ -152,11 +151,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/arbitrary_floattype/index.html b/dev/examples/arbitrary_floattype/index.html index 4393e99cbf..d468460a57 100644 --- a/dev/examples/arbitrary_floattype/index.html +++ b/dev/examples/arbitrary_floattype/index.html @@ -1,5 +1,5 @@ -Arbitrary floating-point types · DFTK.jl

Arbitrary floating-point types

Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.

The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:

using DFTK
+Arbitrary floating-point types · DFTK.jl

Arbitrary floating-point types

Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.

The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:

using DFTK
 
 # Setup silicon lattice
 a = 10.263141334305942  # lattice constant in Bohr
@@ -15,18 +15,18 @@
 # Run the SCF
 scfres = self_consistent_field(basis, tol=1e-3);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.900428295135                   -0.70    4.8
-  2   -7.905001640320       -2.34       -1.52    1.0   34.2ms
-  3   -7.905177116394       -3.76       -2.53    1.1   35.3ms
-  4   -7.905212402344       -4.45       -2.83    2.8   80.9ms
-  5   -7.905212402344   +    -Inf       -2.95    1.1   41.9ms
-  6   -7.905212402344   +    -Inf       -4.64    1.0   34.9ms

To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:

scfres.energies
Energy breakdown (in Ha):
-    Kinetic             3.1021447 
-    AtomicLocal         -2.1988711
-    AtomicNonlocal      1.7295890 
+  1   -7.900545120239                   -0.70    4.6   59.4ms
+  2   -7.905014038086       -2.35       -1.52    1.0   41.1ms
+  3   -7.905179977417       -3.78       -2.52    1.1   41.6ms
+  4   -7.905211448669       -4.50       -2.83    2.8   52.9ms
+  5   -7.905212402344       -6.02       -2.94    1.0   41.2ms
+  6   -7.905212402344   +    -Inf       -4.61    1.0   41.9ms

To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:

scfres.energies
Energy breakdown (in Ha):
+    Kinetic             3.1021440 
+    AtomicLocal         -2.1988721
+    AtomicNonlocal      1.7295908 
     Ewald               -8.3978958
     PspCorrection       -0.2946220
-    Hartree             0.5530672 
-    Xc                  -2.3986244
+    Hartree             0.5530673 
+    Xc                  -2.3986247
 
-    total               -7.905212402344
eltype(scfres.energies.total)
Float32
eltype(scfres.ρ)
Float32
Generic linear algebra routines

For more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).

  • HLC2020M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549
+ total -7.905212402344
eltype(scfres.energies.total)
Float32
eltype(scfres.ρ)
Float32
Generic linear algebra routines

For more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).

  • HLC2020M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549
diff --git a/dev/examples/atomsbase.ipynb b/dev/examples/atomsbase.ipynb index 346872fa8b..f7d806afd5 100644 --- a/dev/examples/atomsbase.ipynb +++ b/dev/examples/atomsbase.ipynb @@ -73,19 +73,20 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.921705655636 -0.69 5.8 \n", - " 2 -7.926165539511 -2.35 -1.22 1.0 161ms\n", - " 3 -7.926836871398 -3.17 -2.37 1.9 212ms\n", - " 4 -7.926861488147 -4.61 -3.01 2.6 194ms\n", - " 5 -7.926861635422 -6.83 -3.35 1.8 169ms\n", - " 6 -7.926861667025 -7.50 -3.73 1.5 161ms\n", - " 7 -7.926861680577 -7.87 -4.37 1.4 182ms\n", - " 8 -7.926861681819 -8.91 -5.02 2.1 175ms\n", - " 9 -7.926861681862 -10.36 -5.28 2.0 175ms\n", - " 10 -7.926861681871 -11.05 -5.84 1.4 157ms\n", - " 11 -7.926861681873 -11.88 -6.96 2.0 193ms\n", - " 12 -7.926861681873 -13.41 -7.76 3.2 212ms\n", - " 13 -7.926861681873 + -14.15 -8.37 2.6 192ms\n" + " 1 -7.921712437467 -0.69 5.9 307ms\n", + " 2 -7.926164502804 -2.35 -1.22 1.0 190ms\n", + " 3 -7.926838367231 -3.17 -2.37 1.9 200ms\n", + " 4 -7.926861206779 -4.64 -3.01 2.2 231ms\n", + " 5 -7.926861637944 -6.37 -3.34 1.9 215ms\n", + " 6 -7.926861664724 -7.57 -3.69 1.6 173ms\n", + " 7 -7.926861679494 -7.83 -4.17 1.2 164ms\n", + " 8 -7.926861681802 -8.64 -5.19 1.8 180ms\n", + " 9 -7.926861681864 -10.21 -5.23 2.9 239ms\n", + " 10 -7.926861681872 -11.07 -6.44 1.0 187ms\n", + " 11 -7.926861681873 -12.65 -6.77 3.1 244ms\n", + " 12 -7.926861681873 -14.05 -7.12 1.0 168ms\n", + " 13 -7.926861681873 + -Inf -7.86 1.8 181ms\n", + " 14 -7.926861681873 -14.75 -8.54 2.5 217ms\n" ] } ], @@ -123,19 +124,21 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.921703559969 -0.69 5.8 \n", - " 2 -7.926167899480 -2.35 -1.22 1.0 178ms\n", - " 3 -7.926836137577 -3.18 -2.37 1.6 238ms\n", - " 4 -7.926861518226 -4.60 -3.00 3.0 244ms\n", - " 5 -7.926861632175 -6.94 -3.33 1.9 191ms\n", - " 6 -7.926861666583 -7.46 -3.72 1.8 187ms\n", - " 7 -7.926861680645 -7.85 -4.41 1.4 200ms\n", - " 8 -7.926861681817 -8.93 -4.98 2.1 214ms\n", - " 9 -7.926861681853 -10.45 -5.16 1.8 194ms\n", - " 10 -7.926861681871 -10.74 -5.94 1.2 174ms\n", - " 11 -7.926861681873 -11.91 -6.89 2.5 239ms\n", - " 12 -7.926861681873 -13.62 -7.20 2.6 244ms\n", - " 13 -7.926861681873 -14.75 -8.14 1.2 175ms\n" + " 1 -7.921723543319 -0.69 6.0 307ms\n", + " 2 -7.926163526042 -2.35 -1.22 1.0 221ms\n", + " 3 -7.926839456360 -3.17 -2.37 1.9 200ms\n", + " 4 -7.926861188845 -4.66 -3.05 2.4 233ms\n", + " 5 -7.926861657302 -6.33 -3.44 2.0 248ms\n", + " 6 -7.926861673045 -7.80 -3.89 1.4 169ms\n", + " 7 -7.926861678059 -8.30 -4.03 1.6 187ms\n", + " 8 -7.926861681759 -8.43 -4.70 1.0 162ms\n", + " 9 -7.926861681849 -10.05 -5.06 2.2 460ms\n", + " 10 -7.926861681870 -10.67 -5.97 1.4 150ms\n", + " 11 -7.926861681873 -11.64 -6.20 2.1 185ms\n", + " 12 -7.926861681873 -13.39 -7.07 1.0 148ms\n", + " 13 -7.926861681873 -14.27 -6.80 2.6 177ms\n", + " 14 -7.926861681873 -15.05 -7.14 1.0 147ms\n", + " 15 -7.926861681873 -15.05 -8.45 1.0 146ms\n" ] } ], @@ -180,13 +183,13 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.921681543570 -0.69 5.9 \n", - " 2 -7.926168746197 -2.35 -1.22 1.0 181ms\n", - " 3 -7.926839807426 -3.17 -2.37 1.6 205ms\n", - " 4 -7.926864883531 -4.60 -3.00 2.6 273ms\n", - " 5 -7.926865033737 -6.82 -3.31 1.9 196ms\n", - " 6 -7.926865076269 -7.37 -3.70 1.6 189ms\n", - " 7 -7.926865091700 -7.81 -4.39 1.1 169ms\n" + " 1 -7.921714888123 -0.69 6.0 246ms\n", + " 2 -7.926165033190 -2.35 -1.22 1.0 172ms\n", + " 3 -7.926841292793 -3.17 -2.37 1.9 181ms\n", + " 4 -7.926864580690 -4.63 -3.02 2.2 196ms\n", + " 5 -7.926865049336 -6.33 -3.35 2.0 174ms\n", + " 6 -7.926865076146 -7.57 -3.70 1.4 150ms\n", + " 7 -7.926865090308 -7.85 -4.13 1.1 169ms\n" ] } ], @@ -287,11 +290,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/atomsbase/index.html b/dev/examples/atomsbase/index.html index d3523de3d8..604c0562f9 100644 --- a/dev/examples/atomsbase/index.html +++ b/dev/examples/atomsbase/index.html @@ -1,5 +1,5 @@ -AtomsBase integration · DFTK.jl

AtomsBase integration

AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.

using DFTK

Feeding an AtomsBase AbstractSystem to DFTK

In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.

# Construct bulk system and convert to an AbstractSystem
+AtomsBase integration · DFTK.jl

AtomsBase integration

AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.

using DFTK

Feeding an AtomsBase AbstractSystem to DFTK

In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.

# Construct bulk system and convert to an AbstractSystem
 using ASEconvert
 system_ase = ase.build.bulk("Si")
 system = pyconvert(AbstractSystem, system_ase)
FlexibleSystem(Si₂, periodic = TTT):
@@ -27,19 +27,20 @@
 basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
 scfres = self_consistent_field(basis, tol=1e-8);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.921703754839                   -0.69    5.9
-  2   -7.926164103651       -2.35       -1.22    1.0    218ms
-  3   -7.926836472944       -3.17       -2.37    1.6    233ms
-  4   -7.926861503413       -4.60       -3.01    2.9    244ms
-  5   -7.926861629810       -6.90       -3.33    1.8    206ms
-  6   -7.926861665979       -7.44       -3.71    1.8    221ms
-  7   -7.926861680618       -7.83       -4.40    1.2    173ms
-  8   -7.926861681810       -8.92       -4.94    2.1    236ms
-  9   -7.926861681864      -10.27       -5.30    1.8    191ms
- 10   -7.926861681872      -11.08       -6.00    1.8    221ms
- 11   -7.926861681873      -12.11       -6.91    2.4    226ms
- 12   -7.926861681873      -13.60       -7.31    2.8    283ms
- 13   -7.926861681873      -14.75       -8.02    1.8    188ms

If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:

Reading a system using AtomsIO

using AtomsIO
+  1   -7.921742950143                   -0.69    5.9    309ms
+  2   -7.926164404521       -2.35       -1.22    1.0    172ms
+  3   -7.926839077844       -3.17       -2.37    1.9    215ms
+  4   -7.926861186683       -4.66       -3.04    2.1    280ms
+  5   -7.926861646680       -6.34       -3.39    2.0    208ms
+  6   -7.926861668831       -7.65       -3.77    1.5    171ms
+  7   -7.926861678894       -8.00       -4.09    1.1    169ms
+  8   -7.926861681797       -8.54       -5.08    1.5    174ms
+  9   -7.926861681859      -10.21       -5.18    2.8    227ms
+ 10   -7.926861681872      -10.87       -6.39    1.0    190ms
+ 11   -7.926861681873      -12.17       -6.52    3.1    256ms
+ 12   -7.926861681873   +  -14.75       -6.76    1.0    167ms
+ 13   -7.926861681873      -14.45       -7.90    1.0    165ms
+ 14   -7.926861681873   +  -14.75       -8.05    2.8    237ms

If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:

Reading a system using AtomsIO

using AtomsIO
 
 # Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),
 # which directly yields an AbstractSystem.
@@ -51,19 +52,20 @@
 basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
 scfres = self_consistent_field(basis, tol=1e-8);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.921707873594                   -0.69    5.8
-  2   -7.926163563687       -2.35       -1.22    1.0    229ms
-  3   -7.926836706242       -3.17       -2.37    1.8    235ms
-  4   -7.926861508047       -4.61       -3.01    2.8    237ms
-  5   -7.926861635045       -6.90       -3.35    1.8    191ms
-  6   -7.926861667494       -7.49       -3.73    1.6    184ms
-  7   -7.926861680647       -7.88       -4.40    1.2    239ms
-  8   -7.926861681806       -8.94       -4.94    2.1    208ms
-  9   -7.926861681862      -10.25       -5.29    1.9    196ms
- 10   -7.926861681872      -11.02       -6.03    1.8    190ms
- 11   -7.926861681873      -12.12       -7.06    2.0    256ms
- 12   -7.926861681873      -13.71       -7.45    2.9    283ms
- 13   -7.926861681873   +  -15.05       -8.12    1.6    183ms

The same could be achieved using ExtXYZ by system = Atoms(read_frame("Si.extxyz")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.

Directly setting up a system in AtomsBase

using AtomsBase
+  1   -7.921722158400                   -0.69    6.0    310ms
+  2   -7.926163481819       -2.35       -1.22    1.0    189ms
+  3   -7.926839099282       -3.17       -2.37    1.9    243ms
+  4   -7.926861198414       -4.66       -3.03    2.2    231ms
+  5   -7.926861643140       -6.35       -3.36    2.1    206ms
+  6   -7.926861666136       -7.64       -3.72    1.5    183ms
+  7   -7.926861679245       -7.88       -4.14    1.1    164ms
+  8   -7.926861681802       -8.59       -5.13    1.6    176ms
+  9   -7.926861681864      -10.21       -5.27    3.0    245ms
+ 10   -7.926861681872      -11.11       -6.39    1.0    167ms
+ 11   -7.926861681873      -12.38       -6.73    3.0    245ms
+ 12   -7.926861681873      -14.27       -7.57    1.1    167ms
+ 13   -7.926861681873   +  -14.75       -7.98    2.8    227ms
+ 14   -7.926861681873      -15.05       -9.33    1.8    196ms

The same could be achieved using ExtXYZ by system = Atoms(read_frame("Si.extxyz")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.

Directly setting up a system in AtomsBase

using AtomsBase
 using Unitful
 using UnitfulAtomic
 
@@ -81,13 +83,13 @@
 basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
 scfres = self_consistent_field(basis, tol=1e-4);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.921708093118                   -0.69    5.8
-  2   -7.926169976027       -2.35       -1.22    1.0    237ms
-  3   -7.926839474101       -3.17       -2.37    1.8    211ms
-  4   -7.926864901351       -4.59       -3.00    2.8    255ms
-  5   -7.926865035848       -6.87       -3.30    1.9    222ms
-  6   -7.926865076726       -7.39       -3.71    1.6    187ms
-  7   -7.926865091845       -7.82       -4.42    1.4    197ms

Obtaining an AbstractSystem from DFTK data

At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:

second_system = atomic_system(model)
FlexibleSystem(Si₂, periodic = TTT):
+  1   -7.921712634288                   -0.69    6.0    362ms
+  2   -7.926168038811       -2.35       -1.22    1.0    193ms
+  3   -7.926842305330       -3.17       -2.37    1.9    250ms
+  4   -7.926864616468       -4.65       -3.03    2.2    270ms
+  5   -7.926865057371       -6.36       -3.38    1.8    246ms
+  6   -7.926865078751       -7.67       -3.74    1.5    188ms
+  7   -7.926865090211       -7.94       -4.12    1.4    174ms

Obtaining an AbstractSystem from DFTK data

At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:

second_system = atomic_system(model)
FlexibleSystem(Si₂, periodic = TTT):
     bounding_box      : [       0     5.13     5.13;
                              5.13        0     5.13;
                              5.13     5.13        0]u"a₀"
@@ -132,4 +134,4 @@
                        
                        
                        
-
+
diff --git a/dev/examples/cohen_bergstresser.ipynb b/dev/examples/cohen_bergstresser.ipynb index 3f95824adb..88b24d4216 100644 --- a/dev/examples/cohen_bergstresser.ipynb +++ b/dev/examples/cohen_bergstresser.ipynb @@ -65,7 +65,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "0.40173105002155596" + "text/plain": "0.4017310500215283" }, "metadata": {}, "execution_count": 3 @@ -108,429 +108,429 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -556,11 +556,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/cohen_bergstresser/e8c284e2.svg b/dev/examples/cohen_bergstresser/e8c284e2.svg new file mode 100644 index 0000000000..1a0e244a26 --- /dev/null +++ b/dev/examples/cohen_bergstresser/e8c284e2.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/cohen_bergstresser/index.html b/dev/examples/cohen_bergstresser/index.html index 6a4f5c8271..cef44ca27d 100644 --- a/dev/examples/cohen_bergstresser/index.html +++ b/dev/examples/cohen_bergstresser/index.html @@ -1,5 +1,5 @@ -Cohen-Bergstresser model · DFTK.jl

Cohen-Bergstresser model

This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.

We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:

using DFTK
+Cohen-Bergstresser model · DFTK.jl

Cohen-Bergstresser model

This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.

We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:

using DFTK
 
 Si = ElementCohenBergstresser(:Si)
 atoms = [Si, Si]
@@ -7,9 +7,9 @@
 lattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];

Next we build the rather simple model and discretize it with moderate Ecut:

model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])
 basis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));

We diagonalise at the Gamma point to find a Fermi level …

ham = Hamiltonian(basis)
 eigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)
-εF = DFTK.compute_occupation(basis, eigres.λ).εF
0.40173105002163934

… and compute and plot 8 bands:

using Plots
+εF = DFTK.compute_occupation(basis, eigres.λ).εF
0.4017310500214807

… and compute and plot 8 bands:

using Plots
 using Unitful
 
 bands = compute_bands(basis; n_bands=8, εF, kline_density=10)
 p = plot_bandstructure(bands; unit=u"eV")
-ylims!(p, (-5, 6))
Example block output
+ylims!(p, (-5, 6))
Example block output
diff --git a/dev/examples/collinear_magnetism.ipynb b/dev/examples/collinear_magnetism.ipynb index 7a5ceef942..32394f1ba8 100644 --- a/dev/examples/collinear_magnetism.ipynb +++ b/dev/examples/collinear_magnetism.ipynb @@ -48,13 +48,13 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -16.65002749258 -0.48 5.2 \n", - " 2 -16.65069530245 -3.18 -1.01 1.0 17.8ms\n", - " 3 -16.65080915730 -3.94 -2.32 1.8 19.4ms\n", - " 4 -16.65082408005 -4.83 -2.82 2.5 38.7ms\n", - " 5 -16.65082461214 -6.27 -3.28 1.5 19.2ms\n", - " 6 -16.65082468936 -7.11 -3.78 2.0 21.4ms\n", - " 7 -16.65082469753 -8.09 -4.28 2.0 33.5ms\n" + " 1 -16.65008522608 -0.48 5.5 97.4ms\n", + " 2 -16.65071494825 -3.20 -1.01 1.0 2.32s\n", + " 3 -16.65081109686 -4.02 -2.32 1.5 18.8ms\n", + " 4 -16.65082404848 -4.89 -2.83 2.0 35.8ms\n", + " 5 -16.65082458841 -6.27 -3.26 1.2 18.3ms\n", + " 6 -16.65082467491 -7.06 -3.75 1.5 19.1ms\n", + " 7 -16.65082469671 -7.66 -4.28 2.0 21.0ms\n" ] } ], @@ -75,7 +75,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 15.9208075\n AtomicLocal -5.0693040\n AtomicNonlocal -5.2202095\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.7793384 \n Xc -3.4467482\n Entropy -0.0182879\n\n total -16.650824697528" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 15.9207749\n AtomicLocal -5.0692833\n AtomicNonlocal -5.2201939\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.7793330 \n Xc -3.4467465\n Entropy -0.0182879\n\n total -16.650824696712" }, "metadata": {}, "execution_count": 3 @@ -145,18 +145,18 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", "--- --------------- --------- --------- ------ ---- ------\n", - " 1 -16.66157145028 -0.51 2.617 4.8 \n", - " 2 -16.66808850526 -2.19 -1.09 2.445 1.4 36.3ms\n", - " 3 -16.66904441802 -3.02 -2.05 2.337 2.4 57.2ms\n", - " 4 -16.66909980781 -4.26 -2.75 2.303 2.0 53.3ms\n", - " 5 -16.66910284033 -5.52 -2.95 2.296 1.8 40.0ms\n", - " 6 -16.66910413714 -5.89 -3.46 2.287 1.9 52.4ms\n", - " 7 -16.66910416740 -7.52 -3.73 2.286 1.8 40.6ms\n", - " 8 -16.66910417411 -8.17 -4.25 2.285 1.8 43.4ms\n", - " 9 -16.66910417506 -9.02 -4.93 2.286 1.6 38.6ms\n", - " 10 -16.66910417508 -10.68 -5.26 2.286 2.2 47.8ms\n", - " 11 -16.66910417508 + -11.66 -5.70 2.286 1.4 68.1ms\n", - " 12 -16.66910417508 -11.15 -6.08 2.286 1.6 87.0ms\n" + " 1 -16.66166517757 -0.51 2.618 4.9 60.3ms\n", + " 2 -16.66824840960 -2.18 -1.09 2.445 1.5 1.50s\n", + " 3 -16.66905877430 -3.09 -2.07 2.341 2.0 41.3ms\n", + " 4 -16.66909804646 -4.41 -2.57 2.304 1.1 34.6ms\n", + " 5 -16.66910262777 -5.34 -2.92 2.297 1.6 47.8ms\n", + " 6 -16.66910412238 -5.83 -3.54 2.288 1.8 39.6ms\n", + " 7 -16.66910417275 -7.30 -3.89 2.286 1.9 40.3ms\n", + " 8 -16.66910417452 -8.75 -4.29 2.286 1.4 38.5ms\n", + " 9 -16.66910417508 -9.26 -4.88 2.286 1.8 39.3ms\n", + " 10 -16.66910417509 -10.94 -5.27 2.286 2.0 41.8ms\n", + " 11 -16.66910417509 -11.39 -5.85 2.286 1.6 41.5ms\n", + " 12 -16.66910417509 + -11.29 -6.39 2.286 1.8 41.1ms\n" ] } ], @@ -175,7 +175,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.2947214\n AtomicLocal -5.2227273\n AtomicNonlocal -5.4100291\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.8191966 \n Xc -3.5406835\n Entropy -0.0131612\n\n total -16.669104175083" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.2947184\n AtomicLocal -5.2227255\n AtomicNonlocal -5.4100275\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.8191960 \n Xc -3.5406835\n Entropy -0.0131612\n\n total -16.669104175087" }, "metadata": {}, "execution_count": 6 @@ -208,9 +208,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "No magnetization: -16.650824697528392\n", - "Magnetic case: -16.669104175082698\n", - "Difference: -0.018279477554305146\n" + "No magnetization: -16.650824696711982\n", + "Magnetic case: -16.66910417508672\n", + "Difference: -0.01827947837473687\n" ] } ], @@ -249,8 +249,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "(scfres.occupation[iup])[1:7] = [1.0, 0.9999987814393337, 0.9999987814393337, 0.9999987814393337, 0.958225342105766, 0.958225342105764, 1.1266699471873628e-29]\n", - "(scfres.occupation[idown])[1:7] = [1.0, 0.8438945058323566, 0.8438945058323508, 0.8438945058323508, 8.140929963056979e-6, 8.140929963056169e-6, 1.6177009594417616e-32]\n" + "(scfres.occupation[iup])[1:7] = [1.0, 0.9999987814434158, 0.9999987814434158, 0.9999987814434158, 0.958225399039959, 0.9582253990399537, 1.1266873062552799e-29]\n", + "(scfres.occupation[idown])[1:7] = [1.0, 0.843892228965408, 0.8438922289653819, 0.8438922289653431, 8.140802436661187e-6, 8.140802436660637e-6, 2.8463442486751887e-33]\n" ] } ], @@ -277,8 +277,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "(scfres.eigenvalues[iup])[1:7] = [-0.06935856846194849, 0.35688554531415123, 0.3568855453141479, 0.3568855453141485, 0.4617360040370358, 0.4617360040370363, 1.159620948545174]\n", - "(scfres.eigenvalues[idown])[1:7] = [-0.03125744589059533, 0.4761889801988689, 0.47618898019886935, 0.47618898019886935, 0.6102499148765392, 0.6102499148765402, 1.225081104855835]\n" + "(scfres.eigenvalues[iup])[1:7] = [-0.06935856496920198, 0.3568856201400282, 0.35688562014003294, 0.3568856201400242, 0.46173609813953076, 0.4617360981395321, 1.1596209027977924]\n", + "(scfres.eigenvalues[idown])[1:7] = [-0.03125744744215641, 0.476189261358237, 0.476189261358239, 0.47618926135824197, 0.6102501798530291, 0.6102501798530298, 1.2424567694044766]\n" ] } ], @@ -315,118 +315,118 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=3}", - "image/png": "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GlHDSy/hpZf4DqKd9PR0Z2dn6abbhw8fbnurvr4+NzdXus+nSCQaP378+PHjAbz11lsrVqzokAgrKipac1LrIU0VFRVtD2yytbWVzr4ZNWrUyZMnbWxsRo0a1djYePLkyby8vFGjRkkfpq+v39ow7byntrW1dWxs7JYtW5566qm6urrffvstMjJSel36AHNzcyMjo4qKih7tvwG0/mhkZKTglGA2qDpG2Ldv3z179hQXF3/xxRcREREPHjwAUFdX98QTT+zevfu333777bffbty4wWaohAjU3btwcYEBc90rnp6cnopHBKuiouLrr7+Wnos0evTo9PT0E202Zd+0aZOdnV10dHSHtYBBQUHSs5na8vb2bv2Ivn79euvFpKSklpYWAGKx+Nq1a76+vgBGjRp14sSJkydPjhw5Uvrv06dPtyZCpQIDA9evX5+env7UU0+1Tk9trT01NVVfX9/FxUWdd4Jdqv7tJicnS1u1TU1Nvr6+hw4daj2zaufOnYaGhmwFSIjg5eTAw4PJAl1cUFqKujqYmjJZLNEJTU1Na9eubW5uzs3N3bdv36BBg6SL7dzd3b/44ospU6a89dZbgYGB58+f//777/ft22dsbJyfnz9x4sQ5c+b4+vreu3fvo48+evrppzsU+9prr7355puGhoZVVVU//fSTtEk3atQoBweHBQsWzJw587fffjMzM5O2KaWp1MjISNrcLCoqam5uDgwMVCX+a9eu7dmzR9qPGhsbO27cOOn106dPr1+/vl+/fqtWrXr55ZcNGPzmqDVVQ5FmQQCGhoYGBgZ6bUZ39+7da2BgEBkZ6erqynyAhAje7dtg9hQaPT306YPbt/Fwr3/SXTg7Oy9durS8vNzU1DQoKGjx4sVtx5tefPHFsLCwnTt3Xr9+3cvLKyEhQdqAc3R0fO+9986ePRsfH29nZ/fVV1+1TvVsNXPmTBMTk99//93JyWnHjh2xsbEA9PT0Tp069c033/zyyy++vr7r16+X5ic9Pb1PP/3U9OEXsTVr1jQ3N4tEIgBmZmbSXbalnnjiiYD2v6aurq6Wlpa//vqrnp7e/Pnz586dK73+2muvtbS0bN++fe7cudIhRlNT09aT6+fPny896RdARESEB7NfLZURqbu/zg8//PDxxx8nJSVZWFhUV1dHR0eHhoaWl5efPHly06ZNc+bMkfesdevW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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -463,1196 +463,1196 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=98}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOydZ0AUSROG310yCCIuQVEEFBVRDhUFCWIW05lzOvXOLGYxxzN96il6eoZTEcGsKGDWU0A9UYyYc0JABCWn3a3vBwbChtnZWYK3zy92urq6WJip6e7qKh4RQY0aNWrUqPmvwi9tA9SoUaNGjZrSRO0I1ahRo0bNfxq1I1SjRo0aNf9p1I5QjRo1atT8p1E7QjVq1KhR859G7QjVqFGjRs1/GrUjVKNGjRo1/2nUjlCNGjVq1PynUTtCNWrUqFHzn0btCNWoUaNGzX+a8u0I79y54+/vX9pWKEBiIpYsAYBNm/DokRzhgIDnNjZpxsaYNOl19vTpWL1apbbl5OS8CAujfv0wcuTDf/5RUltAAK5f58KsR4/wxx9cKJKAWCx+9erV48dZv//OhbqkJMhTJBRi+nQuxmKLSCQqxdG3bcODB1LaFi5ESorElmnTsHEjp3YMGYIZM6Q1EpFYLM7/CVOnIjdXId0PH2LzZiXtKwkWL0ZyMpuOqampsUeOPO3VKyU8/GFk5JerDx9KvU+zs7F1K/78E8Dd6OgbQUE3wsOFQqE0/e/eYcUKNoZJszY7O1uuWPl2hDExMWfPni1tKxTA0BAbN+LJE3z8iE2b5AjPnz/41SvtlBSsX//v/YuXsG6dSm27devW2l9+4e3fj23bJg8YkJSUxFpVZiamT4exsdI2ZWejXz9UrKi0IgmkpaU5OrZs2nRigwZub9+e50BjWBju3pUtcuMGzp3jYCjWZGZmluLoT58iOFhKW1QULlyQ2JKczOWTEQDatYOfH2rVwtu3xRvFYnFOTg4AhIbi4kVoayukOyAAsbGcWKla7t3DsWNsOoaFhR3o33/y4cOXWrQY0qcPAKSloWdPCARFRZOTsXQpbG1x/Djc3ABoGRhcTUrK1dbW1NSUpn/lSmlvRAqzdevuWrVaX778Tq5k+XaE5Q5dXYwcifXrMWQI9u2T865pamoMvADA4z1+5P0z3r+HKp9itWvXvqqp+RC4CiTp6pqYmLBWtXMnPDxgZ6e0TTNmoFYtjBihtCIJ7NwZ+ORJr8TEY3l5Z8PDF3Og8exZtG0rWyQ8HF5eHAxVTnFxQVSUlDYPD1y6JLFl1izExuLjR+7sGDQIcXEwNYWtLdaskSr2+++YN09R3WFh6NxZKetKhk6dcPw4m45OTk4hRkZZwDUez7RaNQAYOxZeXhgy5LtQXBwWLkTdunj8GOfO4dgxNGoEwN7efpyPT7NmzaQpT0hAUBB8fNgYVpyFC9cmJl568sRGviiVZ3bv3j1gwIDStkIxEhLIxIQ+fqQWLejIEVmS9+/fr1XLzcyska3tYAeHXLG+Aa1fr1Lbrly+3NPTc3CHDo8fP2atRCikmjXpyhWlrTlxgqysKClJaUWSmTNnA4+3GSDgk52du7LqxGKqUoVevJAt1akTHT6s7FDKkJqaWoqjx8aSqamUtvBwcnGR1tHEhGbOVIFBK1eSpibZ21NCwrdrQqEwMzOTTpwgBwcSiRTS9/o1mZkp2ql0+PCBjIwoO5tN35DgYHNj446ennFxcbR2LTk5UWbml7Y7d2jwYDIxIR8fevtWUc3Tp5OPDxuTJFKpkhOQt3Ch/L+H2hGWAkOG0MqVtGMHdevGtMuKFRSl2zyroasq7SIiysrKys3NVUbDvn3UvLnSdrx7RxYWdOmS0ooks2sXCQRJlSu7CARDTU2bHD4coqzG27fJzk62iEhElSoVfOSWAqXrCImoenV69kxSQ3Y2VahAaWkSe/XrRzY2qjHozRuytycdHQoIyL/wxRF6eND+/Yoq+/NPGjqUYwNVR7NmdOYMy77e3t6hoaH0779kbv7l/S8ykjp3JgsLWrCAPn1ioTMpiUxM6NUrliYVRCymFSvI0HBTxYqe587JeT0ltSMsFe7eJUtLSk6mSpXowwemvS4M3JbF07tzR5WWceEIXVwoNFQ5I0Qiat2alixRTotk4uLo55/J0ZFu36acnJwrV64kcTLpXLWKxo6VLXLzJtWrx8FQylDqjrB3bwoKktLm5kbnz0tsiYkhHk+al+SCqVOJzydXV0pL8/PzW9W3r7BOHRYzuw4d6MABVdinEn7/nSZOZNMxKSnJ2tp62siRVL06HT9OISHk4kJ2drRuHWVlsbZnwQL67TfWvb+Tmko9epC7O71/T2/fvv38+bPcLmpHWDp4edG+fTRoEPn5Me6TkyPm8duaRF++rELDlHSE//xDdesqvTS0dCl5epJQqJwWCRw4QObm5OtLOTlfrnDmGNq1o+Bg2SJr19KYMdyMxppSd4SrV0tf+/L1pUWLpHU0MqLFi1VkFBERxcSQhcVYHq81MAyox+OlKeh4MzPJyIjdXKh0uH2bbG0V7vXy5UsLHq8a4AiMNjCg2rXJ3Z1CQkgsVsaYtDQyM6MnT5TRQUT06BHZ29PIkV/ucZFIxOSBpnaEpcPRo+TsTGfPUqNGinSrUeN9u6Hm5nTypKoMY+0Inzx5Mm7cLDu7VRs3pihlwbVrZGZGr18rpaQYnz7RoEFUrx5dv17oOjeOISuLjIxI3otnjx60dy8HoylDqTvCyEhq2lRKW2gotWkjrWO3blS7toqM+kJSYqIDQAABQ4Dp06cr1D0khFq1UpFpqqJGDXr4ULEuXbt2nQt0AkIAK4CiojixZMUKGjhQWSVHj5KZGW3f/v0KQ0eojhotHbp0wadP0NfHx49yQ+4L4O1d5f65kBAMH479+1VonqIkJSV5efXbuNH92bMK/v792StKT8fAgdiyBVZW3FmHkyfRoAH09XH9OpydOVT8lUuXUL++7GMeRLh0Cc2bq2D0ckXjxrh/H1lZktrc3XHtGqScMJs9G8+egcGRMPboGRikAPmh3ImAQMFzO8ePo1MnVdilQjp2RFiYYl0qVqyYAADIAYQAmjZV3ozsbKxfj5kz2WsQiTBzJnx8EBaG4cMV7q52hKUDnw8fH/j5YdAg7N7NuNukSXj/vmn9zNOnMW1aGTq3e/369czMjkAnotGvX3/Oy8tjqWjUKLRti27duDIsNRWjRmHcOAQGYssW6OtzpbgwDA5OPHgAIyNUraoaA8oPenqwt8etW5LaKlWClRVu35bYsUkT6OlxfbK+qG16Dg0a1ARqA4k83oy1a/H6NfPup06VP0fI4hDFtm3bTmtrhwOjgFYtW3JixrZtcHVF/fosu3/8CG9v3LmDW7fQpAkbDWpHWGoMG4bz59GmDQIDpb0EF6NuXejrY/v2Bg0QGYk//lDqHYpD6tSpw+OFAx+BOwYGIi0tLYW6nz5xom/LlhPd3RNu3OAwgc6lS2jcGADu3lXx6b2zZ9GunWyRiIj/9AnCgri6Sj9N6Okp7TQhgObNoepEUqdcXO7OmnX8yZPr2dmoVg116iAigknHO3egoYE6dVRrHue0aoWbNxVLMaOtrf06J6dR8+bbRozYzcWrZV4e1qzBrFksu9+8iSZN0LgxwsLA+vCz1OP9PzDPnz///PlzaVsBAB06wN8fpqbYtAnu7sz61K6Nbdt+GjPG2lozMhLe3sjIgJ8f+KX6SlOjho1AMKVChT62tiZbtvgr1Pfx48dLhw79++PHh8AwB4cTenrK25OVhUWLsHs3tmxR/enmjx/x4oXcF9GICHh7q9iScoKLi/TlOA8PHD6MSZMkNk6dinbtIBRCeloS5fjwAUeOGD14oGtkBG1t3L6NwYPRsiXWrcOECbK7hoWhSxfVWKVK9PTg5YUzZ9Cvn2Id9fX1tTt3xtSpiIhQcsV/1y7Y27PcswgIwPTp+Osv9OihjAn/SUfYqlUrY2NjRWctqkAsRkYGdHSwZQsCApj1EQqfPn16+OLFNm3amJvjwgV06YIhQ7BzJ0rxF9qxA2Zm3S5d6sbjKdz31q1bXdPSagO1gd+5SB8SFYWhQ+HoiJgY9m+ICnD2LFq2lPvtR0Rg+XLVG1MecHHB3LlS2po3x6RJIIKk/6TWraGtjbVrk6ZPr6wSyzZsQL9+EAi+53zavRv16mHSJNy7hy1bZHQ9fhyLFqnEKFWTvzqqqCMEAE1NzJ2LuXMZTpolIhLhf//D9u0Kd8zJwYQJiIjAxYuwt2c9/leUDdMpVdhFjVpaWr57904V9pQM7V1cTm3Y8O1jdjZ1706dO3/P7aAMLKJGU1KoatWi0ZjMefbsWbPKlW8CgRoaXZo1Y6mFiIhyc2nBArKwUCB7CwdRlMOG0caNskWePqVq1ZQdhxNKPWqUiMRiEggoNlZKs5UVSUls9PjxYz6/PtBUU9Py4sWLHJuVkZEfv//lQH1Bjh4lTU1ydaW8PIldP36kihVZZmkpdWJjqXJlab+ZVL4cqBcKyd6e/bF8oqAgNvk33r4lFxfq2pVS5IWoq6NGf1z4fISGfvuko4ODB2FqCm9vzpLVKsTChejcmX00Zs2aNVf07r3eyurBmDH+ikawAXfu3Jk8ef6mTdtu385zccH167hxQ9l1EsU4d45JitEWLUrEmPIAjycz6ainJ77VNChM375jxeK5QJRQuL9vX8nLp+zZsUNqhtyuXfHgAR4+hI1N8ZynRHTkSGqrVtDR4diikqFqVVhZ4epVVp01NLBgAWbPBhGL3kRYsQJz5ijWKzwcLi7o3h3BwTAyYjGsBNSOsByipYWbNwte0NDA9u1wdoaHB96/L1FbHj1CQICyi0LNr17dGRCwdMMGRTN9P336tG3b39atazJp0ltX14mjR+P48ZKNzHz4EHy+3PziSm+j/Giwy76dmpoNmAMAzLOyFKuOJAeRCH5+mDpVqoCdHd68gbY2bGwKHniKiYmxsmrs49P92rUWKaXyHqo0ycnJHz508vZ2btKkw0cWexN9+kAkYlfJ4uhRaGnJfY0EgEePHgUHB8fFxfv5oX9/7NoFX1+Jy+csUTvCcoi2NpKSilSi4PGwZg0GDYKnJ54/BwBi9Y6mKFOmYN48WFgooeLBAyQnw9OTRdfz5y8kJf0GdMnLW1yp0vWRI5Uwgx1nzsiNF4XaERZDVuCodEe4Zs00Pn8oMBXoN3XqaC4NCg6GiUl+qSCpGBnh6VN4eqJRI+zZk39tzJgF794FZmefj48f+scfZeY8kyLMnbsqPn5QRkb0rVu/zpypeL0rHg+LF2PuXOQXcVSE5csxf758fxYYeMDDY8ygQQ9sbTts3fro33/Rpo3CZspG7QjLIRoa0NbGzp3FW3x9MW0amjY9KhD8ZGbW0MdH4SIyChEailevMHascloCAjBoELuwVwcHez2900AWEFm9uplydrCCwQnCd++QnY3atUvGoPJB06a4cUPKqSEHB3z6JHFlo1u3bo8enVuxwszC4vCFC3LCOBXjjz/g6ytfjM/HiRPw8cHgwfkBP+npGYAJAJGockpKBpcmlRRv3yaIRPYARCL7N2/i2ajo3BmVK2PvXoU6nT6NjAxGobYrV25NSjqcmTknO3tpixaBNWqwsVEOCm9TliX+o8Ey7dufql+fpMSViMXiihUdgXRALBD0uKNglm7mwTI5OWRnR6dOKaS+GGIxWVtTTAy73qmpVLHiRkvLZq1b933z5g0rDUoEj+TkkJERJSbKltq9m/r0YT8It5SFYJl86tWjW7ektHXpIjt39bVrxOfTv/9yZEpkJNnafsttKyFYpjjbt5OGBnXocOzYcR0dF339KVWrOr2QV4SrbHL+/AWBwFVTc62GhltIyFmGvb4Ey3wjIoJsbL7n8GWApyft2cNIskWL3kA0QNra65ct+4P5EKQOlvnBad1aWgIOoVCoo6MLGAC8vLwayhSal826dbC3R/v2ymm5eBEmJqxTSixYgF69xr57d+XcuX3Vq1dXzhTFSE1NDd+8+b2trYTC3IVRr4tKxNVVeoCG9NXRfJo0gbs7+iuRy68Qa9Zg6lRoaCjQZfhwREXh4sWOU6fow9HR8sTs2b/a2DAoAFv2aNWqxb//7t65U9C2rf+NG2zXHD09UbMm83wHV67g/Xv07s1IeOLEpZqaPgJBkyZNzk2cOIqlhbJRyLuWNX7UGeGHAiQWm3C0b9/+VFgY8fkUHS2x+8CB401MBuvozNDT80hLUyymm+GMMD6eTE2lRbkrwogRtGYNu6737pGZmQJ1rCTCbob08uVLp6pVJ+vquujrhx09Klu4dm26e5eVcSqg7MwIt2yhX36R0nblitxs9ImJpKkp99wKA548IYGA0tO/XWA0I8wnPn6WhvYQ4BjgxONtVHHdbFXz/j2ZmtKjR4yEi84Iiej6dbK0ZHiKq127QqmxZSAWU7NmtGMHI+HiqGeE5RWRSGRmZlavXj1HR0dHR0dXV1cJQpqaqFZNWuLFwMANISGjjhxp0bz5uaVLVRLTPWMGRoxQet8rOxvBwejbl13vCROwcCFMTZWzgRW7/PzmxcX9kZ0dmpnpN3++DMn4eHz8CAeHEjOt3CArXqZxYzx5gtRUGd0FAowYAV9fFiEahVm7FqNHw8CATV9z8wAxNgI/A2uIDmzapJwppUyVKpgxAz4+bPs7O8PZmUkG5Fu38PAhBg1ipHXnTgiFGDqUrVXMUDvCMkF6enpW4YT8ERERcXFxcXFxz549k9zH2xtnz0pT6O7u3rFjhz17dPbvx9Gj3BqLGzdw9iz73IDfCQ2FszMsLVl0DQpCSgpKOkz03Tts3Ypu3fT/+is/O2MyoCcz3WJEBDw9SzkBXtnEwQHv3+PTJ0lt2tpwdsa//8rWsGkTiDBunBJGfPyIffswfjy73jExAN/sJEDAScDe1lYJU8oEkyYhIQGHDrHt//vvWLECaWkyRIRC4eLFmDED2try9X36hNmz8eefKr+D1DdoKXP//n17e/u6deva2dl1Vigt5uTJiI0tcoiiCCYm2LcPo0fj5Utl7fxG/qNn5UoujrIGBjJ9LSxMWhpmzsSffyq2rcMSsRg3bmDlSnh4wMkJ586hY8eRd+8GOji0MTfvb2m5WOYrsHqDUBoaGmjUCNeuSWmWt00IgM/HunXYtg0fPrA1YuNG9OoFc3N2vbdvR/cx/ywxNbXS0Ig1NNx47pyUshrlBk1NbNyIiRPZpuaoXx9t2mD9eomNqampTZp4m5t7hIW5tWgh5f2+MPPmoUcPTgo9yeG/mGu0CCk5KWv/XZstVGWhs69UMazi09SHV+DgzF9//eXt7b127VoAaQXepFauXJl/utzd3b1nz54SdNWtCz097Nwp+5W4aVP4+qJvX0RGcpP5Ytcu8Hjs/FdhkpMRGYmgIBZdFyxA+/Zo1kxpG2SQno4LFxAWhtBQ6Omhc2csXAgvr/ycohWBizExnz9/rlixIk/mMaiICAwbpko7yzP58TKS4608PLBC/pm2X3/F0qXo3Rvh4YoPn5ODLVtw7pziPQEgNxd79+LKFbsNG7764S5dvvxKDRuy01kWcHdH+/ZYsoRtGZhFi9CsGcaMKZ7nd9WqTbdv9xIKfwWuTZ264PRpOfd+TAwOHsT9+6zMUBC1I8Sz5GfLLy3PFXGaqEIKAn3BiIYjKmhX+HalS5cuCxcu3LFjh62tbYsCabgsLS3Nzc0BVK4sPb9wo0YICpK7NjRpEi5fxvTp0l7UFCAtDXPn4sgRLnI67NuHjh1RoYJ8ycLcv4+gINy7p7QBwJs3b0JDQho4Ojb/Nmt78QKhoQgLw7VraNoUnTtjzhxpVYKNjY1l609OxuvX+OknDkz9IXFxkZ7IulkzREcjN1fuCtqBA3B1xZUrck7DS8DfH87OqFdPwW5fCAtDvXqoWbPApdDQH8MXrlqF+vUxeDCrf91atdC9O1avxrJlRVoSEz8LhflfS/WPHyWuiX+HCOPHY+lSuUHZspXQiRMnGjdqVEVuuimWsThlgx8gavTcuXPOzs5jxozZvHlz/hWhUAjgwYMH0rq0b9/+VP7xvc2bSU+PySipqVSnDgUGypeUHTU6fToNG8ZkQAa4udGJEyz6tWxJmzZxMP7Tp08bmplt5PN7GxuvHjKEfH2pTh2ytqaRI+nAAUpLU36I4GDq0EF5NVxSdqJGiSghgSpXJrFYSnPDhnTlChM9Xl5Uo4aCY4vFZG9PkjJ3M4wa7dyZdu2S0qCtTTdvKmhQ2WLLFnJ3l/6nkRg1+o3YWBIIKC6uyOX79+/r6Djp6CwUCNyPHAmRbYC/PzVuTCKRYmYXYWz//mONjOLPyj8cqXaEpUzz5s2PHDlS8IoCjjAnh3g8hrfcnTtkZkbStX5BhiN89owEAnr/nslo8nj5kszNFc54TxQYSI0afTv6rBSrlizZy+MRkAe46OrS//5H9+9zoLcAU6bQ8uXcqlSWMuUIicjaWvohHB8f+t//mChJSiJNTfrzT0UGPnqUnJ0ltjBxhPHxVKmS9Jel8u8LRSI5hxZkOUIimjSJfHyKXIuIoOrVEw4fDpGbeSAlhSwt6epVBQyWSGNzcwJEU6bIlSy1YJlPnz59khwxBgBElJiYmKxQ4eTyiZOT09atWyMjI6Ojo7ds2SJkWqseAKCtjerVsWEDE1lHRyxZgj59ZIfXyGLiRPj6okoVlt0LERCAfv0Ura/KbYyMZVraDQDAPUDg6Ijp01mvkkkjPFwdKSOLxMREsXhM+/adtm/fLaHZw0NaGYoimJjgt98wY4aUnG0SWbMG06Yxli5KQAB69JC+rh8ainbt4OpafmNn+Hxs2YJZs4oX22DGrFkICsKbNwWvzZyJZcvMevToIjfzwLx56NQJLi6shi6Ahq5uLMDoiJWyPldxcnJy+vTpU7lyZYFA0Lt375xiWXkuX74sEAiqVKliYmJib28fLeXYOP0QM8KsrKy1a9f26dOna9euM2fOFIlEYrF40qRJCQkJ0rp8nxES0a+/KlTpbuhQGj5cjj0SZ4RnzlCtWtxVXKtTh0UBw8mTacQILkbPy6MFC0RWVuPatHEyN2/doMHTp0+50FuIlBQyNFQo51RJUKZmhF5ePXm8YCCuUqUuly5dKtocF0eVKjFcHROJyMiIRo5kNvC1a2RtLW1BgsmMsEEDKm5vUcr/vNDHR+pXKmdGSERz5hS8XY8cIUdHRn/M/EQZ8hIXMuLq1Kluenr3L1yQK1kKjvCvv/5q1KhRVlZWdnZ2kyZNNhZLDpGUlPThwwciEolEvr6+zlJWMOiHcIQsKOQI798nHo8yMhj2TU8nBwdZKx4SHWFuLtWpQ8ePs7FWAlevkp2dop04ySNDRPTiBbm6Urdu9PEjqdIxnDhBrVurSDd7ypQjtLR0BgggHs9/zRpJaVlq1qR79xhq272b+HxidGf37k3r1klrlOsI8/9/Zeyffaec+8KUFKpWTfJGrXxH+PkzmZrSw4dEJBRSvXp08qT8EcViatGCvsZLKEdSEpmbi27fLqOZZQIDA0eOHKmrq6ujozNq1KjAwMAiAiYmJqampgD4fL67u7uMFVQ1qFfvyyEKZhgY4MgRzJyp2JrN+vWwskLHjmwMlEBQEIYMUbQTN3lkAgLQtCn69cORI5ARjssF+Ufp1cigadOfdHRWA5crVdretm0LCRLSi/QWZ9Ag1KiBfv3kyb18iQsXMGKEQqYWxN8fv/zCLHA6NBTt25ffNVIjI/zvfxg1SpE1529UrIhJk/JLle7YAYEA3t7yOwUFIS0Nv/6q+HDFmTUL/fujQQNGwlx4XsWoWrXqha9z1YiICAsLi+IyOTk5W7ZsWbBgQcOGDYvEkhRk165dP//88/MCCBnEUfxQM0Ii8vCQVolCGvv2kZ0dpaRIaCo+I0xIUCADoXzy8sjCgp4/V6gTBzEyKSk0cCDZ21PhchyqmyG5uRGDJZmSpkzNCDMzMxctWmVhMX7lygjJEn//TQMHMlcYHU18PkVGyhSaMIFmzZLRLntGmJVFlSuTYpVOunQp1/PC1q0lzJ/lzwiJKD2dqlTJvnqrenVG8b+pqVStGkdFRW7epCpV6NMnhrlGS+EcYWpqqp6eXv7PBgYGEss6E9GLFy+Sk5MzMjIyMqRW+Xrx4sX58+dbt26d/1FTU3PLli1N5eUhoBKpWKs6iCgrKys9PT3/o1bv3jozZ377yIROnXDmjM6wYbxdu4qmEcjOztbQ0NDS0vp2Zdo0nQEDYGmZo8gIUtE8fVrLxibLzAyM1aWn83x99QMCsrOyROwG5d+4oTt8uNjFJfviRejrFxw6IyND9ol4dmRm4s4dg3r1Mjj50jhERb8va6ZMGZ2bqx0fD4n/wPxGjfQWL2b+JdapAw8Pvf79+Q8fSn5o8D5/1t+9O/PqVZKuM//RKRJJ/mc7eFCzYUOtSpWyFPjL7tmj26ePpotL5oUL4nJ4qnTNGn6bNnodOmRWrfr9ySkSibKzs+U+drQmTXo1dJ6zc3CDBtlyv7HZs3Vat0b9+ko/aoj0xo8Xzp+fp6kpTk/XYZJJhAvnqxi2trbfJjTnzp2ztraWIXzlyhU9Pb0MKXtg6j1CIsUOUXwjO5saN5YQcV5kRnjjBlWpQp8/s7e2KP37K7oDoFSMjFhM69aRqSnt3y+xXUUzpHPnyMNDFYqVpUzNCPO5eFHmioaFBb1+zVxb/lEKqXUgfv9d7klY2TPCtm1p3z7m5hQgf14oPfSvLDNnDvXvX+gKoxkhUXJ8zmsNm5d75M8HOQsCIKKAgG+HEMtu9QlHR8fr16/n/3z9+nVHR0cZwjVq1MgPqykR08on+Yco/vxToU46Ojh8GEuWyMpsTIRJk7B0KSpWVNbGL6Sl4eRJ9OrFvEd+Hpnly1kNl5CADh1w9Chu3kSfPqxUsCQiAl5eJTlgOcbVFffuQeq6j5ub3KSjBTExwejR8PWVtK2Vk/MlkyZb3r3DjRv4+WdWnUNC0L493NxSwsO3bdt29+5d1maUPHPmICoKp04p3HHZau0Ij9nWm2fKleSsmExaGmbPxsaNCiXqLgVHOGbMmPXr11+8eDE8PHzdunVjxozJv+7p6RkVFQXgwPjHnJ4AACAASURBVIEDhw4diomJuXDhwrBhw9q2bWtSLG2dmkK0a4czZxTtVKMG/v4b/ftDWu3eoCBkZHBaAOXwYbRsqVCUCvvb49gx/PQTXF1x7hyqVVO8v1KoI2WYo6MDJyf2RXqL4+cHbW2MKl7ANTAQTk7KpLzz90e/fvi6saM4ISEv3dy8WrT4d9Sovg0bzpw0ibUlJYyeHjZuhI8PFJqSxMZixw602DUMHz7gn39kSO7Zg8+fOSoms3gx2rdX9BBiKewRtmvXbvXq1fPmzQOwcuVK76+xRNbW1vl7hyYmJps3b3716pWRkVHz5s0nT57MuQ1hYWHl17nGx8cXvTRhArZvR2YmZJYEKk7nzrhwAUOHIjS0aBRcZibmzkVgIKcFUIKCMHq0QuJsai1lZ8PXF8eO4dAheHgo2JkDcnJw44biqS//wzRvjogIfN3rL4ynJ3bsUEgbn49NmzB4MBYvLlDjiwhr12LdOtZGEmHXLuzdy1oBAEzX0/MBhhOlEv20adMKJewpYby94eCA1asxdy7TLnPnYuxYVKuhgfnzMXMmoqIkxtqmpWHGDOzdy0WijKdPsWsXFJ9tl07S7SFDhgwpFkC/e/eX7BJt2rRp06aN6kbv37//+fPnVaefK6Kj73z+DEAAvGrYsO637Nu1a9e2s7MrJOroCD09+Ptj7FhFR1m5Ei1bYtUqzJhR6PrSpWjenFM/8v49bt5kfggjP4/MgQMK3h4PH6J/f9SqhVu3UKkSCzOV5/p12NvD0LBUBi+XNG8uffXbyQlv3iA5uXg1AxkMGID589G7N65c+Xrp1CloaUGJB0t+/RZnZ9YKAEBXXz8/ODADMBcKceiQQjsFpcv69WjcGAMGgEnhxUePcPIkHj8GAPTti//9D2Fh6NKluOSiRWjXjqMVlIkTMXcuLCwU7sjF1mSpwS5YphyxatUqE5PZP/10W76ouzu5ubEb5e1bqlKFwsOJvgbLPH9OAgHFxrLTJ4VVq+i335iLs4mR2bWLBAIZZ6WLo4rgkd9/p2nTONfKDWUwWIaI0tKoQgXKypLS3KYNMYjLKEJMDPH5dO7c188tWzLKOi89WOaXX2jNGkWtKEpCQkINPT1XPr86n7+/SRPS0CBzczp4UFm9JcWKFeTtTcQgWKZLF/rjjwKfjx2jBg2Kp5a5f58qV+Yog3FwMNWrR4VDYxgGy6gdYVln/XrS12cg99dfDCtRSOT8eapald6//+IIu3VTQbZoJ6cvzpYBDEPIxGLxuIEDG5qZuVpbR7drR40aSU/hLBlVOIZ27ShETm79UqNsOkIiatqUIqQcJqSFC8nXl4XO1q2/5h+8fZuqVSMGD0SS4gjT06lSpeIFFVhy//79rHy3n5hI3bsTn0/VqhVw2mWXvDxydKTgYDmOMDKSatQolpGxWTPau7eIZPv2tGEDF5ZlZZGNDZ0+XeSy2hH+IDA9HJEvd+sW64HmzaMWLYQnT55ev/6Kra3013N23L9PVlbMq6owrLUUEhIy3siIgFdAcxMTFrlQOXcMeXlUsSIlJXGrlTPKrCOcNo1+/11K2/nz5O7OQuenT8TnnzcwcPQzqpzI2JVKdIQ7dlDXrixMYEZ8PHXoQHw+2doyf1ksLSIiqHr1rEaNmvwpvd6HuzsFBBS7eu5cVq1ad27eTPmay2PfPqpfn0URGkksWkS9exe/rHaEPw5WVsyqAFavrkxS6pwcoZFRe13d8Roag93dGWYvZoyvL82ezVB2926meWT+3rp1o4YGASLA2dKShV2cO4aoKPrpJ25VckmZdYQhIdS+vZS2jAwyMGCeUPcbFy9eFEB7LPR7gVdV04hhL4mO0NOTgoMVHV9Bnj0jLy/i88neXpk3WlWTmppqaOjC59saGjadPVvCwlFwsMRFUHrz5k0jHZ1hhoaNzM0vR0ZmZFCNGhIrQirOmzckENDLl8Vbyu45QjWK4u3N7HAEq0MU37h//66mZtXs7A0iUcDTpw/T0tJYqyqKWIw9e9C/PxPZtDTMmsW01lKnatW2Ea3S0upXqVL3wYOVtZML1CcI2dG8Oa5eRV6epDZ9fdSvj6+Hj5mzcePG/uBtROYBkIYwIzc3l51tz5/jyRN06sSuN2Nq1sTFi7h3DwYGaNQIzs549EjFQ7LhzJkzQmFnsdg+LW3ejh0Hi7SKRJg7FytWSIg237p69bzc3B1paQcTElZOn75oEby8OLpZpkzBxImwtmatQO0IywGTJ+P9ewYpyXx88O6dYid9CmBoaKihEQ8QkEeUxigvEUPCw2Fqivr1mcguWABvbzRrxkA0JsZi+PBzQUGW/v6Tjx+fzfLUPcdERKhrELKhYkVYW0vPTa34aUIAXl5e8cgFkA7kgq+trc3ONn9/DBiAAmkHVYm9Pa5fR1QUcnJQrx48PBaNGlVDW9tGR+fPtWtLxAI5GBoa6ujEAQAytbSKehB/f1SuLDk2XENLK/9NJBcQpuXu3IkVK7gw6Px53LypTHVJQB01Wk6oUIFWr2Ygp69PxcpaMWfy5IUCgZOpqeOmTf6slUhgxAiG8XYKpFl6+pQsLYvvvSsKt0uFIhFVrkzSS0mWPmV2aZSIJkygVauktAUHf4lWZI5YTD4+o/QNbHgaVfjaeppb27Zl1K/I0qhIRFZWdJtB4Db3hIe/r1GjCfAZiAeq8fnSkk2WJGKxuHv34draxsbG1mFhpwo2ZWWRlZXU/Nrx8fFNbGx6m5s7GRtf0DI5NjKMA2vy8qhBAzp2TFq7eo/wh6JVK2rcmIGcEoco8klNTc3iNk4mK4tMTJiViWMaI0Nv35KNDW3dqqRpxLVjuHWL7O051Mc9ZdkRHjxIXbpIaUtMJGNjBeqPiEQ0ejQ1a0afP+fl5RFRTAzp6FCHDvK7FnGEZ84wu/VUw759+/rzeAQQ4MHn3yoze4dt27YtHjW6YgX17CmrV15e3osXL/bsyR5oc1lcpSqtWKGsHX/8QTJfcMpu9Qk1LBgxAsOGMZAbNAhTpigzkJaWlgYHCR4KEBqKJk0KZPiQQFZWVkRExM2bVVJSHOXnkUlMRNu2GDcOv/3GoZmcoF4XVQYvL4waBbFYUjIjgQAWFoiJgZOTfEUiEUaOxJMnOH0ahob5z7j69REZCXd3dO6MsDAFrNq5k9mtpxo6deo0VUNju1CYCWQATkx+/RKh+FPi82esWYPwcKldcnNzBw4cf/nyzU+frPbu3cxzjsLPP+PFC/z5J8t15w8fsHw584qVMlDvEZYP+vWDSAT5+XCGD0d2dtmqAhoYiIEDZbSnp6c7Orbs0+fC3Lnz7O1/l+OFU1LQvj0GDsTUqdyayQlqR6gMpqYwM0NMjJRmhkV6RSIMH47nz3HyZJHsPk2aIDISZ86gb1+mJqWk4ORJBeQ5p0KFChcePDjert219u0vaGlh0KBSM0Uey5ahRw/Y20sV8PPbEhZmHRcXnZMzPDBwLqpVQ0QEEhLQujU+fmQzpK8vhg1DnTqsbf6G2hGWD/h81KqFTZvkyWlro1o1bNxYEjYxITkZkZHo3l2GyJkzZ96/75SaukIsDj5/PliWtsxMdO6M5s0VSHdYghAhMlKda1spvLwQESGljUm8jFCIoUPx4QNOnkSFCsXbXVwQEYHgYAaF7AEAe/eiXTsIBIyEVYSdnd2R06d3nzpV8cwZ7N2LshEyU4T8/Nqy78vo6NfZ2W4AiNyePn0FABUqIDgYrVqhWTM8fKjYkNHROHMGc+awNbkQakdYbujWTdayw3eUO0TBMfv2oWNHiY+kb1SsWFFbOxYAkKapKb1mbG4uevSAnV3ZfBAAePQIhoaoXr207SjPeHrKdIRS2wAAubno0wefPyM4WEaFCFdXXLyIw4cZTa5Kd120KPkpWadNw4ULpW1KUebPx6hRUqu8ZGZi4UKcPt1TT28WEGBsPGz06K+HqXg8LFyIRYvQogWOH2c6nliMcePwv//ByIgD69WOsBwxeTKSk5GQIE9OuUMUHBMUJHtdFECrVq0cHEhLy8XCovnmzUslC+XloWdPCAT4+2+JCezLAuHh6nVRZfHyQng4iCS12dpCUxMvXkjumZOD3r2hqYngYOjqyh7FzQ2nTmHfPhTL/F+Ix48RG4u2bZmZXjLMmIEePdChA96+LW1TvvPoEUJDJZ9fIMLBg3BwwIMHuHOn2bVr21at+hQSMm3MmMLvFwMGIDgYI0di5UpGQ+7YAU1NDBjAgfUASqv6hBoWmJujUiVs2IDff5cp5+gIXV34+ytU8EglPH+O58/lPkh4PJ6l5ZZ163LHjpVyzEssxpAh4PPh789pUSiOiYwsYw/Ncki1aqhQAY8fo25dSc3u7oiMlFD7IDMT3bqhcmXs3g1NRs+01q1x8iQ6dICBAf76S7LM339jyBAuagNxS75jadwY796B7clIbvH1xcyZEmq9REdj4kTk5iIwEO7u+dfq15d2ntjNDVHMwmdSU7FgAY4d4/CduOw+VtQUx9MTR44wkGvYEIGBKrdGLkFB6N9f7oMpLQ2nT6NvXym3NBHGjMGHD9i/n+EzrrSIjFTPCDlA4W3CjAx06QIzM+ZeMJ+2bREWhm3bJNcuEwoRFCRnylhqXL8OoRAtWpS2HQAQFYU7dzBuXKGL799j1Ch0746hQxEV9c0LyoNh+My8eejaVdmCWIVRO8LyxNixePIEYrE8uYEDy0Tg6J49ctdFARw5ghYtpFetnzEDd+/i2DG5612ly/PnIGJUp02NbGRtE3p6FnWEKSlo2xY1ayIggMV7krc3QkKwdSsmTCjadPIkbG2lTExLHX19REUhOppF/VHOmToVixbhWx6qrCysXPllWerBA4wcqeAijtzwmQcPsG8fFi9W3vKCqB1heaJdO/D5OHxYjlhEnTpDMjMdK1RYu3p1idgliagoiMVM3tpkbSMuWIAzZ3D8uOxwm7KAOsUoV+RvE0qmQQPEx+PDhy8fP39G+/ZwcsKWLazXzDt2xL592LQJkyYVuu7vj19+YaeyRLCzQ3AwtmzB33+XohUhIUhN/R52FBoKBwdcuoTr1+Hnx7Y2tezwmfHjsWgR94G8yh7sL1X+O5llvuHkJDuRAhGRlZZWOPAEqMPnR0dHK6Q/vx4he/u+MWECLVkiVyoujipVIkllUIn8/MjOjrMScFLgKtPKL7/Q5s2caFItZTmzzDeqV6cXL6S0dehAR44QESUlkbMzVxWQDxwgPp/mzCEiEgqF795lGRvTp0+c6FYlixeThgZdu1byI3t7ex87FurgQGFhREQ3blDz5tSwIadVpC5fpqqFs8/s308NGyqQYEidWeZHpV8/LJUSWZlPenq6gUiUv1fViej06dONGzcuEdMKIBTiwAH8+69cwX370LWrpFj3bduwbh0iImBhoQoDOSciAr6+pW3Ej0L+QQkbGwlNl6tX/2f58iZZWd4rVqBjR47SNqN3b4jFGDAAPB4mT07ZvDmvSxddY2NOdKuSefNw+TK8vPDmTQmfdszKyjp1KtfEBK6umDgR+/Zh9myMH89pbNHX8Bl68eKAu/u9qKh2R4547t+vkvglFn667PAfnBGmpRGPJ6cMu7Wu7l4gErDh8x8+fKiQfm5mhGFh5OHBRNDZmc6eLXb10CGqWpUePVLWDAZwMkN6+5ZMTUksVl6TyikXM8JNm2j4cAnXTx0/3trQ8CjQi8/fITUtKXuCgojH2wbYAo319V05168qbGyoWjXmVa+VJCcnR1vbCqgA1KhZc65AQD4+9PmzysZLTV1pZ/ebpuYJoKW2dviFCwr1Vtcj/DGpUAEWFli3TpbMyVu3tjk6buXz/+zWrW6pbPcHBjI5rvzsGWJj0bJl4auhoRg/HmfOcJI5qWQID4eXV5k931j+kLZNGLJr17K0tK7AerE4WP6JWoXp3j2LaBnwCIjOzDReXYpb7Apx8yY+f0a7diUz2m+//Zab2x7wAlY/f+7/77/w80PFiiobz9DwOJ+/TijsAMzJzT2xb58qBlE7wvJHmzY4cUKWQN26dc/fuRPQo0fHu3dLyqgCpKXh1Cn06iVXcPdu9OtXeJ3jn3/w669f9tzLD+oUo9xib4/UVMTGFr1e66efzujqAjilqVm7QQPOx83KygL4QP4JNrMP36JyyjjGxrh0CRcvKluTjxkpKSmAOQBAB6BatVQ+or2jY7CGhhAINTCo16SJSsZgOV0tG/wHl0aJ6OZN4vFIfq2k6Gji8xnIFYKDpdGdO6l7dyaCtWtTfiiP37JlzlZWbezs7pqY0MWLSo2uIJwsFdatW0r16hSnXCyNElGPHrRnT9GLOTk5PkOGNK5efVjXrikpKaoYt1KlekBLoD9gs2tXuiqGUBV79hCfT7t3q3qcly9f8ngWQDXAzsbGRdXDEVFycvKI7t1dbG0XTJkiUnAFWF2P8EdGT4/++ouBnIGB9FKnkuHAEbZpQ4cOyZW6epVq1SIiunbtWlcTk1zgMeBhaanU0IqjvGP48IFMTEpsg0ZZyosjXLuWxowphXEPHKDatddNnTp1zJhcDQ2KjCwFG9gzbRppatL9+6oeJykpydraukaNSf6cFvBWBeo9wh+ZRo0QEMBAzsODmRx3vH+PmzfRsaNcwaAgDB4MAC+fPnVPTdUCagNZQqHKLeSa8HB4eJTl1G/lEln5ZVTJzp2YO3fCkiVLNm3S6t0brVqhVLYXWLJqFVxd4eoa9+TJ9evXxfJTb7DExMSkbt26Q4e29vNT0Qgljfr2LZcMHcosdczUqXjwgEEqGu7Yswc9e8rI/Z+PUIiDB9GvHxAZ6bV48V4NjV083iwDAyemuZjKEOoNQlXw0094/x4lvEkXG4uoKHTr9iXn9969cHODiwtevixRM5QiPHwrUfs6daa4utauWDE9PV11QzVpgsxMXL6suhFKDrUjLJcMG4bcXFy5Ik+ubVtoamLHjhIwKScn59SpU1FbtzKJFz13Dg0sk2uvGYX+/c1nzz729Gny8uWOW7Zs3r+/BEzlFnXRCVXA58PNTX79QW4JCEDv3tDX/37l4kXUq4effmJZOLYU4POXZmVdBSLF4p7p6Yu5TkVWhDFjsGGDSkcoIdSOsFyiqYkaNRjU6QXQtGkJJGHKzs5u07DhP717+z1/PmXnTjnSRK+XBBx96gBdXTx8iCFDqlevPtnXt//AgZplO612cT59wqtXaNiwtO34EWnenFFFeg4JCJBQffD6dZibo379slLZTC4E5Adi6/J4ebm5Kh1r+HCcO4d371Q6CADk5ubGxsaqbrFX7QjLK50749w5BnJjxuDmTVUbc+XKFZe4uP+lp+8Riy+dOJGXlydV9O5dsZuHS9T67IOhSqQjLCtERqJZszJeFaO80rx5iW4TXroEIri4FL3O5+POHRChXj2Uiy3sFl26OAE9gAtE80eOVOlYhoYYMACbN6t0EERfv+5ibT22cWMPe/ukpCRVDKF2hOWVyZPx4QOSk+XJ9e8PImbVm9hjbGz8RkMDQAaQy+NJntjll6lu2/Z27T6z21wzacdlFZXSQr1BqDqcnfH8OT5/LqHhdu7Er79KbtLXx8OHSE5GyScrZEHC69czgV5AGI+n26ULZLyVcsGECdi2TbXT5cUTJhyMizuWkDDm+fOta9eqYgi1Iyyv2NjAyIjZ6qijI/78U6XGNGrUyNbJqbG2tpu5+UI/P17xJCuhoahXDw8eICZmftLEAYN+kH88ddEJ1aGpiSZNSigWIyMDwcGyioaZmCAmBk+fllj+Flbk5ODkyeTHj4cCA4AoPl8jLg6zZql0TDs7NG6MvXtVOERubm5+9J2+SJR74gSePOF8iB/kefTfxNUVhw4xkBs+HFevqtqYFbm5UUFBd+Lju/XtW6ghNha9e2PqVPz9Nw4cSNY0u3wZ3bqp2pySID0djx5xWx9UTSFKbJvw4EF4eqJKFVky1asjOhrh4ejZsyRMUoBPn3DwIIYMQZUqmDfPoVq1lTo6p4C5OjpUty5272b2mGDPhAlYv16F+qfPmtWNzx9dqdKyqlV/7dABrVujbVuEhoKIqyHUjrAcM3Ik7t9nIDdqFHJypBd544KHD/H8uWbXroUuCoXw80PDhnBwQEwM2rQBsG8fOnQo++UF5SMUCg8ceNawYea3kqRqOKd5c9X+235j504JYTLFqVcPZ87g2LGixQtLh9evsXUrunSBjQ0CAuDhgQcPEB29+c4dg6VLw4cN26avrzNhAsRijB0rucgtR3h7Iztbha8srU+dOj1u3K9nzlx69sxy6VI8f46RI7FsGerUgZ8fODkiovqj/SrkP5tZ5huamnT8OAM5e3tilq2fZWaZceNo4cJCVyIjqX596tSpSGU5N7cvBczKCOwyrXz48MHWtqmBQd8KFRpGRl7m3CrVUV4yy+STnU0VKlBammpHefGCTE0pJ+fLR6FQmCm5QuYXgoOJz2dSbZMbIi5e7NSkSXcPj1u3bhER3btHK1aQuzsJBDR4MB04IPULOniQ6talIUPI25vq1CFO//Te3t6hoaHfPq5fT717c6i+ADduUJUqkstbREfT4MFkYkI+PtIqWKpTrP0ncHCgzp0ZyC1ZQkZGTBSycYRpaVS58pMLF6aOGLF09uxPL1+Sjw9ZWtKuXUUEX70igeD7E6cswM4xzJmzlM8PBAh41bhxB86tUh3lyxESkaenpEJdnDJ3Lk2Z8v2jXEdIRNu3E5/PLM2hcnz69Kmxmdkr4D7Q0MBAWK0a1a1Lvr505QqjtH49etCkSSQQUK9e1K8fh4YVcYSpqVS5Mr15w+EIREQkFpOnJ+3YIUvm/XtasIBMTalzZzp7tkg5NHWKtf8EPXsyiyaYMgVpabh9WyVG7NmT4+rar3//dtu3W6xY0a92bQB48ABDhhQRDAxEnz7Q1laJFSVJYiKJxfn3Dl8s5myjQk1xvLxUu00oFiMgAEOHKtZr+HAsX45x43DwoGrM+srLly8bEdUA6gHVeLyEvXvx8CFWrECzZozS+m3ciL17MWAAcnLw9Ck2blSRnYaGGDQIf/3Ftd6gIGRkyPnzVKmChQvx9i1698aUKbC3h58fMjMVG0hJh82O2NjYmTNn/vbbb4ckZWfOyso6dOjQ5MmTx4wZ4+/vn5eXJ02PekaYlEQ8Hr16xUDU2pr695crxWZG2KjRtWXL5lasSAABbiYmOVImfQ4OdLnMrCPm5uYO6tjRSSBoVrNmTEwMw15iMW3ZQiYm8SYmzmZmg83NG128GKFSO7ml3M0IT58mLy/V6nd2LnSFyYwwn/HjSUODJkzY2KVLr5CQEFWYl5mZ2bhChWPAXg2NZnZ2YhbVn3ftIkdHqlWLdu8mCwu6dIkTw4rMCIno6VMSCCgjgxP1RESUkUFWVgonPo+MpN69qXJl8vH5JyiocbVq98+dk9upFGaEmZmZbm5uqamp7u7uU6dO3bp1axGBf/75x8/Pr2rVqk5OTqtWrfrll19K3sjygokJBAJmWY569cKZM9xbcPUqUlLM+vW7oKERD1wHyMREW9Kk79YtpKejWTPuTWDH3sBA2wsXbn386P/8+bRik1eJJCTg55+xfTv+/dc8Pv7KP//4PnsW7uXlqWpT/8u4ueHGDRUeU2MYJiORDRtgYeG7YcPZ0NAu3brN2LVrN6emAYDe7t2HLSyu/vbbo0mTjl66JOFgklyGDIGlJVxcsHw5Nm/GgAFITOTcTgC1asHFhdNzFEuXonlzeHgo1svDAwcO5MfJzxg8+PS7d3WYpKxl6auVYMeOHU2aNMn/OSQkpGbNmkVecwpOAW/fvq2hoSHtBU09IySiPn2+1DOSQ2Ii8XjStpS/ofCMcMgQWrOGiMJatWpnYdG/bdsnT55IFJw6lebMUUCxqlmzdOluHo+AbMDVxkau/KFDZG5Ovr6kZJWq0qXczQiJyMWFIlQz605OJmNjSk4udJH5jJCIdHRsgFSAgLP16rXg2L6ICDI3p6dPldXz+jWZmpK7O23cSHPmUKtWJBQqqbL4jJCITp2i+vWVVPyV589JIKDYWGV0NDIzI0A0e7ZcyVKYEV6+fLlly5b5P7ds2fL58+cJCQkFBQrmJUlOTjYwMNBRh6hLZ9w4vHjBIPmTQAALC6xcyeXYSUkIDcXQoXjzptPdu6cfPNhz5oydnV1xQbEY+/ejf38uB1eSnqama3i85draPTQ0hsrMFpqailGjMGMGDh/GihXQ0ioxG9UAqsy1tncvvL1RqRJ7DcbGRkD+Lv3lmjWtOLILAPD6Nfr2xc6dUL4GvJUVFi9GWhoWLcLEidDSwsKFHFhYjHbtIBJx9MeaMgVTp6JqVWV0tOnefVClSglf3Y0MSiFJYnx8fJ06dfJ/rlChgp6eXlxcnIWFRXHJrKysSZMmzZkzhy9lW/jdu3eRkZE9CxxwnTlzpoODgyrMLrM4O0NTU3/nztyBA+U4Q+0OHTRCQrL++EOGTHZ2toaGhhazh73W1q28jh1z9fS0Z8ygESPydHSk7VFHRGhUrqxlY5Ot6B62itA4f95q7tzQY8dOxcfPFwiajhmTExwsat++uOTVq/yRI3W8vERXr+YaGCi8B1/WyMrK0tDQKG0rFKNpU43NmzUnT87hXPPff+suWpSXmSkqePFbnCETDUePbm7XbmhmZjbgeu1awOfPmdzEgmVl6XbvLpw8Wejlxc3/3ODBOgcO8PT1xYsW5W3fruvhkVu/vqhLF9b6RCJRTk5OZjHbfvtNc906DWdnpf5YGhcvat+9m7Vjh5K/+4I//rjcsycYeIRScIQ6Ojq5X3OiE1FeXp6urm5xsdzc3J49ezZo0GDatGnSVJmYmFhZWfUtkMqkZs2aErX92Dg6Ys8erREj5P01587l7dypm5YGU1MZUkwdIRHf31/s76/78SP/6FHxgwca0r/5gwd5gwahjPxpeOfP8379VXzsWNWmTXunpRkaGlLlyjo9e4rPUZb3NAAAIABJREFUny94z+TlYdky3rZtvM2bqXNnPlAmjFcSabdbWaZ1a4wYwdfQ0OV2Ln7vHhIT+d7eWhoahfSKRCI+n8/wW2ratOnnzw8BpKfD1pbv5oZ795SukEDEGzYM9etrTp3K5QN62za+qyv/2TP+yJG0Z49O9+7ixo1ha8tOGZ/P19bWLv4tjRiB33/nx8frWluztVMo5M+cSWvX6hobs1XxnZYtWzJ6p1FmBZYdEyZMGD16dP7PsbGxPB7vc7HDkrm5uV27du3Zs6eMkFFS7xF+Ze1aMjBgJlq5Mvn6ymhXYI/w9GlyciIiGj+eZsyQIZidTSYm9PYtMwtVTWQkmZlReHj+p+97Zrt2ka0tJSbmf7p3jxo2pB49vl34QSiPe4RE5OREUVEc65w8mebOlXD9w4cPDx8+ZKHw/XvS16cWym8ULlpEzZpRdrbSioqxejXVqkVt2hARbdhAP/1EjHdDi+Dp6Xnw4EGJTZMn08yZrE0kWreOWrdWon8hyu6B+n/++cfS0jL/hly1alXrr7/zlStXHjx4QERCobBfv34dOnTIlvevoHaE+WRlEY9Hd+4wEO3Xj2xtZapi7Ai7daNt2ygujipVovfvZQgePkytWjFSqXKuXCEzM/rnn28XCjmGadOoeXNxds66dWRqSlu2lIKBqqacOkIfH1q1ikuFeXlkYSEhDGVY9+42fL4jn9/EyoqF2sePSVubevRQwrKjR8nSkt69U0KFdEQicnOjqlW/pHcaMoR+/VVRHTk5OXVNTCryeKY83qyJE4sLPHtGlSuzPUeRlERmZsT4OJNcyq4jFIvFffv2rV279s8//2xmZhb19U3P29t73rx5RHTgwAEA9evXb/yVN1IyFqgd4TeqVaMRIxjI3blDPJ6MpFVMHWFsLAkElJ5OU6bQpEmyZXv0oO3bGdimaq5eJTOzInlKCjkGoTCzdedjlmOaNaNnz0raupKhnDrCgwcZpghkypEjEo4n5uTkWPH5eQABnXm8PXv2sNAcHk4aGjR5MiuzYmLIzIyio1l1Zsa9e1SxIllbU3Y2paeTgwP9/bdCChYvXjyGx+sEHAKqa2hIlOncmbZtY2Xe6NEkybmypuw6QiISi8U3btw4ceJEcoHI5bdv3yYmJhJRWlra88JI+03UjvAbv/5K1aoxEzU0pGXLpDUydYTz59OECfTxI1WuLPvtNSWFjI3p0ydmtqmO6GgyN6cTJ4pcLugYDhwgW9PUBLP6ovV/lqxxJUc5dYQfPpCxsfIx/9/p0oX8/YteTEtLq8nniwECBvN4W7duZaf88GHi82nFCgW7ffxItrbEyvsqxuLFZGaWf+qJnjwhMzPRtWtxcXEiJjnbiHx9fWcDnYBjgDWfL1Hm9GmqX58UPv1/6xZZWHD7sCjTjpAr1I7wGw8fyp7pFaBTJ6pXT1ojI0eYl0eWlhQTQzNn0tixsmX//pt69mRglUq5c4csLOjYsSKX09LSjh8//vLly0+faOBAcnCgmzeJXr6kKlWKu8wfg3LqCInI3p5u3+ZGVXw8Vaok+WbpXqOGN9AfaMvj5cTFsR7Cz4/4fAoKYtwhL49ataJZs1iPqAB5eeTgQIaGFBdHRK+2bXPW1Oxkaupco8bz58/l9k5KSqquo1MVqA2s4fOlJYuqX58uXFDQMC8vYvvyIY179+4lJSXJFVM7wh8HAwP64w8GcuHhxOeTlCgkRo7w0CHy8qJPn0ggoJcvZcu2bElHjjCwSnU8ekSWlrR3b5HLcXFx1as3MjaeXLGip4lJ0MiRBXY1Ll0iCwt6/LiELS0Byq8jHDWK/Py4UfW//0nfRxAILrdosWPHDrGNDdnbKzPKnDnE59Pp08ykx46l9u25nPPK5vZtMjCgIUOIaMLAgWcAAi4Ao5mVkMjKyqpfv/7qVauobVvS1i646f6NjRsV3Cvdt48aNuT2G5g1a5lA0PHs2ddyJaU6wsTExAsXLhw8eDA4OPjy5csZXKaQ4wy1IyxIy5ZFsyZKRVdXWuZ8Ro6wdWvat4/mz5e70x4bS5UqUVYWM6tUwZMnVK0aBQYWb1m5ch2fvwMgIL1qVbeizf7+VKdO0aQj5Z/y6wiDgqhXL25U1asnJePm2rWkqSlMTs7MzKT4eNLRYRFLUpBBg0hLi0EU286dVLeu5EpDqmPKFNLTo+joUT17XgEIiAZ+6dSJYe8vmWWEQmrRgnR06MCBIgJpaVS5MrM0yESUmUnW1t9iubnC3LwhIPr9d/lLvkUdYXJy8tq1a52cnIqcYdfW1m7VqlVQUJDcSM6SpIQdYcDff3ds3Hh0nz4JCQklNihzAgJIW5uZqJeXNJ8p3xE+fUpmZvThAwkEJCWb2jdWrVLySaIcr16RtbW0xZYpU7bxeP8DCHjn4NBSogS1bStt6lxOKb+O8N07MjVVfNupGP/+S7VrS9KTm0uGhjRy5PcUa8HBxOMVf8QrRKtWpKsr0x/kLz/Iu5W4JzubqlQhe/u7d+44WVhMMDJqqKFx8+pVhr2/p1jLySE3N9LTKx50M2WK7HNVBZg/n0lJAEUxN28IpK1YoYgjzMrKWrZsmZGRkZGRUZ8+fdatW3fy5MmoqKjLly+HhIQsWbKkffv2WlpaVlZWQUFBbJKgq4CSdISXL1/uXKlSHBDM4/Vo3rxkBlUIkYg0NCSuUhTj4EHS1JTYIt8RTp5Ms2fT0qX56yqycXJitE/w+vXr1UuX7pZZaURhXr6kGjUkesGMDPL1pSpVsmrX7igQeFSp8tOVK5Luf6GQOnakceM4M6kMUH4dIRHZ2hKrA36FGDmSli+X1DB3LmlrU1paoVyjo0eTtrbs00FyadhQerzY69dUpQqdOaOMfvZERpKWFu3alZKScuXKlc/t29PatQy7Fso1mpFBjRuToWGRMy4vX34JLZfDmzckEDCePDIlLY2srY9WqOB49uwjucLfHWFAQEC9evUCAwNlJJxNTExctWqVmZnZ47KxfVKSjnCjn98OHi+/0pCzpWXJDKoodnaM60Rra9O+fcUvy3GEmZlkakr375OFBT2S8+/14AFVrSp/zT8+Pr6hhUUAjzfbwGBY167yLWfC27dka0t/Sgj+jIz88i3l76DHxcXJeqtLSSEHB9q0iRurygDl2hH+8gtt3qyUhsxMKfVjU1NJV5emTqXiSbfr1CFWZwq/kZdHVlZkYVGsJHV6Ojk5Mfc9KqFHD6pQ4cvuxcOHZGpKDEJLqHjS7c+fqX79L2npC9xQP//M4Dxur160ZInClstEKKSuXWnECMrNzc1isDfz3REmJSUxDJ9NT09nnp1dpZSkI4y5eNFDQ+MSsJrPH96tW8kMqijTppFAwEy0aVOSNK+V4wh37KDOnWnVKibVrmfPpunT5Ruyf//+/+nqfnnDMDZmFvkqk/fvqXbt4oFD+RPBqlXp6NHvF+U7hufPycKCGJQ0KxeUa0e4YwcNHKiUht27qWNHSQ2jRpGeXv7/XlFHmJxMenrUt68y42ZkkEBQOFhbLKbevWnYMGXUckB6OhkY0NChXz6OGsXoppVYfSIhgWrVImtr+uWXbxsKZ8+Sg4PMBe3ISLKy4rSMIRHR+PHUvj3l5amPT3DLp0/k5BQxbNj4fv1WV6yY+e+/JTGo4rx7RzwexcczEN26lXR1i1+W4wibNKHgYLK0pLt3ZasXi8nGhm7dkm/I9WvXftbRyQEeAe76+mRoSO3a0YYNcuNRJZOQQPb2xRe/ikwEv8HIMYSHk7l5KeziqIBy7QifPWN8WFYKrVqRhLxgsbGko0Pz5+d/klCG6dw54vOVzAqRn4DNy0s8e/z4xtWqdbWyetu4sUryqCnIh02bBgI1NDQczcw+3LtHgv+zd95xTV3vH3/uhbA3JOwhW0ABUYYIKoITR1Va95ZqVay2itZBq9VStRWrVnFVpLYUW1dVUFs37jpRWyfiVhAtIDP5/P4IICMkNyEB/H37fvmH3Jx77gkk93PPOc/zecy42ElILMOE7GzY2cHLC337VsXItWqFP/+sp5fycnh747ffGjL+uixbBk/PirVopQlhbm7uhg0b4itp+CiVSCMJYWEhOnR463ewZAmGD1f5RRXF2Fiyg2Jtysqgpoa0tFqHpQnhxYuws8Py5VzCok+c4Bx8/tlnK21t29rYdPXxybx6Ff/+i19/xahREAjQqhVmzUJGBteg6hcv0KoVvvii+rGqiWCdNEKAuzBs2AA3t2bgC9BQ3mkhBGBrCw6pbpIRb1lJkJ4BA6CnVzUpkVyPcPZsqKs3sDTgP/9AQz1ltJqWiOgoUf/AwIb0piy6t2u3ighEa4nCvb3xxRdc4lYkCyGAf/6BpSXat0fnznj9GsCaNah3BW31aqW7L/7+O2xscL8yY4KjEMqoRwggLCzs6tWrDbD/fscpK6OBA8nJiZYvrzgyfjzt3UuPHzfpsOolJIS2b+fQTl2d3N251bavZNUqGj+evvmGZs+W2XbrVho2jEOfK1bQ9u2TL1w49+DB/osXPb28SF+fBgygH36gJ09o3TpiWZo4kSwtadQo+vVX+vffervKy6OuXal3b5o/v+rY8ePk7U1379LVq9SnD5c3WQ9jx1LPnvTBBxwKP/6HCmnfvuzXX2+XlChS5WfzZhoyhGrXNr12jfbupc8+Ix0daScvXkze3hQcTEKhtGZScXWlLkHbegqLGaJgorMXLinclRJ5lpXViYiIwoieZ2fTjBl04gSdPKlgd66ulJZGd+6Qjg6FhdGLFyNGUEYG3b1bp2VeHi1Y8Pa+qgzOn6fRo+m338hO3tKQ0nUyLy9vEIfdoKZC5TNCoRCDBqFPn9ox9JMnN69q69VIS4OaGjjt9sbHQ0+v1rF6Z4SvXsHYGF9/jchImR2XloLPx927str99BNsbTlFi2VlITERUVEwNERwMOLjq8IHr1279sWMGVtWry5r166666l4ImhtLXkiWIUcMyShEJGRmDKFa/tmyTs9I7xz5461pn4Yo26vpXPy5Em5zhUK4eCACxfqvBAaCkPD6ntU9VaoLyqCgQG6dZN32G+5fn23rr4PqacQvU8Ghqyh4l0pj/mxsQEM8xNRV6K54tvpxo0ICpKeqlLvjFBMRgYsLDB5Mtzdcf/+p5/i00/rtJk0iWNI9s2bN4Ocnf34/N7BwVIy2u/dqx0BACUujQ4bNkyZQe1KReVCOGECwsIkJISLc+maR8RQXXg8SRshdSksBMPg7Nnqx+oVwhUrMGgQWrSoJxW5Br//juBgWY3S0mBhgWvXOAy0GgUF2L4dY8fC3BweHrc//LCNgcF2ohkMM9nNrarVsWNwdpawI1gX+YTh1St4eDQ0crFJeaeFMLxd0G5iQHSRyMfaXq5z//yzomhYDQ4fhq5uraD/eoUQwNmzYNkKl065EAqxbBn4/O3de7BMT22ax9BnRFFGRpgyRQnxYQ1k3bp1/SIifnNzg5ERSkshFKJNG+mOUDKEEMDu3bC0xJw5sLZ+lH6ldh7FtWsQCDgWOYvq1Ok8EYhW8njLJee+4PVreHlh5crax5UghKNHj46KigoMDHR1dR04cGBUVFQU19j8RkK1Qjh7Ntq1Q303Dk5xwU2Dtze6duXW1MkJ779f/UC9QujpiVmzEBHBpddBg2RlHJw6BYEADYk5Egpx5szyTp0SicQRpy46Oqg2Edy9m1M3cgvD7duwsOCWrdkceaeFsE2LlmlEILpCZKdpKitgqwbDhtVxaBOJ4OUFY+NaIYvShBDA119DTY1TGFgVd+4gJAQdO4oXSUJD+/J4tubm3hcuXIuNhYkJWBaBgThyRI4uVUJpKYyNK2oB/vknnJzqJHy8RbYQAvjxR9jaYvlymJvHhp6sYWbVtStWr5Y9pPJypKV1MTTMJQLRXqI5mpoIC8P06UhORmameK2utBRdumD6dAkdKEEIjxw5crAOsofeiKhQCJcuhYcHcnLqbXD4MFq2VILRhQpYtAgGBtyazpoFE5PqByQL4eHD8PCAqysXD6SCAhgbS33UE6ch1nS1fv78OVfTopwcXLiAnTuxYsUnbdr0ISohOkVkz7L3Bs2ab/zd0vbb/z1wCg8fyjSFuX///vfff3/s2DFO163i8GFxLTuuhRubE++0EKYPGdqKmF5k4EHsRlMPd+cyDw/ExcnOsheXQKn9mUxJgYlJ3TQbGUIIoGNHGBtLEYm3iERYswZ8Pr79Vsp2xYEDCAwEy8LEBNOmNakl4aVLUFOreGTo3l3CDKsSTkII4Pvv4eSELVtKjfjRdmkV98tff4Wnp4yv540biIuDgwP8/H4ZNqyjicmXOjq+5uY3zp7F8eNISMDw4fDwgJYWPDxOOA5f55kgPHq81jONSCTas2fPYw5+CP+lT0hi82bY2b0NPKqPtm3rRl02BzIyLhFNMTNrt7lupZla5OaCYaq7S0sWwvffx8iREgq4SWLLFqnbiA8ewN4eP/xQdaC8vDyqS5dwgcCbz99WZQpaXo7sbBw/juRkLFqEDz9Ejx7w8ICuLoyN4e2N3r0xZcof0dH+LBtA1JXIU5v/lcHiu5FT0K8fAgJgbQ0NDVhaom1b9OmDjz7CggXYvBn79yMzE3l5t27d8hEIVqmpDTQy+qZmoKlM8tes6aGtHWhm5t+ihbia9LvCOyyEu3fDxubE1p9Gj560M3UbIiMRFXXtSnlcHFq0gFgR68twWbu2jk9pSQlsbWFqWneDQ7YQlpXB1BTt6/jT1uLJE0RGwt+fox3O69eYNg0mJlBTQ2AgOJudKZuFC6Gujps3cf06LCzqc0DlKoQAvvwSXl44cOApzzK6bVd/B4dxurqvduyQ3DgvD4mJCA6GlRViYqoKjvz999/bt29/WjczLD8/Mfp8XIuk0okxCA6Gnh4cHREZibg47N49acCAiQYGTznM32oI4ccff7y72orShg0bqlflOHDgQGDziPetQiVCuG0brKw4xUknJXFegmxUNDXtiXYRnWVZp6syaz1bW1e34pcghOIa9B4eHJPKu3WrW+mhkpwctGxZy0ojLS3tY0NDEBUStdHRQUgI7O2hqQkbGwQHY8gQzJqF77/Hnj3IzKy1Ur1jxw5TjUAB2fHJV1+/7evXNS8nFOLRI5w9i127sGoV5s7FyJHo2hUeHjA0XMrj/UQEojKiAH19xMVh5Ur8/DMOHcKVK3j8WMoT6zeLFq1iGPEaXZ+gIC6/lmbCuyqEGRkQCGrEurx5gy5dMGYMRCKhEMePIyYGFhYVilgVqFVWVnby5Elv75t799bsMCEBlpZISKh7KdlCCODGDaip4fPP622wZQsEAixcqIBX7Z49CAwEw8DcHF9/jbFjP1ZXt+Xx7OLi6i0jqmTatoW5OYRCjB2LWbMkNpFDCAF8+imCgiZFfDKDGCFREsNMGTasRoPycuzZg6goGBlh0CCkpXHMmPr5Z7RoUS1zuqQEFy5g40ZMmYIOHfwYBkRCiWumNakhhHZ2dosrS7YKhUIi+rnaLW3r1q0yo0wbGeUL4YEDMDfnWvespARWVsjMVOYAGkx+fj7LthRvnDHM9EWLFsk4YeJEWFhU/SRBCL/8EuHh4PYM9PQpjIzqsYkoKEBAQN2Kazu3b5/L44kFydfQEEeP4t49cFt1XL9+o5rad0QgKrex4Vh6o4KtGzfO1NYG0WWinnZ2iIvDpEmIikLHjvD0hLk51NRgYgI3NwQHo29fjBuHOXOwfDmSk9/389tFBKJcIj9tbU6rZM2Dd1II//4bFhZIT699vKAAISH46KOqHYqyMuzfj9GjYWqKjh3x3XfFLVt2MjL6kGW7xcZWU5FXr2BqCnNzifFunIQQwJo1kFiN79kzvPceWreWbx+xDg8fYtAgaGo+IvInKiR6ybK2+Y0TV1NQAD09DByIp0/B50uM65ZPCEUijBs3zdLqKBGI8ojCW7WqeCkzE59+CktLBAVh7Vq5UnWPHgWfL83bw9/e/hFRea1AUkn8J4TVOH0aAgHk2jFauLBJyytIRkPDniid6ArDuF+U+W3MzgbDVNkK1xZCcdS5iwvHQrUrVtRjNlBaiu7dMWJE7V3VnJyisLCOenrjTUw68/nf1RMSVh+rVz9XU/PV0Zlvatr7iy/ki+UrLy+fOHiwr7l5mJfXzfrW1F68wI0bOH4c27dj7VosXIipUzF06IeWlh5E84lCiBZoa8PODomJjVdMrgG8e0L4/DlcXLBpk+RXxVpYZXZRSUkJdu9G585pDDOTCERCc/M2b01lY2Ph4CBxOgjuQgigd2/o6tZYpdizB9bWiIlRlmVMamoqwwwSP9eybLDsBR5lceQIWBY//YS4ONSavQGQVwgBCIW/+vm1I9pL9B7RyN59KpZAxb8u2aWqanPjBgQCSF/1PHniRJCT0zUOxv//CWElV6/C3FzuuuS5uTAx4eZp1nicPn3a3t6fx+vC5++V3RqAmRmmTRP/t7YQ7t4NNzf4+soMCxKJRDdu3PDxeVj3wR0iEUaOlJCOefEiHB0RE1NWVHTmzJn7Mjdla7JqlTgz7PXOnTtl6309KCYMh//8s6OR0WKikQzz5eTJOHUKnTujZUukpjbP+Kkq3jEhLCxEQIAMR+ZXr9C2rcSQwaNHjxobjycC0RsLi8rkiYcPYWRU33QQcgmhUJhjYRHF49lraPQLDBRFR8PRUb4naVkUFhbyeNZE3xJ9SdSp9gKvSpk2DTwe/vkHVlY4d67Wi3ILIdCpbfBUYuYRfUk0hGEwZAj27+eW8lybZ8/g6IikJNktFYka/d8Vwtu3YW2NX35R5Nzx47FggRLGoGwePgTLcit1OWwY7O3F/60thD16wNGxdpJqHcrLyzt06GtiEsWyHefNW1b75SlT0LFj7WC4LVvA53NLeJRAfDzc3CSVEZAThYXhj4MHPxkzJqlnT2FVaNC+ffD1RUBA/daKTc+7JIRlZejeHePHy26Zk1PXWg+ASCTq1280n9+Bz2+dnFxZVnDUKLi7S6l2L4cQAu1tbDYSFRBNJFri4aF082gADx8+HDRoxOjR48eM+ZdlGzeL1c2toqJnnUA5BYQwzNf/IBGInhFZM0YhIVi6VBEH3zdvEBCAuDhOjf8TQs48egRHR8WTAq9dg6VlczDPrUuHDvD05NDu6lUwjHh1voYQZmXByAgeHjKf2o4dO2ZiMlG8BiUQ+JZXXyRcuBA+PjViz0pLERMDV1fFtldFInz6KTw88OiRAmfXpqHCUFoKP7+3VQ9FIqSkwNUV4eG1nAqaCe+MEIpEGDMGvXpxDTZ5+hTu7vj667qv/Pvvv28/0pcvw8wMVlZSchTkEsIWGhoFRCA6RBRqYoIjRzhubytGfDxYthEfvHNzoaWF8ePRqlUtiyYFhDAjI6OFukY8w/iqqX+37FtxfJONjXhVCAcPcvpTC4Xo3x+DBnFdeVFQCJ2dncMrIaJWrVpV/ejl5fX/UAjz8uDjgwaaiXfrBpmJCk3BP/+AYSTZStXFwED89aohhOLUdA4VujMyMoyNx4ljMPl877f1vBIT4eSEJ0/eNn3+HGFh6NlTMQNrkQgxMWjbVlqGp1woQRhu3ICZWfUUFJSVISkJDg4ID1dg80OlvDNCOH8+2raVz3NFrIU1bWJq060bvL3x3XdSmsglhJHt248nOkwUxDDf9OiB8HAYGiI8HAkJSq80K2bTJqipYfJkVfQtiZ07wbL44gu4uVXXeAWEEEB2dvbmzZszaz4BZ2YiLg5+fjAzw/DhSE2V9mefPh2hoXLMOxQRwuDgYHtZcL1+o9BQISwsRHBwffHBcpCejlatmufmUJs2aMslmrJPH7i7o7oQlpTA2BhOTlwW8UUika3tYG3tHnx+wLJllQYSO3fC0rKGQpw/DwcHxMYqtjFQXo5RoxAaitppEg1AOcKwciXatq09FSgpQWIiLCwQFaV4xQRl824I4YYNcHRUZOs9OxuOjvXaGh06BHt7WFpKN0eUSwjLysomjBwZ4uKytGoy+uIFUlMRHQ1razg6Ijoau3dXn4AWFRXt2LEjqwEyuWcP1NW5mP4qiaFDoaWFzp2r/2IVE0LpiB2FIyNhaIjISCQmVsTwiUSin39OnTp13syZGe7uePlSjj7/q0dYLw8ePPhixoyv5817GRaGkSOVI2CtWzdP263Ll8EwHDJ6jx8Hy6Ko6K0Q/vgjjI1RleEuFbFx4JUrD/Kq5nmHD9dO/EpKgkAg3cBQCiUlGDAAPXoo2eFVOcIgEqFnz7p7VACQn4/4eJiZITq6xsy4iXgHhHDfPlhY4O+/FTz9/v2Kba1aCIXw84O/vxS3FDFyCaEMMjMRH/92mhgfn7VrlzWP149lHVl24bx5Cnd84QK0tODtrdgjpfzY28PNDRYWVQ+hqhDCKl6+RGoqhg+HsTH8/NCx4xJd3XFEe1i209at8sUi/SeEkiksLPSztf2FYTYwTKiBgdJC3tetQ+/eyulK2Xh4ICSEQzttbXz33VshbN0aFhYcd2i6dsWqVdV+vnwZAgEOHKj4sbgY48fD07PG7FAeCgvRrRv69lX+VqzShOHRI1hY1Lsv+OIFYmNhaorYWOTlnThxYsHMmWnyhigrg+YuhOfPg8+XkJwnFzdvwsYGW7fWOLhlC7y8YGMj08FMmUJYRV4etm3DuHFLtbTE7rgviRw0NBrS5e3b0NeHk1OjWLJlZ4PHQ6tWVVV3VCqEVRQXIz0dRkahROKt2D8+/DBWrh7kFkLuqZqlpaVcbSFVjAJCeObkyYkGBmKb5h7m5s+fP1fOUN68gbm5wjd6lXL0KBiGQ4BlWBh8fSuE8No1aGlhwwYu/e/ciZYtq60L3roFK6u3M7+HDxEQgIEDFfbYz89HWBiGDlXAo0M2yhSGbdvg5iYtbjArC6NGpRsZddHW3kkUZWS0scbjQ2PQrIXwzp16CyjLS2YmLC3ffgiLiuDggA4dZE4HoSIhrOQDf38YeIZbAAAgAElEQVRxFdznRC7q6g3s7dkz8PmwsJBdZUUJbNoEloWhodh7snGEUMzAgdFqailE5bq609avly8aQ24h3LJlS1BQ0N69e8vrnyQVFBSsX7++RYsW/zSPO758QvjoET7//LmlpT+P94zoDpGPpaVQiSsLc+dyLK/V+Dg6okcPWY127oS6elFhYWlpKfr3h6EhF8OUkhK4uiI9HWdOnx7Tu/cngwc/sbfH+vUVLx8/DmtrxMUpvP788iUCAjBhgkqWgJ4/f56cnHyJo5EQF0aMwMSJ0pt81KPHaSIQPSGKtLfHpUuNmYnffIXwxQu4usqqWiIPFy/C3Lzwt992796dMWkSOneGlRWXhXVVCeGtW+jVK9vR0YbH68qyrgyTzjBckwDqp6gILi7Q01MkD0FuevaEhoY4v74xhTA3N7dPn1EODv4xMXPlvWMfO3bs2bNnMpu9FcJXr17NmDFDU1PT0tJy4sSJSUlJp06dunnz5vXr148dO7Zq1aohQ4bo6emZmZmtWrWqmVQo5CSEIhEOHED//jA1xeTJyMxM+/33zp6ePdq2PafcAPfHj2FiIt9ObmOxZw9YlkPxLw2N0k2bSl++BI/HMZJ2yRL07o3Hjx+3EwjOEu0g6mxuXvGaOFRk/36Fh/30KVq3Rqx8ayFcycrK8rG0XKSt3cPUdE2dEgQKkp8PZ2dIvUEkfPXVAm1tEP3Asp+4uKBlSxgYICwMc+dizx6lhcPWQzMVwjdvEBRU136vgRQcPRqgpjZHW3sIw3xqacmp7o8qhLCwEHFxMDVFXBxKSkpKSo4cOfLs2TOsXw+WrVUHTQGEQrRrB01N1SfsCIUwM4OGBs6fb0whVJiZH3441MTkUdUeTf3U3iN88ODBvHnz7CQVuvf29l65cuVrJUbsNRgZQpiTg2XL4OICX1+sW1ezLqRqGDlSYiZTc8DKqo4Bf10CA4VBQcJZs6CtLXvn4fXr3APnow1+zon5Iq1z57lqauIF5yCBoOT1a4weDR8fDlXq6+X+fbi4qEoFAXyzaFEyw4CohCiwRQul9XviBCwtpUQ8lpaWTh050s/WdnTfvhXfppcvsW8f5s1DeDgMDODmhpEjsXYtrlyROFksaMAnuVkJ4eXLl30tLR01NZfa2GD4cKXHXe/Zs2eujo74Y+nHskJu2e7KFEKRCFu3wsYGo0ZJ/kgcPgwNDbRp0/B1//feg7p6Qx47uXH9OlgWTk7vhBC24fNBJPzsM5kt6w2WuX379o4dO9atW7dp06a9e/dymV02PvUK4cmTGDECxsYYNapRy5lcvAhbW5Vm1CpMSgrU1GTs08WHh/cg6ke0q1OnGi+8eYPLl/Hrr/jqK4wZg5AQmJtDVzfb1OeSaxQ+++zht98GGBllEqUzTKizM3x9MWxYQ+I7796Fo2OtMhVKJmnTpjgNDRDdJOpqaqrMqXxsLN57T8Fzy8tx5QoSEzFqFNzcYGCA8HDMm4e9e/Hy5YMHDwKdnUMFgiAXl0cKGQo0KyF0MzDYS/SSqDfRqnqcPxvCqVOnBujqgugVUWt9fY5nKU0IL11CaCj8/GQUoL57F8bGsLLiWK5dCtHRYFmsX4+ysrIXDe6tXpYt+5FIn8hCQ2NfUwR8yaaoCCkp6NmzLcvmEJX/9JPMM/5/RY3m52PtWvj4wNUV337bKDvIdejcGRx+702CmRlGjqz31bNnz7Ygukl0jsiSqHzJEkyYgC5dYGcHLS20bIl+/TBjBtatw+HDePjw4kVYWFSkxRcXF/u2aOGnrt6ax5uorS3Fv4oL167B1hYbNzakD9mU5ucP1dX1MTAIcnS8MmYMrKw4eRdyoaQEPj7KeQO5udizB3PnoksXGBhMMTRMF5fqZpipffpAflVrLkJ4+zamTfMUm0kTbSZ6v18/pV/k9OnTdgzjSeRGZKepyfEsJQhhXh5iYsDnIyGB0wZwYSHc3KCjg7/+atB1gblzwTB7GMaBZVuamXmWqKAuyooVKwKJwogWEtmwrNL7bxDnzyMmBgIBgoORmPjnzp1trK2vcagf984LoZu6+qQRI3DlCj76CCYmGDgQf/zRlLntu3bB37/Jri6VdevA40la8rx7Fz//PNvff1Tljakd0dkPPsCqVdi/H3fvSvwyd+yIxESgpAR//31o8eJp2toV5xobN2QL+fx5WFpycbNpMF98gYED3wrD6dNo1Qq9eskuyMyFzEzw+UrOoy8vHxUScoEIROeJxujpQVcXBgbw9ET37hg7Fp9/jo0bkZ6Oa9fqamRWVlZrgcBGTS3IyamQ2yLh/NmzW5uaRrRpw6XGt2xKSrB2LUJDoacnrrbXQ1t7AdERIk+inQEBSjevnzVr1ueVH2lnluX4sWyQEAqFWLcOFhaYNEnuB/GICKir47ffFLx0JSzrRJRHBKLJc+fObWBvdYmIiFhK1ItoD5F9M/Eae/gQ8fFwdYW7O+LicO9e1Sv/K3mE/zJMR4b5m8/HggVQyte1gQiFcHHBiRNNPQ7JGBpiyhQgNxdpafjiC/TqBT4fNjbo3//mjBnWROlEKUQWDCPh5MJCXL6M7duxZMmdiA9P6XYR2TtAUxPOzueCggZraYHoDZG3ublI/gcRsSHksWPg81Ff8Wplcu8ezMxw/36NGVJpKRYtgpkZ1wd56SxfjuBg5UaEnj51qo1AMMvIqI1AUBHqlZeHq1exdy/WrUNcHEaPrqg8rKdXSyP78PlbiEA0n2hEQACOHKn4l5GBu3dr/Hv6FMCmTZsCGCaT6Hsi76oAKFls3bo1JSWlxqGMDAwfDmtrMAy0tREYiG+/Fa/R5+XlfdCzZ7CT0/o1azBnDszNUevchnD1aqaVVRDRTaI0ohY8Hsfz5BJCoVC4ZePGT8eO/ePgQZw+jbZtERLCtaBpXT7+GCwro9qGLFjWlqiMCESLJ0yQEcOsACkpKS5EQUQTiezkzADJyspKTk6+rCzfwTdvkJqKyEiYmiI6GseP150C/a8IIYhmEi1qVvUfVq7kEJeiQm7dujWka9dIf//9VSv4xcU4dQorVlz1HnqLcakIU5w9Gzt2VHlXZ2dnGxA5ErUg4rMszp1DSgq+/BKjRyMkBJaW0NKCpyf69CmfOj2Ov/qvr/bj9u2qTf5po0e35fNbCwTbuJnRVCEUCnv0GCoQhBgattbX3yG9wJjS6NsXixZB4lLh7dsID4evb93SM/IhEiE8HDILI8vJs2fPDhw4wCn/9dUrZGZi3z4kJmLkyBCWfUoEolNE4xgGPF7FP3V1MEztf0QriLZUTqd8iGBkBFtbtG6Nzp0xeDBmzcKaNdi/Hw8fVl3Qi8/vwzCRLOsjEGDBAvj4QEMDLIsWLTBhAmTW0jt7Fh4eiIpq6G5ZaSmGDwfLws9v2ezZHgYG/lZW5/l8pKVxOVsuIVw8e/ZkPb1DRBFaWn+amSEpqaHLUevXQ01N4VDS8nJoajoQ+RONJ/Lz8PhH6bk5+/btMyTSITInsuK84Azg4sWLfnz+ch6vi6npL8nJcl300qVLP/7444MHDwBAKMTx44iOrvDrSUqSkrz7vyKEyQxjzTDZXl44c6aph1NJfj7MzKpPzxuZIGfnU0RZREH6+g9GjkS7dtDRQZs2mDgRP/zgp31tzmwJuThz5swZWXnjiyB67OaGqCjMmoX163H4MLKzq77hixahf38J1y0uLlYgL3P//v2GhlOIQFTA5/vJe7oipKXBxUXsUiN5z0wkwsaNEAgwa1aDLN0ePIC5Oc6fV7yHhlBSgn37MG4c+Hz4+Y328opkmB1E7Rhm6eLFMs/euHFjEMP8TbSeyN/QEMuXY/Jk9O+PDh3g7g4LC+jrg8cTqybU1G5paXWv/Pz0ILqjr49u3fDTT/JlgBYVYcaMGrnw8rJ+PXR0YGSE3btrHD95EgIBl7+FXELYsWXLquoTM6TswMvF0aPQ1KwKJc3NzY2PX75ixfd1PU+Ki3HpElJSEBeHDz6Atze0taGm5ke0l2iFmtpqHq+8dWsl14bq2rXrEoWWRmeMG/dHpZlAd1NTzJiBBQuwfDk2bEBqKvbvx8mTuHoVWVl4+bL6xyZ5w4aupqbfamj4mphkTpgAe3t4e2P5cnAI4fxfEUIPe/sLFy7gxx9hZYUJE5pLGt/MmRIrhTYCJYWF7Sutcz7j8dI//BAZGdXv5rGx0NWVcGLGzz+3I8ojyiayIqpvm/3pU5iZKS17Nz8f48btYJj5RCAqt7DwVU6/UiguhotLVQVmacEjT59i0CA4O4PDZnu9pKSgZUslG6RKp7AQ27dj2DCYmCA4GN9+W/VM9uWCBV3btVtfZXcgi9mffNLa2DisdeuH1aZ9EsjNxalTfy9Y4McwIBIRtWLZBnluZGTA1RVDh8r3db55E25uUFPDxImS1XfXLlhby9y4lUsIJ4WEbGKYQqJJenrJmzbJMVrpZGXBxAQWFiUPHzo6+qurr9fQSPDw6HT+PFJTEReHqCh4eEBLC46OiIxEbCwSE3H8OPLzsWTJKjOzMCOjSVpa7fv2LdDXh709F8ngypeff96dqAfRSiJriXso9bBswoTvGAZEhxlmRKtW+PprzJ2LqVMxZgyiohARgcBAeHrCzg7GxmAY6OrCwgIuLmHa2uI9zzSiz7y95Vp5bu5CmJubWzHPbQA1okZfvaqI1EpMbPpCEA8fwtS0RhG+RqCkBElJcHUN19XdwrIHiPwsLOpGUQuF0NKqk+546BAsLL5jGBsiB6KvW7Wq7yIjRyqhXAeAp08RFwc+Hz16FDo4dDA1nWhmFr5ggZIS26WwaBH69q36SXYU5d69sLdv0Hrd0KGNUTWnsBC7d2P4cBgZITgYCQkSCzaqNGo00t/fmWWdWbZvcHBD+3rzBrGxsLKSWRQaAITCitSBli1leAmuWwcnJ+lROXIIYXLyK0vLj7p37+Dq+tWcOQpsjUujqAienkJNze7GfYg2E6UwTKSv75NRoxAfj507cfNmvcmHd+7cOXHiRF5eSf/+CAqCsTFMTRW3Ma+BUAhX169YVovIjGU3cg+N/uGHQj5/YKtWfubmXVq3zuZSUzs/H48f459/Bvn7nyQC0TeamivkTNRuvkIoEokmTZpkYmJib2/v7+9fd7dDJBL169fPxsaGiE5IjTqRkEd48SICAxESIntDQtUMGqTaPLjq5OcjIQHW1ggPx4kTubm5cZ98Mm3UqGvXrklsPnEijI0rfxCJEB8PCwu4usLBoaioqDwhoZ7oUvz1FywtG1oF6dIlREdX1GMQfzlLS0szMjJu377doH658OABzMyqp/lzEobCQsTGVjxjKcCrV7C3x969ipxbh4sXL36/atXbcIPcXCQlITKyIuMwIUH6XV7V6RMvXrzIVWLaUkYGXFwQFSUtAjMlBfr60NXlWhNUVqVDrkK4ciUcHFRtL/ymR6/eRFHEdCPGUo3H5Z5eHaEQn34KJyeYmUFPD8ePN3hAfn7Q10dERA9vb64J9WVliI1VuBA3gLt373by9PQzN/8gIqJITovx5iuE6enptra2OTk5AAYNGjRlypS6bTZt2nTlyhVjY2O5hRCAUIjvv4dAgJkzG8NNpj7OnYODg8ptJF+8QFwczMwQGck9uKOkBDwe1qwBXr9Gv34IDsayZWBZ3LhRYbptZIQPP6x7YkgIFF7+EYlw8CAiI2Fpibi4pknyRFQUPv+8+gE5hOHMGXh7o0cPRXZ/Dx2CjU3D7dP27trVydR0I1GosXH6xIkIC4OhIaKikJLCMaewueQRcic/HxMnws5OgmlKVhZatQLLYswYOXYiRSKMHYteveqbT3ESwrlz0bIlGrymJZ3iYgQF7elDTIU5DsMo9rC4YQMEAlhYQFe3YWG5gYHQ1cX16zA07B4ezkkInz9H587o1UuxQtwNp/kK4YgRI2bOnCn+//Hjx01MTOpraWJioogQinn6FMOHw96+UYLx66F9+4ZnBdVLVhZiYmBkhOHDFXgsHTYMwSbX4e6OSZPw/Dk0NfHJJ6gqzLtkCTQ0aplu//wzfH0VMb8uLkZSEjw94eODxMRGqRojkYMH4ehYa7tOPmEoLcVXX8HMDN9++8P337/fseOCmTO5PqJ+8knDY4mHBQdfJwJRJtEIa2vs3Cnv7uO7J4RiDh6EvX3Z+PHdWrWy4/HaOznljRgBloWHBxTQhrIyREZizBiJeygyhFAoxEcfoW3bhhvBSCcvDx06oFu3jACWBZGQqA3RvzwevL2xeLG8yzIHD8LMDBYWMDBQ1AWya1doaeHmTWzciIEDOVmsnT8Pe3uFC3ErheYrhKGhoesqy2Y+efKEiOr7csoUws2bN3fv3v18JZcuXar9no8cgYcHIiMbYnqpONu2oUMH5Xd76xZiYmBmhpgYSI9iqJ/in357RoKMD5MAwN8ftrbi42/rERoYICamqv2bN3BwwNGj8l3l+XPEx8PGBuHh2L27SbduS0vRsmXdEj+KCMOtWztbtx6kpnabKF5Tc8b48ZzOKi5G69aKmNcIhTh1CrGxcHefpaeXxDAg+kFdfY6kpRSZvKtCCOD16/l2drOIiogSiKayLLZsUby3wkIEBEBSaVxpQlhaiiFD0KlTQ7cHZPH0KXx8MHkyhEJ09fFxZll7hhnSrRu2bUPXrjAwAMPA0hIjRtSofS2VzEzY2oLPh0CAmBg5ten998Hj4eJFAOjaFdu2yRZCcSHuJpyHAOAshOp1zbVVTX5+vra2tvj/urq6RPT69Wt9fX0FusrKyjpz5sy4ceOqjnzzzTft2rV726JNGzp+XGPVKo127Uo/+qh06lTS0GjQ6OUiPFx3xoziI0eEfn5K6Y+9fFlj9Wr1Q4fKxo4tvXABRkZERPn58vUiFGouXMj77bdFIXt/2+N3e80arfPnC0+dEuXnE1FxcbGamhqPx9OYMkVz2bL8zz8ndXUiio/X8PNT8/UtknK1Bw8e6OnpGRsbE9Hdu+zatbyUFF737uXbt5e6u4uIqKBA4bfeUDRWrFCztS3q3LnWr6tAgTGZmx9v23bslStORFNLSsIOHcrn9idg167V6dv3jZ+fSJKpfW2Ki9WPHVPfu1d93z6YmZX36lWemDjZ0XHKkCErbt1ycHVdOWsWx+tWR5H329QwRUXsxYtq58/vf/FiJZEW0ftEnbS0FvbrJ/eHv3q3KSk6ERGlpqZlY8ZUPy6+dZaXl9c+oahIe+RIYpii1FRimIZcWjrZ2Wzfvtp9+pR/8UVJYSH9euxYXl4ej8fT09PLJ6Ju3YiIvXNHY/Vqtf372eRkaGmJfHzKhg0rGzyY1NVLS0vnzZ798O7dSTNmtG/fvqpbOzs6dIgZOFD7wQN2507cuyfasKGo8k4sDa0pU3i//fZm3z6hkxOTlaV7+nThli3liYlFRUWSP4ElJVozZ6qdOFG0d6/IzU11vyguiEQiTU1NHo8no111VQwNDV27dm2VkG7dupVTbI+cdO/efWVlecysrCyGYeqL1G/Q0mgtHj7E8OFwdkZ6enFx8Y4dO9LT05VZjLA+vvkGcpYOriI7O7t3UJCfjc2siRNFx44hMhL29khIaFBaUE4OunZFp0549uzFCxixr4U8TXz8cdXrb2eEQiF0dTFjBoCHD2UkRgqFwvDw9wWC3nx+4IQJq6KiYGGB2NhmYfUDAE+egM+XuICs2Azp9507Bxoa3iBayLKxzs5y/EWWLZNhN/PyJVJTMXw4jI0RHIz4eNy4ocAI66O5zQjv3r177NgxCcvLd+4gKQkxMQgOhq4uPDwQHT2ne/cwhjlM9AHDDO3dWymXh7V1rf0LyTPC/HyEh2PIEFVb6ouNduUIsyspQXIyOnaEjg5YFjY23fX0Yoi2ENmx7Nk6lZmKitC/f0Vp+8BAyDZmmDULLIs9eyp+XLsWgwdDSj3CR48QGIjevRs7Zr4eFFkatbOzW1yZaVtSUkJE27ZtU/rIYmNjhw0bJv7/L7/84unpWV9LZQqhmN27yxwcOhoZzdXVjTEyej88XI5zFePVK5iYKLaA2T809DjDiIimqKml2tggKamhX8K//kKLFpg9u+pGfM2o/XM1y+pN3gohgM8+g7Y2ysqGDpW4hvSWEydOmJiMF+cCqqv7rF8vLC5u0EiVzODBmDNH4isKC8OPmzYNjYiInzWr+IMP0K4d17gJoRCdO+cvWHDy5Mka0ZVZWfjuO7GzNvr1ww8/qGgLqlkJ4cZVqzqamcWYmLRr0eLlzZv4/XfMm4eICBgawtkZQ4dixQqcPl19r3phXFyIi8u0SZOU9hT7118QCJCRUXVAghA+e4Y2bTBliqr3us6ehaVlA+JZMjIwaFDrSluD74jGjRlTt5VIhFmzKnyinJykBhgsXAiWreH827mzOKFFshCeOAErq6bdFKxF8xXC27dv6+vrJycnnzx50tXVdc2aNeLjAwYM+Pnnn8X/T09PT01N1dPTW7hwYWpqal1LBTFyCyHwV0bG2MoSZV0EgpeNkIA/daocmXevX+PwYXzzDYYODeDxyolA9CvR4nru43KweTMEghqGHVu3gmW92SvVg6prCGF5ObS1H46ea2MjI/x206Zj6uoTiEAk5PN9yhux5LpsjhyBvX19kzYlCINIhCVLYGXFMTj9n8OHfVh2spGRn0CQsWkTPv8cvr7g8zFmDHbtUnXqfbMSQn87u2IiEK1kmPU6OujWDfPmYc8eVceh1Gb/flhYVM28awvh/ftwc8P8+aoexZ9/wtycow2cNBw0NTOJyoiiiNJ0dVEZkFGL1auhoQFvb5ibl/Tu/Ymzc9Do0dNqTM2/+66iqlMVT57AyEgc7SZBCMWFuNPTG/oGlErzFUIAhw4d6tWrV0hISEJCQlUW6pw5c/6otPCYNm1aVDWePHkisR8FhDArK6uzmVm52B5aV1cVZUpqc+9eqZnZrStXJF/r9WscP46EBAwfXuEV4eGB4cORkLBwyJAx+vo/EbXj8zMVTcEBgJISfPQR3N1rLLLl50NLCx991L49vLzeHq4hhIBo2vQ3rO6PSfUK28uXYhsDobPze3z+AD4/ZOHCxsqe5EJZGby88Ouv9b2uNGFIT4e5OSp3FqQwffToA0Qg+psoSlsbn36K48dVnmZTSbMSwvYODi+IQPS5ltZWOc0nlUxyMhwcxBYENYTw778r9iNUzPbtsLBQjlf/3r17nXR0bNXUokJDMXIk1NVhZgZJdkJ79kBDA2ZmXzPMl0QlGhrxs2Z9WfHali1gWSxbVuOElSsxYoT4vzWEsLgYY8eidWsll1tRBs1aCJWFAkIIIOHLL1sLBD4CQaq9PSZMUPU96O7du220tT/Q1/e1tr527RpevaqhfAYGCA5GTEyFRVI1sRSJRIlr104YPbruQr8cPHqE9u3x3nu188zExXWBmzfBMG9Dz2oJ4Y8/lJYwmiJJdvhCIZKSYGmJ6OiKJ/h//vmnvkeWJmP5ckhdAFemMNy+DS8vREdD6tPVZ5Mn/8YwIDpHNKxbN6VdnRvNSAhfvDhkb99aTy9UIOgXGipvqrjyiY+Hlxfy8t4Kodg/QtWFMYHvv4eVleIlK2RQWIgxY8DjwdS07ns5fx4sO4DoGhGIbnl6dgeAHTvAsqhbwqlDhypfiLdC+OAB/P0xaFBTJm3Xj4JC6OPjM3To0KFDhw4ePJiIQkJChtZEZQNWBMWE8C35+ejZE127KlDglDtTR4zYTwSiM0SjtLVhaIhOnfDJJ9i6FTduSFlMT96woaOZWayhoa+1tVzlyB88eDBpyJDh3bufXLMGNjaIi6t9ldRUsGyVAbGvL9q1q3iluhAWFsLODo/7TYSeXq3HhaNH4e2NTp2grIIqKuHpU/D50oNNlCwM+fkYMADt20sJE3r69GmAs3NPc/M2trY3lBoIw4XmIoSvX8PPD/PmlZeXN5chAfj44/KOHbf99NO6xMTX+/aBz5eylqAsFiyAs7Pq07sKCxEdDR4PJia15NDExJOoD9EfRAMZJnHzyENQU5NgCvjoEUxNxQ95z58/9/LyiouLEx09CmtrxMc3vatlPSgihK6urpqyUNmAFaGhQgigtBSjRsHfX5mutDWJGTbsz8piqiM6duT+iWnv5CQ2tk9mmGUhIZg1C/Hx+PprJCYiMRGpqUhNxcGDOHgQ587h/Hncvo07d5CTE+rquo9hLhL5s+yTujvvRUXQ0UF0dNWBixfBMBV75tWFcO5cDBsGFBaCx6vKwn30CMOHQxy709wZMQKxsdKbKP8uLLass7HB6dNSWj19+rQxgpbr0CxUp7AQoaGN4b8qL0LhB+bmM9XVl6mr+6upveFoIaYoIhGmToWPDxpvGaWgAKNGVSyW/vCD+Ji1dTuiJUQziZYFqvcuZ9R/1RkuoZzUt99i7FgAL1688LW29mSYHhoaH2tro1EKp127dm3btm0KFIhuvgn1SkQJQghAJML8+XByUlpJhZrcunXL19p6hEDga2kpV0XK8BYtsohAtERdfV2/fli8GLGxmDkT0dEYPx5RUYiKQng4wsPh5wc/Pzg5wdGxxMSkPVPhyTRHXz+97t51587g82sda9kSHTsC1YQwO1tcuRYAMGYMDA1LioQJCRAIEBsrxamx2XDiBGxsZA5UVcKwaxcEAq7ul41I0wthcTHCwzF2bDOcQxQVFQULBOLvznR9/SNHjqjiKjdv3ly6NGHfvvQxYxAQ0HDfPfnJz8fQoVBXF39Ed+/ezbLmDOPpypqVMuo7mb4mJnB2hr8/Tp6sdlZAAA4cAJCSkrJES0tchsmvzp1EFSQl/WxqGqajEy8Q+Fy/fl2uc/8TQjn54QeYmyvDlVYCRUVFmZmZhdyzzUQixMefFwh8+fz2fH6f4GC5rGY7enj8zjDniNoJBLU37bZtA8uizqbjkSNgGGRnvxXC99/H22rHr1+L1HgLTZc3lUWP3JSXw8cHlUHIUlChMFy/DldXxMTUWyOgKds3IF0AACAASURBVGhiISwrQ9+++OCDRgsOkguRSORtYZFDVEoUYWZ2UwVPxtevX+fz/YiSeLxhzs5fKbdSoHwUFIhDaf7Q13dlmFlEvkS/ubo+foz33oOaGgwNK4xs798H7t8Hny/+JB8/fnywsXFPoh+IgpycGmGkXl5diF4SgWjvlCnyxc8rXwivXr26v67vbZOiTCEEsG9fc/AEQkEBoqIQGCiOYeNeGq2KR48exYwYMapXrzO1VufEi6KjR0s8y8EBPXtWCGFGBmxtKzIO/vkHPXvid4MhpXrGzSc9SAarVqFzZy4NVSsMeXno2ROdOzd2PkD9NKUQCoUYMgSRkarOSW8If6Sn+9vb+1harlLQkVMGcXHxRKnijFt7+wBVXEI+8vO7a2ufJwLRFSIfMzPx4VevMHIkeDxoakJHBwfCvy4fP6HqpM+nTzfQ1PSwsjqn+nLoN2+Cz3+f6CwRGGZFly7L5TIrbpAQuri4LF26tNbB9PR0HR2dxsg34IyShRDA+fOwtkal8U0TcPcuWrfGmDFQRUZ6RARMTesTsz17wLJ4/LiouLi0XTukpKCgAHFxMDdHfDxKnuRCXR2rVyt/VErn+XMIBBxrvqhcGIRCzJ6NFi0qfBqbmiYTQpEI0dEIC2s6z3WuyFWYV15+/PFndfWPiUREpzp06Keiq8hFB1fXHeLZFlFgixbVXyopwSefQEsLF5g2PbQPb9z4dj2bk+l2w3j5ErGxMDXFlCm3XF078PltAgPfGzLkja2tHAEKigthYWEhwzBHjx4FcObMmbmVQbS5ublE1PhxblJQvhACuHcPLVvK70qrDI4ehaUl4uNV0rlY6E6dktLEzOyxoWG0o+MYP79/N2+GpSWGD68WRTRggBQdbUaMHYvp0zm2bSRh2L0bAkFziC9qMiGcORMBASoNz1YWKhXC2bOFfP50Kys/f/9eWVlZKrqKXFy9etVOU7Mly9ppaFyQaOF9+3ahoaWxQTnDwNgY+/dj165duroGvr5tVfSLKi1FYiLMzTF8uITymocPw8sLXbqAy3ah4kL44MEDIhLXdE1OTnaqXAUuKytjGOYc56J3jYBKhBDAy5cIDcWAAY369Cr2ZfjzT5V0XlICXV0MHy6lyZMnT4jsiL4n+orIvX37qvSKSp4+hbq6xMzcZsS5c7C05O5z2HjCcPkyHB0RE9O022NNI4RxcWjVqolKUMqN6oRw40Y4OqouPr1B1OfeBQBffikuRLNqFQwNQfSQyJ2oNVEfbW1HpY/k4EF4eiI8XFpqVlkZEhJgaoqYGBnxcIoLodhQPC0tDcCCBQt0K+1Xrl27RkQPFa37owpUJYQAiosxaBDat2+M3Z3iYowaBR8fRSq+cqRbNxjL2OGbN28e0YhKn0K/XbskLeX16gUzs+Y7KRQK4e8PeTxKGlUYcnMREYFu3bZt2DBp0KBNa9c2fgZFEwjhihVwcWnEFIGGoiIhPHAAFhaqLmivGlq1qu7F2qrVAKIlROK4UXslXufaNfToAXd3cFxzffxYdipXg/YI27Rp4+XltWLFCoFA4OvrO3Xq1IsXL/bo0cPd3V3UnIKeVSiEAEQixMXBwwMqXcF4+LDCl0F1AWRpaWAYyIoF379/P1FLogKiZ0RWlpZvWrTAuHFISalmUZ+dDXX1BtWBUylr1yI4WK64/MYWhvLyX/v0Gciyp4gm6ukt//JL2acolcZ+vz/8AHt71X6DlI0qhPDqVQgEOHZMub02CjduwNa2+ndqzpw5ROFEPYnWMoyVUi7y6BGioyEQICFB7iDrY8fQujU6d5YcFdAgITxz5oyNjQ3LsnFxcUePHhWXD9TV1ZWQlNakqFYIxSQkwNoaf/2lks5PnFC5L0NpKfT1MWiQzIbPn0NTszeRFcNYT5gwFcCdO0hMRFQUjI3h6IjoaKSmoqxTOCwsmmESGHJzYW4ur1FV48+QJkZFnSUC0VOiXr6+jXz1Rn2/P/0EGxtFKsg3KUoXwsePYW/ffJ8eZTB/Pj75pNYxR8cAIi2GMfv22xUN7L6wEPHxFYucChduEts9WlggJqZ2yWQlpE9U5a49fPjwjz/+eNFsQsCraAwhBLB9O/h87Nun5G7Fm4KqzkiJjISRkczFTJEIkZGYP7+216iY8nKcP4/4eISHo5X2rTJG/ac+Px08WMNTUyQSXb9+/QHHakSqYMIEyF+0vfGFcN3KlVN1dXOJ4tXU5unoYPlylUQI10Pjvd9du2BhwTF2t1mhXCF88wYBAVi0SFn9NTotW9ZNO4YyokZFIqSmwt4ekZHKMevOyUFMDKytUd0W57+EeqVy6hQsLNZERbV3cRnWo0dDN0pLSjB+PNzclFtzVQL794NhUFnTQwpLl6JDB5SVSRbC6hQWIq9VyGs967Z+In19hIcjPh5nz5YHB/fh89/n8zvNn1878aYxEPsj5+XJdZJQKMzMzCxoXLNgoVD41Zw5Ea1bfzZ5ctHFi4iKgq0tEhMbJ+9e1UL45s2bN2/e4M8/IRCgOQXWcUeJQigUol+/+hJ33wUuXUKLFhKXfxQQQqFQOHv2Inf30BEjYg4dyg8KQrt2yrcwOXcOAQEIDcWVKwCQm5vL5TP/nxBy5Why8gCWLST6g2F6BwYq3tHjx2jfHv37q9SmLDc39/Y//8DQEAMHymx87hzMzSvc1GQKIQBkZoLHw6+/Pn+OlBSMHw9Ly2MsO1Fcj9DQ0PfixfJGm3h8NmlSG0vLzjo6mZJKZEjh9evXLVt24PP7m5u3SUs7oKLhceLMGXTpAjc3JCWpOhBJpUK4KDbWz8zMz8goXlcXR4+q7kLcOX78RK9eo8aP//QZ52BNJQrhlCkID2/O/gGymD27vlqqCghhYuIPenoxRAUsu0ZPb3pKiqo2WIRCrFkDc3OEhW02M2v3xx+yF+f/E0KurF6xYmOlh2dbNTVERGDiRHzzDXbtwvXr0le3ysrK7t+/X1paitOnYWuLhQtVusc2LiqqBcv6Ew1mWaEsA4R//4Wz81uTfU5CCMDfH3Z2Ve8iIyPDyGgcEYjKNDS8vbyEOjrg8xEQgEGD8Nln2LABf/6Je/ck5w5cvnx5/PgZixZ9K+/kLD09fayhoYjoBlFY9bKKHFix4nsebyURiHLc3ELlOlclHDiAtm3h56fS1XLVCeGzZ89C+XwQiYiCDQ1zmsBDszb379/n8wOI/mLZbW3acK14pSwhXL4cXl6K73s1C5yd6zOCUEAIBw6cTnSUCER5np5dlDE+aeTkQEfHl6j4m29kJyyp039wI6xr11GmptY5Oae1tdt16UJTp9Ldu3T3Lp0+TXfv0o0bpKlJjo7k4UGenuToSI6O5OZGenrZ2dn9Q0Ptiouzysp+Zhi3DRuoXz/VjbO8vHz/b7/dEYl4RFFA8s8/jxw5Ukr7SZOoSxcaMEDOy6xcSR060O7d1LcvEQUFBQUGrr5woQfwctasidOns0T09Cndu0d379K9e5SRQcnJdO8ePXtGNjbk6EgtWlT8knR0HowaNTYnZ7GGxrVDh8b88ccv3Efx4P79tgUFDJEb0b95eXK9g+JiYXm5+POvVlYmkutclRARQeHhtH07ffwxmZvT4sUUFNTUY5KDogMHDF+9IiKGyFBDo6ioqKlHRBcuXMjP703URiRqk5W1RCQSsSzbOJfeuZOWLaOTJ8nQsHEuqAL++osYhnx8Gt7Tgwe0eDEdOBChpfV1cTHp6aVERXVveLfSMTUlAwO8ecPpL/6fEHLF3d19dXr6rxs2OLRsOXvCBNLQqPGyUEj379OdO3T7Nt2+TSdP0q1bdO8emZkllJd/+fRpd6LTRF937rxJlSpIROXl5ZqVDzh6RAUFBVIaJyfThQt07pz8l/H3J09PmjZNLIQMw6SlbX38+LGOjo6RkZG4iYUFWVjUvpmXllJW1luBPHeO/vorIzd3EFFEaWlEZuZWuUbRvWfP3jweKxKd1deP6NuX+4k5ObRjx1Bd3Z6amieLi28UFX2elUUODnJdXAUwDA0YQP360ZYtNHgweXvTl19Sq1ZNPSypiES0cyd99ZV9UZGBh8ewR49AxA8MtLGxadpx3blDq1f7lJUtIXqPYe7k5xt+8AH7xRfk4aHyS587R9HRlJZGdnYqv5YK+eUX+uCDBvbx/Dl9+y1t3EhDhtDNm90vXGBSUnaEhgaNHj1UKWOUzowZE+LjO3t7JxO1kNFU1fNTldKYS6OKIBQiK2tyWNhhIhBdIBreCBXJFy2awzAhDDOQZZ309KSUrbh5EwIBrl6tcZDr0iiAEyegocE197V+rly5YmoaTvSS6ISeXph8sck7dz5wdl6zfHlaWhr3DNdr1+DkhM8+Q2lp2alTp/Ly8latgp2dykOX5KOkBImJsLJCVBRu3VJWr8pcGi0tRVISPDzg44OkJPGq919//SXZpqsRKSjA7NkwM8PXX2P//sNhYYOGD4+5c+fx0qUQCDBsmIxfZwOXRu/dg5UVdu9WuIPmgUgEBwcpQb8yl0afPUNsLMzMEBPTlG4Kjx8/fsVheVqGEObk5AwePLiZeOLVpbkLIQDg77//9rG0HMfn+1pYqPweMXIk1NSwZcuhQ4eSk5OlGJeUliIgAGvW1D4uhxACcHeHs7OiY33L5s0/e3h0iogYMnXqPTu76i4WUsnJgaUlTpyQ61oHDtQoFFglDFu3wtwcqjfTl5OCAsTHg89HdLS4GgmA3AZ4lSlHCIuLkZQEZ2cEBze3W/7u3XBwQFQUsrMlvCr+dZqaIiqq3vzGhgjh69do1QorGppc1ww4eRLu7lJelyKEz58jNhZGRoiOhvyVdJWMctIn7t+/T0RN/ohXH++EEAIoKCi4cOGCaiPXhUJ07AgeT1w8UybTp6N/fwnH5RPCtDRoaiItjfMoZfP77xAIuHkMDB5cN9VXOmIn3+oeO9X/KLt3w8JCRSUpG0ZurtiH//7Eie3s7SPMzds5OmZLvNPLoqEfwvz8CouJyEjpBu6Nz4ULCAlBmzayH43+/Rfx8TAzQ3Q06mZCKSyEpaUID8fHHytwavNj6tRq9UglIFEIX7x4K4GVj21NzH9C+L/Ev//CwQH6+uBWSjQ9HXZ2kktjyyeEAJyc4OYmR3sO3L+PwED07Ss1LXDXLri4gPMNq7wcsbFwcalt9lhLGA4fhrm5cpVdeTx8OMnZ+SARiPYzzJShQxXoQy4hzMvL27lz5yWxWc/z55gzB2ZmGDq09np6U5Obi5iYCoMu7pbmOTlv79rV1+4UE0KRCKNGoVev5llyWE6EQlhbSy/uUEsIc3IQF1fvs0UTwlEIGymG6j9USFYW2dlRWRndv08uLjKbP39OY8fS5s1kaqqMqy9dSvfv04EDyuirAjs7OnKE7O3J358uX5bUIi+PJk2ijRtJW5tLhwUF9N57dOECnT1Lrq7SWnbqRL//TmPG0LZtioxctVhbv3F3NyYiImPgTX6+Sq/29OnTzl5el4YNm92586oOHcjdnXJz6cwZ+vFH8vJS6aW5U15O69aRpycR0c2bNHUqqalxPdfUlOLj6eZNMjYmLy+aNYvEcce7du3atGlTeXk5l07KysqWLl01YMCHgwbtuHqVfvlFjgE0X06cID6fWras7/WCgoLs7OyLFy8S0cuX9Pnn5O5OT57QxYuUmEjW1o04VGUhXSdzcnKGDh363x5h8+X0aWhpoU0bjr4kQiEiIvDFF/U2kHtGKBLB1haennKcwpmtW2FmhsTEOi+MGsXdTe3BA/j4IDpacl6zxBlSZiZsbbFhg1yDbQzOnzvnKxB8bGjoy7IXUlMV6IH7jPD7775bx7IgKiXyNzBo+t0eAJUpueJ6OIcOoVUrhIUpYYKanY3oaBgbw9R0OMN0YZghurotpASaVfHxx/N1dGYT/cWyfbZsUbYLY1Px0Uf46qv6Xnz27JmGhg2RLcO4OzlN5fMxfLhyPNJUwX8Wa/Xyy5Yt/g4OwS4uhw8eVMWoGo/UVKipcfGOqSI+Hh07Slu9kVsIAfz4I7S1uRi5KcD16/DwwOjR1RZB9+2DoyO4pd5nZMDSEt99V2+D+oThn39gb4+EBHnHq3Jyc3OPHTv2cvVqeHlxXxmugrsQ/pKSMltLC0T3iTp5eMh7IVXw8OFDB4e25ubvmZv7RkRkOjpi505l9n/5cgHDeFdWIhvftu2+qChERaFbN4SHIzwc/v7w84OfH1xd4egIR0eoqYUSFRCB6NC4cTOUOZqmorwc5uZSImtnzJjBMHOJehHtZhiP5jpLquA/IZTMkydPgvh8cakhb3Pz8nd3RX/xYrCsXNEiZ87AwgLSbbEVEcLyclhYoHVr+c7iTH4+hg6Ftzdu3gRev4adHcfyxT/+CIFAxoafFGG4fx+urtJmz03M4MH46CN5T+IuhGWvXg3T1vYzMmprZ3dOku1y4zNhQizD7CYC0V/OzkOVXja7pKSEZW2JSojAMH1iYvampiI1FenpOHgQBw/i9GmcP4/z5/H337hzB3fuYPDg6TxeAtETA4PRW7f+ouQBNQl//IF27aS8vnDhQoYZT9SLaJuamk2jjUsx/hNCyZw9e3aCqan4ka8by74ICcHUqdiwAefOqbAioNIZPRosi7VruZ/x+jWcnGQ/QSsihADWrSvR1U3/+uszKss/+P578Pm4Gz4eH34os7FIhHnz0KKF7EUz6cLw9Cm8vTF9enOsOoVXryD/nEiOYJnp0zFyZLOqPzpmzCdE+4lAlNm58wequESPHhOIbBnGVV29PReTuIKCgo8+mt22ba+lS1epYjxNwPjxWLZMyutlZWV8vhfD6DOMma5uXDN3Vv9PCCVT9OZNO13dNQyzREsrwtsbx48jIQHR0QgOho4OLC0RGYnYWCQlITOzlgPy9f9j77zDorjet//M7tI7bKF3VCwgxQYiFqyIvSvGFtSoGCtRk4Dlq6ixRaOiYkONYsfYS+wlYkts2LtiAZQOu3u/fywiwrI729Dk/X0uL69ldubMGdide845z3M/N2/+b8qUjevXf8lxZGmahIqhjX37YuRI5bupJ4T5Hz6EcLnjudyeVlZj1DLbf/XqldJQvTvLjz7luUYP/KDYP7WgAH37omFDvHql/LxKhSEzE0FBiIysmuIQKvLXXxAKS+zS2cFWCK9ehUhUpiLzV8H16/e4XD8LiyEikd+FCzoZpHbvjpkzs58+fTpuHMLDv8oHIJ1SXAyhkE0h5WbNmu3cuXP79q+9ysj/CWElzJr1LiBg8Zw5q5YvL3/nLS7G9ev4/Xf88APCw+HsDDMzNGqEoUPx229pmzZV0zfcRjSc4fRr316LV6ECeXmoVg2mpoojmyuyejXbFSX1hPDIkSPDOBzZOLu2qalKLYjF4mbNugqFrQQCv/XrK59cys6Gm1vujgNduyIwEA8fyt/r5UvUr48ePdgun7ERhpwctGqFTp2qsm4ga2bMQLNm7GtWsBJCsRgBAV9hJdnJk9GjR+7ly5ffl6u+qiXu3YNQiKwscV5eXnExGjfG7Nm6OM9XzP79CApis2Np+sQff0Akkluy8Kvg/4RQHvv2wcFBhVTPzEycOIElSxAVNVcoTPy4jO7EM1Cjt5ry7BmsrWFnBxUrJN++DaEQN26w2lk9IUxMTAxnGBDlEnkwjEoj5v3791tYjCECUZ69vX+l+40YgUGDAEiliI+HrS0OHCi/y9WrcHHBtGkqPMizHCEVFKBTJ7Rrp0Z4io6RSNC0KfvCr6yud/58hIVp1CsdkJYGPl+3adqDByMu7lMe4dOnX6vBgu4YOJBlhFjZPMK9e79KVyYAGgphenr6yzIpptu2bZswYUKyWuHaOkU1IbxzByIRzpzJzMwcP358XFxcsSqzXaNHjw0no2Ki80SOesbqdFcTUlNhaAhfXygrq1SOggL4+WHFCrb7qyeEJ0+ebGRg4E/kQ5TIMBJVSgPu2rXLyGiKrIQTl+s3ZYo8g8Pjx+HoWDbB/vhxODggNhYZGVm7du26fPlySgoEAmxRMV5BheCRYkRGokkT6GY0ogFPn0IkYunzovx6Hz2CQKBFd1Nt0aoV5s/XYftPn8LaGu/efZZQv38/nJy+thlinVFYCBsbls8a5RLq9+2DSITz53XWN3XRSAh9fX1/+ukn2evffvuNiAwNDYkoNjZWi13UHBWEMDsbtWohISE3N9fJwGAS0TCGqWFlxf5cmze/MmNsRYxVCOlvqt9YzR6rwvv377u3adPQ2XlRv37g8RAaqkYjo0eje3cV9ldPCCUSSefQ0M4CQYiFxQpjY7i7Y9AglqtqZ8/m83jNLC0HCgShY8cuiY2Fuztq1kRs7MfkpNxceHpWjAp5+RKNG782NPQzMYk1No4wN5+nxjOpSk4rEglGjEBgoKpjct3zxx9wd2dT+0759XboUDaH7NWrVyo9L+qI5GTUqaPbZdrvv8f48UAFZ5kpU9C8+X/CL0Ypu3ejaVOW+1a0WPs6tVB9IczPz2cY5uzZs7IfPTw8OnfuLJFIli1bZmpqqq3azVqBrRBKpejWTRZrvnHjxp4fV7PqcTj3KnPe/Zxjx2SB+O+2bt3a3Ht/gUWFqg06IMjT8yeGOUvUnGhL8+ZqtLBnD1xdFRqVVUDNqFEAQFpa2suXL/HXX7C1RZ06aN0aym679+/D3h7btokvXbr09GNih0SCU6cQHQ2RCMHBuBI6Or9Hf7mHr1ixmsP5lQhEYju7QDX6rIb35uTJqFkTZ8/eT0xM1F2UrMoMH87mkUfJ9W7Zgjp1ZNYD79+/9zQ39+FwHDicxQsWaKubapCdDScnnDypw1O8fftpLFROCCUShIUp9t38r9CvH5YuZbmvXK/R/fvZz01UEeoL4YsXL4jo4cOHAO7cuUNEBw4cAPDhwwciuqlimIZOYSuEcXFo3Fg2qXj+zJkgomKiXCIfonwHB6Ve8adOQSjEiRMlP27fjnj3BDRooOunRCceT0oEoh1E4exWsGU8f/68f//RYWED+PwLbCs5fEQTIfzE3btwd0fdumjQQMG80ps3qFYNSyoPOy8owOk5ZzKM7F3N34WFYd06ZGd/tsPOnTvNzMYSgeh5tWrqDNPVM6H+/vurXG4Ah/OblVW7JUsS1WhB++TloXbtT2U1KkHR9WZmwt6+9DY2PCrqZ4YBUTqRi76+FnuqKhMmoL/8ByGt8dNPiIoqeX3nzp3z58+XzRt59QoODizd7P+15OXBygrp6Wz2LS4ubtSo0Zo1ayq+deAARCJ8HEZ9edQXwtzcXCKSPerOnj1bX18/JycHH4XwqzLgZiWEu3Z9CpDJzISDw3Q9PScOx5HLnTxwIHr2hIEBDA3Ru7fccPtz5yAUfuaaIhbDy1OaGdBC174jgXz+eqJ0ogiG+Z8qq241a4YyTArRRVPTeq/Y5BCUQTtCCODVK/j7IzAQ7u7lja4BALm5aNhQWbp6QQFq1sT27Xl5SE5G+/YwN0f37khJKfFLk0gknToN5PP9nJwCzpxR50FUPSEcNWoK0T4iEGV7e4eq0YJOuH4dAgFu31awi6LrjYoqm2ET2bPnEiIQ5RO5cLla7KZK3LgBgYBVJoza5ORAKCzxqx8zJpbPb83n9wsOjigb8/Xnn7C3/1oqKmgXqVS64tdf+/v5LatWTUHhtlLy8vJq1w7V13eysKg9Z85vFXc4eBB8/mc1Xr4gGq0R+vv7h4WF7dixw83NrW3btrKNqampRJTO7pGhalAuhLdvf4pnevQIFhZwcJAzV5iUBHd3MAy8vbFzZ+nm1FT5tQiWLMF3Le/AxkaHFnsSyWuBoJuhoZeR0QBVTNQKCwuFwiBZfKuFxZQDFWMrFaI1IQSQnY02beDnB6GwXGmcoiK0aYNvv1XWwoQJ6NWr7Ia3b5GQgOBg2NggKgrHjxc3a9ZVIAgWiXwOHWJlN1MO9YRw/vzfDA1nEoHopJdX768o22zJEgQEKIioqvR6z50r99V42qSJH9G3DNOA6Dcer9LyfbpEKkXTpormDLTCnDno3RsACgsLBYJAIikRrK2jzn0+xzd1KkJDv8p0Us1Y8euvUWZm14m+MzD4TWEqvYwdO3aYmPxMFE60y85Ofpj3oUPg8/Hnn1ruqhpoJITnz5+3tbUlInt7+7///lu2cdy4cZ7aqMKqRZQI4fv38PZGYiIAXLpUYk6tYD7zyhW0aAEuF5aWGD/+n9QCW1vs3i1nx9xcCIV4M24WmjfXVc5tmzYwM1MvWt/GpgnRfqJrQmH9lyoWh9amEAIoLESfPqhdG0JhaQVXqRTffIMOHZRNLV+4AJGosrmau3cxdSrs7bcyzGQiEL318FBh9rgU9YSwsLAwPDzS1jagdu1W9es/btHiK7GkBgB07IgJlZpeyr/ewkLUrIkdOz5tCQmBgUHWqVO//vrrmVOn4OcHY+Oq18ING5R8ZTUnPx/29pBVmhKLxXy+L1ExEfT0+uzYcansnhIJWrXClCk67MwXIbJ165tEILpH1JNFsMzevXvNzccShRNts7UNqGy3EycgFOLYMS30MDc3Nzr6x4YNOy5aVNGAXwma5hFKJJKnT5+WbeLWrVt3tRRUvXPnzv79+48cOfLWrVtyd7h58+bIkSP79++/W64QfUSREEokCA8vqZKZkgIeDx+HtkrIzsaYMWILawlx33o2RGqq3L2mTMHIYcW6yjtevRocDutK7Z8RG4saNZ527TqiVau+p0+r3IKWhRCAVIrYWLi5QSSSLcVPmoSgIGUSX1CA2rWhLGMnMXENj7eACESFHE5g+/aYPx9XrrDPL9dCxXaxGLGxsLOTk9f4ZcjIgIsL9u6V+6b86506FeHhJa8lEvj7w9i4/IR2UBCMjFgWvNQKHz7A0VHnq03Ll3+6dADBwcsNDAIEgtCAgCiBALGxn42uX7+Gk9PXWq5SXRbPmfO9vv5TovHGxvNZLMHIHDD09flGRu58/jYFT0cyLWRnXria4gAAIABJREFUDKyIQYPG6uvPJ3pqbh65Zcs2lY79ehPqt2zZIhKJNmzYEBcXZ2NjU3ER6+XLl9bW1lOnTt2wYYNIJNq6dWtlTSkSwkmT0Lw5iouxciW4XIwYwb6Hd+7A0RHHxu+Fry8YBo6OMoeJvXv3hjduPGrYsMLCwvR0WFsj8/hVBaMWNXnwADweJk1S49B581CtGlQcBH6G9oVQxsKFsLWFq+vfzaKreUmVJ2ZNnowOHZS2mpmZ6eZWz8rqez6/+fTpy1NSEBODgACYmyMsDPHxSE1VMmJXTwjFYvGgQWOdnAKaN+8hWyw4dgwODoiOll/sqao5cQJ2dnI/B3Ku984dCAQlXuzFxaheHSYm8gd/wcEwMpK74qsLRo9mMXmuGWIxPD0/pcwfOgQnJzx6lPXs2TMAz5+jUyfUqfNZqvi5cxCJ2HiQ/WuQFBTMs7Do5OMzd+pU9lYYzZs337FjR2IinJ0VLRDJ4u3VniPNz8fhw7C2DiHKJQLR0WrVJi5ejLNn2U6WaSqEu3fvDgkJsba2dnBwkG2Jj49foI0o6sDAwNWrV8ted+jQ4X8VTDGmT5/esWNH2evExMT69etX1lSlQrh9O1xd8fo1Jk0Ch8PedwPAo0dwdS2Tgf7sGfr1g4HBDQMDb4bZSjSSKMjTE8CgQZg+HZg4sWSFQStIJLCzQ6A6mQCLFsHTU9P1fF0JIYBt2woshLf06uR07a9ELq5cga0tSz3Py8s7fvx4uTSY58+RlIRBg+DmBltb9OmDlSvl39vVE8JlyxKNjGKIpAyT0qFDibfq69do2xYNGlRq/1alTJqENm0qPgWUv16pFC1alNSpKiyEhwcsLRXN84aEVI0W/vMPhEKdZ7Jv3IgmTUpeZ2TA2RnHjpVPn0hOhkiEqKhPEcuzZyMo6Ot44tEKGzdC9eys0vSJlSvh4oIHDyrd89QpiESqVWm7fx8JCejeHZaWsrpXU/T1fyb628ys8/ff742ORnAwTE1RsyYiI7FwIU6dqrQsm0ZCuG7dOiJq0aLFgAEDSoVw7dq1IpGITViRAoqKijgczv2PjxDz58+PiIgot094eHip4t67d4/D4VSW0itfCK9dA5+P1FT07g0uF5s3s+/ekydwd8eyZRXeKC7+rnbtVR8t1py5XAC3bsHWFvkZeXLTvdWkc2eYmJTPEmDBqlVwcdHCLVh3QnjiBHpYHSq2EiAoCC1aVJr9XVwMf39s2KCt8z58iMRE9OsHe3u4uGDAAKxbh6dPIRaLu3QZLBL516jRpOIUfUEBnjzBuXPYvRvLliE2FkOHokMHNGwIJydwuZM/lkHIrV49pPQoqRQLF8LODhUyrKqc4mI0alQxsLm8ECYmol49iMV4/x52dhAKlaedBgfD0BCVLGpoBakUoaEq2CGpfZY6dT7Nc/boUbK0Wk4IAWRkICoK7u4lGRRSKSIiVCqA9nVTr17p+j17yuYRLlqk5OZz+jREIigu//rqFZKTERUFBwe4uyMqCsnJyMgAgMLCwhkz5oeHD9i06dPsoMwZet06KNDFEydOubo2OHpUub0kA6BizXpHR8du3botWrToxIkTffv2ffbsGRHdv3/f09Pz8ePHzs7OSgvfV8bz588dHR2zsrIsLCyIaMOGDYsWLbp48WLZfQIDA0ePHh0ZGUlE79+/t7S0fPbsmYODQ8XWZs2aFfcyDhafLsHQwICXlwcjI6awkMRimJoSj8eyb1Ip5eQwBgZkYFD+d0JEhYWF4vx8UyIxUR6RmaUlEeXmMnp6pM8pZvLyYGZGDMP6NyGPoiImL0+lPpceV1BApqbgcDQ6v+6QSCgnhzExAY+RMLm5xOEQABMTqtBjpqCAJBKYmOiiG1IpicVMcTGJxURUBEiIjIgkHE6+np4pQFIplf7P4RCHQwxT9n/IXkulktzcfMCAqNjAgGtkZFDuYmUfDCMjOR8kbVyFlMPmLy2VMtnZMDUlLrd0GwCm9FMKMNnZsr8C8+EDMQzLzzCTk0NiMczMyrasRYqKmMJCMjPTyW+vlOJiKihgZGcpKqLCQkbxGcViystjuFwyNgYRZWczRkbQ09NpH3WPWMzk5cHcXNXjcnNz9fX19T5ef2EhU1io6BYkFlNuLmNgUCSRFPN4PAMDfdn24mISixmxmKRS4vFIT494PDXvYxIJSSSMWEwSCUmlxOGQVJoNmMyrc2xsX3/Fx8q54aanp7948WLQoEHltsviSF+/fq2JEBoZGRFRUVGR7MeCggJjY+OK+5TuUFhYSEQV95HB5/Ptb9j7VvOV/cgh8rx6lSOqSTfu04ci9B9MNjYsO5abS5s3MyG1qUGDSr8MO3//Pf35c0Ogt76+VVgwatV6/Jg5fJgGDwbn4AESc9GyJcvTye0Bs3w5+fqjQZhKx92+zRy7QAN7gvW1KkIsFnM4HFb3WdZkZ9PGjUxEU6pRA0RE798zW7eSmRllZKBbZxIIPu365g2zZQu+GUhmZlrsgFyOHLl4+bIpUU0iqZ7BxqCgSBMTMjEhExOYmJCRkZLD09PT7959xDCCf/7x6BtZXrgLC+ngQSYriyIiYGWltT5nZGTs2bLFRiJ5x+V26NXLSlnTTFoanTyJb74h/ZL7TlFRkf7H18wff5CZGWrXY1atIn0zDBnC/gmM2baNrj5Gv34kEql9OXIpKKDERKZPF9jZabfh8mzcyAQEUI0aeP+ekpKY/j0h+yQCkEgkPHm/iuJiOnuWufEXhYaStQN27GB69oOFhW77qVOYnTvJzQ1166p64NatW/39/T08PEq3pKYyV69Sr14wNZV/yPnz906evE4UBN5Nvp0BUVB6OtnakqsruXpCJNJ0HFEWiYTevqXNm9cVFg54yBEqP6DiIPHdu3dEdP78eQDHjx8vnRq9ceMGEd3RLGxMKpUaGxunfgzF/Omnn3pXWGDr2bPnzz//LHt98eJFExOTyqqDlp8aHTsWTZtCKASfr1IAy+vXqFWL9Urin3/C0RH29li9GoCfH/buBbKy4OSkkVO9szNq11b1oO3bYWfHtrIEG7Q+NZqVBR+fCnbJ6emoV6/kj1Xq2VNcjMBAyLOr0AX379+3tq7F4cw3Nm4zY4b6i99xcQgKkp+5t24dRCJs2qR+J8sR1bXrKSIQnSAaztJDtn//sjEnn6ZGDx6Eqytu3CiZVFIjP65NG+jrQ9sOG8OHy8wQdcuff8LDA2JxSfWOefM+vVVxarQcZ8+iVi2EhyMuDoGBKhfnmjbtf46ODVq16qajYlIqcO8eBAL1CpLLtVj75RdUr17pEvM334whOkkEoiw+v8W+fZUu7GmLPn2+MzTst3ZtRRf/8shfI/T29u7fvz+AEydOyIRQKpX279/f0dFR84rV/fr1Gz16NIC8vLwaNWps27YNQG5u7qZNm2Sfv+TkZG9vb9nr6Ojo/pXbK30mhBs2wNERpqbw8lIp/S4zE/7+iItT5RrCwzFpEpydsWxZUtLHleaUFFSvjvx8VRr6SJ8+MDQsmRFnzc6dEAi0fCPSrhDm5yMkBBMnyntPlm4fFASB4Ojkyf1atRobEPC6SZMqq4V66dIlK6v6RBOMjCKHDpXbRVZIpejSBaNHy3/38mV4eSEyUr27TXm+bdjwLBGIThEN1ddHr15Yu1aJ7UpODqpXx++/y34qEcK8PHh4YOlSGBnBz0+FdJNytGsHff3KUozUIDUVQiHYlIbXkFatsGoVAMyahZCQz34BSoUQQFER4uMhFKJWrbfm5j309V1DQjqwiZ9Yvnw5wzQgOk8U6+mpTuarNomOVi86HZUIIYA5c1CjhvxAtzVrNpiZDSF6aWAwd9iwGPXOqxLNm3fX0xuWkqLc9kS+EKakpHA4nLCwsOjoaBsbm8WLFzdp0oSI1msjZ+7u3btOTk7NmjWrXr16RESELBDmyZMnRCSLWi4uLg4PD69Ro0azZs2cnZ0V+GJ/EsJLl2BpCT09NGyo0rc6KwuBgaqve9+6BYEAV67Aw0M8d76zMy7JUm+7dsWPP6rYFrB9OzgcVbOTDh6ESKT92tBaFEKxGF26oG/fyqWtuBhDhtypVi2Yw/mbaCtReN26Wjk1G+LiZhMlE4FI6uxcT5OmsrJQrVql8T0fPqBfP3h746M1hVq8eIHIyBvOzn42Nv2FQj97+1unTyM5GZGRsLJCzZqIicHhw/JHphcvlhayLxHCiRMRHg5DQzRsqEGfAAAdOoDH00rVPokEDRsqdUvVApcuwdERhYW4cqX0F/MJNkIo48YNGBgEE60iyiYa0rTpxLlzMWkShg9H375o2xbBwfD1RbVqcHSEjQ3MzMDh/Ei0Xfap43JddXJ5LMnMhJUVPjrdq0plQgjgp5/g4yPnaUYqlc6cuTAwMHzUqClVU7xBIAgkwuDByhWh0vSJlJSU6tWrl86g2tvbr1u3Tlv9y8vLO3ny5JUrV0q3iMXiR48elWaxSKXSK1eunDx5Ml/hAKtECNPTIRCAyy1nx6WU9+9Rv35Jzr3KDB+OMWPw5Am8vE61mta3LwDgxQsIhard8NLToa+PYcNUOvnhwxAKdVIJU4tC+N13aNlSWf1EqXRd586zPobj1jQ11cqp2bBnzx8GBpFE+US7HRx6afjFvH4dQiHKfKLLs24d+Hy17Gml0pI51pgYFBTk5eVdv379s/uIWIzUVMTHIzgYZmYIC8PCheXv7nPmoHFjiMUfPnzA1auwtoaenhpB8/Lp2BE83qcpbnVZvhzBwVUxI9CtGxYsQH4+atWS8/jCXggB6Ou7EeUQgegYw3xnZSVLl4W3Nxo2RFgYOnfGN99gzBjMnInly9Gnz0KGaU/0kmg1UaSrK7Zv1/LVsWX2bE28zBUIIYBJk+Dnh3fv1G5eUzIyMGkSuNxQor8OH1Y+7a8kof7Ro0epqam3b9/WMGtCRyQlJXmYm1+3tQXDlBQTY8Hly5fDw7/p0mVY/fr3R45U94v3+jX4fNy5g+fPJdW9ZxvHldx5Vq4siUdniYcHqlVT6cynT0Mo1JWnrbaEcPp0+PiwKZCHZcuW+RFdJdpM5KKnp/mpWXL2LExN57u4NAwPH9ily+u6dTUtRrtzJ1xdFZUqvHULvr7o1k06a9by5s17TZ06V/mv+u+/0agRmjRhm66Qno6kJPTpA4EAtWtj/HgcOYKCAkgkaNkyrnr1Wnz+NktLcDhQxcBWOd27g8fTpFTSu3ewtVX0JKEtbt+GQIDsbHz/Pbp2lbODSkLYqFE40TCiEwwTFB8/l80hPXsOMjauVq1a8KVLTzt3BpcLa2st54pcuXJl+/bthQoeQouL4eysybKKYiEEMGkS6tb9AlqYm4v4eAgEiIzEn3/eDQ3teuqUumuE/xaSkpJ2EtUm+ieG7YxzVlaWra0/0UWiY6am9cRiDZ4/Z80q+Salpz/n+xxr8AMASKVo3vyzxXcFDBkCAwOVyrzKqmFoxcFPLloRwqQkeHiwNbg5cOBAVxOTSKIxRD4ikYanZklODry8sG3bp+CRhATw+ajcxYgVEyciLEzRU1B+Plq0WM/hDCK6Y2Q06YcfKg/QysvDpEkQCrFypToPaxIJ/voL06ahUSOYm6N9+85CYV+ifUQtiKLd3VVuUCm9ei1mGGeGceRwhqhUDBoAMHiwunMzKjJwIKZNw5EjcHSUf5tWSQgLCwv79fvWw6NxfPwc9fqTnY2oKOjpwdxcnXWVivTsGcXh1OJwOhkaOr+rTIh+/519DV65KBVCADEx8PdXNfJBfYqKkJAABwd07/7J8kGjhPr169cnVIIW+605SUlJIJpANGDAAJaHbNt2wdj4O9lUnEjUTqNiGvn5cHGRrY48ufL2Ki+gcMQYSKW4exd8viKvBRl//AEOR6VM/L/+glCIgwfV77JSNBfCvXthZ6eCJ6VYLO7ZsmULodDX2HhbtWpqRhupyPDhkH1kyiaYX7gAFxdMmKB+hQGxGGFhmDxZ0T7duw8n+osIRK8EgvDVq3H9eoV17SNH4OmJXr20U3/o3TusWOHBMOlEIDpPVN3YWAvNfs69e/d8GaaYqIioGofzSBUXMlnpiyoIonzyBNbWuH8fTk6V5nerJITaIjcXUVEwMICJCX74Qf3opfx8cDhuRAVEYJifR4+u5OGifn359QRYw0YIAUyYgIYNdf6XlUiQnAwPD4SFfQzX+PSWBkIoqjw3SCv91hZJSUkZRD5Em5SFqGdmYt06hIXB2jrL2Nif6BzDHHJzq69pEOzGjahfX/bAPqhL5guXhhg+HFIp5sxBy5aKHuTfvYOhIb75hv2prl2Dra0aFhCqobYQLlu21tW1vodHc2vrVDUWL9+8eVNYUIA+fdCzp66XiQ4cgKtrybRtOaeVt2/Rpg2aNFG/msSbN3B1/ayQQzkSE5PMzQcQ3TY0jImImBkVhZo1YW6O4GBER2PzkjfZXfrDzQ379qnZg1Ly8nDoECZMgJ8fLC2r83gJRBKiiUSNatbUtPEKHDt2rCWHI1vrbc7hnGIXPnPjxo3k5K0BAUVaTDJRwOjRGD8evXpVGuWLLySEMoqLMWECTExgYIBhw1g9ExYXY+9eDB0KX1+YmYFhQFT347Ll5AED5BXLOHUKXl7qiy0A1kIolWLECAQFQWNz+0o5fBi+vmjUSL6jqUZCmJWVlVGGBw8erFmzxsPDQ9XidromKSnJk2E6Vr7mX1iIlJSSwLr27ZGcjKIiXL16tWPHwX37jlTpoVU+UimCgmSZYqmpqOaQI23WHH37Ij8fAQGKAuC8veHszP48t2/DwUEltzg1UU8I79y5Y2PTnCiP6KFAoI5RagmFhWjWTKelbjIzSywlZVT0GpVKER8PW1v1K5JfugShEDdvVrrDkiUrw8L6TJ8+r9Q78P17nDqFXX2T3xnYrTCK9rTNbt8esbFISSk/s3Tt2rWEhBV/KwjIKmfU+DGa9NatW+5GRnZENayts1X38FOKRCJxNzUdyTDfE/nr6bGJKhgy5HsOpwbD9GKYgOfPdV7I6s0bWFtj8WJ4eytKsPqCQljKvHmwsQGPh+7dMWzYZD09J319l/j4kmzcc+cQE4OgINjYgGHA48HeHq1aYdYsPH2KESMmcjhuHE4wj9eAwymSM93auTN+k1NQVyVYCiEAqRTffYfgYDWMI5Vw6hRCQpRUqdF+9Ynk5GRnZ+fKbD+/CAqqT5w7h+++A5+Ppk2xerUux+Znz8LJSZYmFhqKLWty0bIlevXC5csQieRPbY0ZAz09PHumtO27d+8eOHAgNfW9g0NpJphu+eeff54qi6guKMDNm0hJwYIFGDkSbdrAweEAkawuIITCRopW6ZXy9i28vLB8ufotKKR378/Woioz3T50CHZ2mDVLzdHp2rWoUUOVT939+2jVCnXr4q+/ANy7h02bMHo0GjWCiQl8fPDtt1i1CosX77O2DmGY6TY2jfftKzNF/vKlHKNGea6hmpedUkB+fn5cXNy8bt3EHI7SAg35+eBw3D9WFfilf//BuuuYjB9/RN++EAqVxIh8DUIoY/ly2Ng8Jwok+kD0mqgan1/I4YDLhZ0dWrbEzJnyV2DS09NlpiXLloHHg49Pmc/CgwcQCDRPZQ8ODt6yZQvLnaVSDB2Kxo3x/r3k+fPnmkchXLiAFi3g6oqEBCUjW+0L4atXr4hI0aNolVNRCB8+xLRpqFYNNWrgf/8rH0OuK7p0QXw8gJQUBAYCBQXo0AEREZgwAT17lt/52DFwOGzsRlasWM/nNzMzm8zl1l2wQLlqao6FRQ2iGkQuNWqUGEm/f49Ll5CcjFmzMGQImjaFkxMMDFCtGtq1w6hRWLgQf/yBv/7KtLf343DWGxr+LzS0i6b9uHcP9vaq+dWzY/Pm8qMBBcLw9CmCghARoeZq/4gR6NSJhY4WF2PhQggEiI+XG2ZTVISLF7FkCfr3h5FRBwGJQkkkIFEN54ijkw4/j4wp8gmAQIDu3ZGQoFR+2AuhRCKpU6c5l+tkZORxRNW/RfXq8PMrt62wELt2ISqq7CReIFEWEYimDR6sWgaRqnz4AD4fjRph1iwle349Qghg8+bNDNNb9ojJMGHffnv72jXVWnjyBM7OMDT8GI2gQRK9jLy8PD09JyJzIn54ONvCO1IpIiNfGxs3FAoj7O39rspKIbOjoKDgxx9nhYX1WbVq/c2b6N4dTk5ISGC1lq99ITx48CAR3VdQe6rKSUpK0tOrPnz4uKwsrFyJkBAIhRg1SvZUXYXIomNev5ZIUL06/vwTKCxEly5o0wY1amDnzk97vn8PY2M56igPD48g2fMywyTNmPGLjvpeyrx5a4maE4FITFQ7MDBXIICJCXx90aULJkzA8uU4cgQPH8qPinz+/Pn06XMTEhILVLWcksvJkxAI8M8/WmjqI8+fQyQq74KiWBiKijB6NNzdy6/As6GoCMHBmDFDzlspO3d+37//hjVrpKmp8PdHeDjLAnf13KvLLKqOE0UxnL9FYYudZrewumRqLKldGxERiI7GwoXYvRv//FP+of/FixdOToE8nmOtWqGK03MBFBdj+PA4om+IpERXDQ1rsJi/wIgRE3k8Jx7PacaAYeBwJFu27t+P4cPh5wcLCzAM9PXh6oqOHbFkCV69wqRJcRyOC4fTmMt1jYjI1MoHpzLmzIGfH0JClGc2fVVCmJ2dzeM5EC0jmmto6KJ2O4MGgcPBgC7vYWOjdhK9jMjISKJhsgr1RPbsDxw7No5hficC0Q0vr66rViE5GcnJ2L0bhw/j8GGcPYvUVKSm4t493L+PR4+QkYGMDAwZEmNoOJ3otp5eD0vL3bIcUJawFEI51SeIKCkpKT8/v4yBqeTBgwerV68WCAS3bt1itOiNqhkbNmzo378t0MHUdF2bNp6RkdS2LX0ZP/gxY6ioiH77bcUK2rOH9uwhkkhowABKS6Pnz+nGDbK0JCKqW5fevqVnz9g0Wb16qzt3VhC5GhrOmT/favjwb1n2JS8vb+XKdW/fZg0dGuno6FjuXbGYnj6l+/c/+3f3LhUWpkokC4k2EBFR3eTkPSEhTra2rH8DWmfzZpoyhc6dIyELz1xlABQeTg0b0s8/f7Y9OzvbTJnB99atNGIEzZhBUVGqnfTlS6pfn1aupDZtPm3ctXXruqiocVlZ6/X16xgajlq8mPr3Z9XcjRuD27Yd8vRpI6IzRKvDwxP/+OPjVdDDh/TwIT148NkLMzNycyN3d3Jzo8TErunprYkGE03x9s5u1eq316/p3TvKyqL37yknh/LyqKCAiotJIiGAGGYBYEU0gAhEgQxzCSCGIR6PeDwyNCRDQzI2JjMzMjcnS0syNEzfurUpkEokJWq4Vc+7ZfERkV6GyI5Tpw61aEE9elDFEjJv3759+PChr2+9/v0pPZ127ybVCyEop6CAXFxILKbUVHJzU7Kz7NZppNR2vap4+PBhdHSMsbHB4sXzhBp8Fw4dopMRc+ty//G5ur5aNTUbOXmSOnf+JSMjm+gSURTRCOApy2Ojo39csqQ+0IHokVAYHRGR8uEDEVFBAcnUJieHiouJiLKyCCCxmLKzZT82AQ4SGREdGzDg4Jo1s9l3WCqVSiQSPaWqIFceK0aNmpqadu3a9asaDgJISkoiAlFMjx6zvvDaZUYGhEJcv56XB5HoY/azWCyrg/esR4/4+Pi0qCjweMrTKgAAR47A2jrVxsZfKAxq3Lij0kf4sgQFRRgY/MIwm+zt/c6dy9q1C/PnY8QItGkDLy8YGMDFBc2bY8gQzJqFUaPg5gaGgaNjEYfjRNSFqBlRw4kTNQwr0wY//4ygIK0kVCxdCn9/OcVUWU4V3rkDHx/066fy2sqZMxCJPivhPbxz5wuy5Ami8Arzh/I5dQrt20Mkuv7dd34i0QCBwM/e/qaCaJyPPHqE1asxeDDq1wfDNCYqSaDgcPo5Opa4n7Rti379MGYMZs9GUhKOHy/5hB4/fpzDcSFawzB9/PzCABQW4t49HD+OjRvxyy+IicHgwejUCU2bwt8fDg6Xibp+nMSLGDb4lNTIBCNGKOje/fv369cPd3IKmDRppkSCkSNRty7b9FOVWLwY5uZszdu+qhGhNikuljo5D/RJ5XJlKzkqUFSEadMgcy6pUSOTyJnIgcjDy6sR+0YePXrk4ODH5w8XCgP+/FMFH6KhQycaGMwkumth0Wv7dtUqv2ozavTLu6RXQlJSEsNs5XCc/Pwe2Npi3DjN7Bw1ZN48tG8PIC4OUVEfN0okySEhvkTjiPyJ1pRYsSlhxw7Y2pZYVqkkgQDu3i00Mwv66Fk2ydn5UPv2GD0av/6KvXtx+3aJWf6zZ+jdG4aG0NdHRETJnVosFv/0008LFvzauDEcHNCtm/YDvVRDKtVKQoXMZF+uNwv7NbPcXERGok4dlcuzL10KX1/k5gJv3uDnn5ebmo7j8bKJ5unrTxk1StGREglSUtCgATw9sXChbG0zNzf32rVruZV4eGdm4s8/sWAB+veHjw+MjODri2++wcKFaNSoL8N0I9rHMEE//yxvxrYCJ06ciIjoHhcXxyYEtLi42MDAiWgm0XRDQ2eJRILVq8HlKggKCwhoQ5RKJLaw6H/w4EEA06bBwwOVuwurTNOmXbhcJ6KGXl5s8zP+s0K4eTNCQwHEx4PLRcOGrIzgL19G8+bgcmFmhqgoZGbKjJazXFzcJ8p301dEbm7uhQsXMlRcdc/Pz//hhxlNm/ZcsUJlI1rtrxF+hSQlJTk41JJlLKWlYcoUODvDzw8LF+L16yrvTWEhvLxw6NDr17C0/PRg28DR8YxsXpzIx9paaTOLF8PBQTWvqdxc7NuH0aNRowZEIpiYBBLdI8rm80MrDuK3bUPt2mAYODlh3rzyEiNLn3j3Du7uaNoUdergC88CFBSgcWMlOeoKEYsRHIxFi+S/q2oUZUICBAJs3Yrc3NwzZ86wNGQY0/3p/hrfw9oa334rSUvm4czgAAAgAElEQVSbNnFiqLf3hKioSm+42dlYuBAuLggORnJy6brWq1evatduKhDUq1OnmezUT59izx5Mn44uXeDmBlNTBAdjxAisWoXU1M8qBEkkknHjYurUafbLL/PlnlNz3rx5M2jQt0OGDPtkaOLlhcBK02kcHAI/jiBXz5q1RLYxIQH29tqpqbJp0yYOpxmRmOgZl+vE8qj/rBA2aFBq33HrluxGUWlEmkSC+HjY24NhUKvWZ/kJ7dph/nwV0ie+LCoLoVQqFbNAl31WmYpRoxIJjh5F//6wtESHDti+XZnps3bZuhW+vpBIhg5FbGzJttCaNWVu88eIAj8Wd5SLVIrYWBWeiK9fx7x5aNUK5uZo2hSzZuHyZUiluHTpsp9fK0/PoLVrP6VcZGbiu+9gYQEuF6GhlQptaR7htWvg8zFxImxtK/XgqCLevIGXl6z6oxrMmoUWLSodUqqRTpCaCmfnJ6amftbWIwWC+nv3KkyuvXMHgwdLraw3iMaujGMRcPLqFWJjweejfXucO1fuzQEDvmeY3URgmJ0ODuMEAgiFaN0aMTHYvBlpacpns3WaPiGH27fB4XwWL/aR9HQIheN4vGii3w0NA4TCe4mJJf3fvl07PoKDB08j+kmmtRyOO0vD5P+mEJ45Uy6JXiJBt27gcBAVheXLl7ds2em3334DkJaG8HDo6cHICH37lneWOHoUHh4oKPjvCuHq1avZrD3qss8qoyCPMDsba9eiaVPw+Rg5sgrjSBs3xtq1aWng80vWk/755x8nff3aHI6jnt6ZM2cqO04sxrffol69z8ayjx8/Pn78eE6ZhamMDGzdiiFD4OQEd3cMH45du8q7NhQXF0+aNGno0KGyslYHD6JePXA4EAgwaZKSJ4OyCfXbt8PFBTt3ws6uQmXdKkaWUKG6IF+9CqEQT55UuoN6wjBq1FSibbKVPh+flvJ3unYNkZGwtkZMDN6+ffwYdnYKrdL//htRUeDzERVVbvo1Jwf792PsWJiZfUN0jQhEV+rVG/D8uco9r2ohBNC9Oywsykn0zZtwd8fPP0s2bdoSFzc7LS0tNRVBQQgMxNmzAPDnnxAK1a/MkJaGwEAwTAbDVCdaQvSdvT3bCl//TSHs2hVLllTcvH07uNwtRE2JNjFME3PzFQwDT08kJsppQyxGnTolTzX/WSG8fv36XBboss8qo0AIS3n0CNOmwcsLNWsiPh7PnmHr1t1eXsF16jQ/ffqs9vt04QIcHZGT06EDli37tPmNQmftggJ07YqwsM8kbf36zXx+sJXV905O/vv2vZw2DUFBMDdHeDgWL1Zk5ikU1ib6jmgWh+NpafmBw0GjRqhcgj+jnLPM5MkIDsa9e/DzQ2Rk1fiAVoLqCRUFBfDxgeLqYeoJQ2zsbB5vNRGI7piatt+27fOgfFlsi60tYmPLFuA4ehT29nj6FFKp9OXLl5/mV8ru/3FSUSzGhQuYMQNNm8LUFKGhmD4dS5ee5PPrmZhMFwjqnTx5Wo2efwEhLCyEkVFZT7MjRyASISmp/I5SaUl17X798Pw5rlyBg4PKzgrPniE0FBwOfH1x7RrS0tJ69Oj3ww8/sHcC+Q8K4cOH4PMrW/Dn8wOIrss+zPr6zRQE8y1fLltkBP7DQvhvhI0QypBKcfo0oqJgaZmur9+AKJPoma2tr04me3v1wrRpJ06w9fPLyEDjxujXr3xMo6dnMFE2EYjW2drOmzChpKKOYrKzszmc6h+DZcaHhKxUqTZ6OSGUSBAejhEjkJuL3r1Rr56GOUia8fvvcHdn70MdE4MuypL71ROGzMxMb+/GIlFbe3u/OXMuBwXB3R2//oq8Q6fQogXc3LBwodynhrlz4ef3sr67R7hI5O/oeHPBAtSvDy+v0v3v3sWyZejSBVZWqFMHY8Zg797PQlUfP368c+fOJwoGuTq4Xk1Zvrw0aiYx8VMgmFxycjBlCvh8zJyJW7fg6Ylp01id5N07tG8PDgdeXmwf++TyHxTC0aPxww+VvVmvXmuiX4lAtMzXt0Vlu334ADu7T2m4/yeEXxHshbCU06f/MjMbLtMJY+M2Fy/qIKhG9vz14kWDBsod3p8/h48PoqPlSKaHR3Oip0TQ15+/eDHbB+PMTBDVIHpLVMwwQX/88YdKfa/oNZqVherVsWoVAMyZA3t7rVQjV5eff0a9emzC3U6fhr29kpgpqVR669YtVeNyZUgkkqtXr5YcK5Hcnptyz7reTV6dLeHrnj2qdPAhlSLAc8Q2YkB0kaiftTX27XvzWrplC4YMgasr7O3xzTdIStJJFgG+lBAC8PBAgwaTJsHLi1Vlkvv30bkzPDywZg38/DBihKJnStlTGpcLR0fs3atpT/9rQvj+PWxsFCwPvHnzxta2LpfrJBL5vqr8KXPSpM9qBPxbhPD9+/dsnHUrFcKMjIzNmzfPnDkz5nO02klNUUMI8/LynJ0DuNx1enpLBIJmQiHatcPevdrOmZs4EUOGbN6MJk0U7XXzJlxcMHu2nLd27YKl5TkrK1+hsGm9em1YfjPPn4epKczMtnO5zhyOY1hYD1U7Ltd0Oy0NAkFJ1dUDByAQVBqEqXOkUkRGont3xX8wWblBxStM2dnZobVrRwgEdUWiYyquPr579y6oevUOIlFdW9u/YmNRvTqCg5GS8vCBNCamxO/s/Hn5x7Zt2OQQEYhuE3mau/n7w8ICERFYtAg3bqjUC3X4UkJYdPkfKcMZV+MPlcK5jx2Djw+aNEH9+ujRQ87ydnExRo2Cnh5sbOTUmleP/5oQzp2Lfv00bOPp0/Ji+q8Qwg2rVgUIBHdZfLvlC+H58+etra2JSF9f39DQUGYlo6enZ2Vlpe2uaoQaQgjg1atXcXGz58799cOHD/n5WLsW9erBwwNz52qvnvKHD7Czk6Rednev9IZ4/jxsbeUvSi9cCAcHXLwIiUTCPonzl1/A5aJtW3X7DKDy6hMHDsDBoWRe9N491K6NqKiqjcgthUVCRVQUhgxR0syyX39dpKcHotdEoTKrT9b/ZrVosZZhQHSfKNzColxl9g8fsHAhnJ3L5T6U0KZN7xqkP5BMHEkg4AedOqV++UM1+CJC+PYtQkJwwbGz1Ep5+lA5iouRkABbW7i5ITQUe/YcGzJkyPbt26VSxMXB0BBmZlp+LPtPCWFxMVxcyvsKqk6vXoiL+2zLv0II/ezs8onEK1cq3ZMjNzR0xIgRXl5eL1686NOnz7hx4/Lz83fs2GFvb79q1So2kaVfOSKRKDZ24vjxo8zMzAwN6Ztv6K+/aMsWunuXPD2pRw86e1bjc5iZ0ZQpnInjR46kBQvkvL9nD0VE0OrVNGjQZ9slEho9mlaupDNnKDCQOByOOQvLKamU2rWjmBhasoT27dO48/Jo3Zq++446dqT8fPLwoHPn6O1bat6cXr3SyekUYWBAu3bR1q20Zo3c9w8dosOHad68Sg5/8IASE6lv3+IpUwzFYiLSJxKLxZSZyf5fcU6OMRERGREVu7pSSEjZM5iZ0ejR9OABxcTQ/PlUowYtWkR5eSXvDm1Y+w+Gt4mWvTPqO+Tb9o0bE4+npd/MV8m9exQUREFBVO/u70x+Ho0fr9LhPB5FRdGNG9S+PZ09uzciYsKqVbW7dYs3MtoYH0/Dh9OHDxQdraO+//vZsYNcXCggQJM2Llyg06dV/bt9BZw4gYwMHhHz9q3ynStqY2FhIY/HO3ToEIABAwaUTofu3bvX2tpaowo72ka9EaEC3rzB7Nlwc0ODBli/XnlkiiKKi1GrVt6O/TY25XPS162DSFQSJl6WnBx07IgWLeTWz6mUO3fA58PSUjsO1QrqEUql6NULkZGffoyNhbMzLl7UwnlVppKEirdv4eBQIUvh1auSKkVubhCJZIUa3l26VN/dfZCNTX2BYNfWrSqd/NmzZ/5OTkP5/ECh8MjBg4p3PnZM5o+GuDikpwPduh1u18HXt+X48T9XfVGzKh4RHj0KkQjr13/8+bffwOWyD3cqh52dzGYVRI/19evryALwPzUibNiwNIlePaRSBAfLcaf7ekeEUilSUhAUBHf3JRERTfj8hyxqp8gRwpcvXxJRWloagOjo6GHDSsqj5OTkENE1VauA6BKtC6EMiQR79qBNG4hE+OEHloUB5JGSAm/vH8YXly2At3Ah3Nxw+3b5fV++RL16GDBAjh+mAtavB4+HgACtJTYoLsybl4eAACxc+GnLzp0QCOSEwlcF8hIqevTAuHEAgA8fcPgwYmIQEABzc4SFIT4eqallU+sLCwtPnTqlOLOlMvLy8i5evPiO9WT67dsYOhQNzG9mGVg7W/uamf3M5zc4cKCqrQqqUghXr5YXIOrqikYqGFSWpWHDdkTLiEC0x8mpnuY9lMt/RwjPnIGbm/JyGwr5/XfUrStnRf5rFMKiIqxbh5o1Ubcu1q2TXfiTJ08yWQws5AihWCzW09M7ceIEgF9++cXHx0cqlQK4fPkyEd2ueAv/cuhICEu5dw+y2IewMOzeLenZc5hQ6Ofu3jA1lXVVnrCwzNkJlpbp27btf/78xbhxqF1bjvnijRtwdUVsrGqemgMGgMPBhAkqHKIUpRXqHz2CrS327/+05fp1eHoiIGCqQODj4OC/e/c+bXZIIZJNm4aZmta1sanv6nrxwoXkNTlDXA8Xj4tBQADMzD6JX+VjhyoeIRV067vQrjHRcSIQPahfX+PajSpSNdcrlWLyZHh5yfNl/ecfcDiffYBY8+rVKwuL6hyOq7Gxh+6eyP87QtitGxYv1qSBwkJ4eMi3Yfu6hDAn59OyfEpK2Xc0Sp8IDQ398ccfATx79kxfX79t27aTJ092cXHx8vL6t1So1yK5uVi1Cu7uOzmc74lA9MjbO5TtwVeuFNnYCA19DAx+NDCoV7fuyTIJ1iXIpo9UGlRlZJTUkTig0N5LDZQKIYBTp2Br+5kP3MmTV/X0OhFJibLs7NhaeGjO7t27o/X1QfSEKMTQKIcx/VCvOWbMwNmzLENQqlQI792DUDhp5CQudwMRiE7q6Q1s1AgzZ1adWbxOr3fz5h2urg1cXBoEBe1u3Bhv31ayX4cOsLHRXTc05D8ihAqT6FkyaxY6d5b/1tcihG/eIDYWAgHat5cbl6iREF69evXo0aOy18nJyT4+PmZmZqGhof9otVCq5lSNEMpYujSBw5FNy0hMTALZ/yaOu1SfUVLU7WazZuULOq9dC5FIofNWxQaPw9gYbm46MRZnI4QAFi2Cj8+nRO/Dhw9bWk6QZWfy+fXZtKAVEleuXMLjgUhC5KUvmBWr8gRxlQrhwIGYOjUjI6Nu3RYCQSMvr6A7dx4eOoToaLi5wcUFI0bgwAHNVqaVobvrff/+vUAQQJRN9N7AwP/t28pvwXl5MDTEV5aLVcq/XQjPnTnTwM2trrHxmDp1pBqUbUlPB59faa2VLy+EL18iJgZWVoiMlF9ZBsD/JdRrnRcvXtjb1zUwmGNp2bV583gnp5LgeKUDjwl9hg4jPTtysKJmnTsPLt0uCzZxdweLunKf+PFHcDjo3l2ta2ABSyEEMGQIOncumcvNy8vz9GxobDzVwGCItfUwlYJ9NOHVq1c1BYJpXF5rfeNqdjFqzFZUnRA+fgw+Hx8L0FQMOrt+HfHxCA6GhQW6dEFiotoxJYrQ0fXeuIFx4+7o6fWSPQwJhd2V1C5dtAg83peoEaOcf7sQBnl6PiMCUZS5+UFlkVwKGDoUY8dW+m4VC2FaWtrOnTtLir3cvYvoaPD5iI5WUORLBkshlJ8+kZycnC2rDfx/fMTOzu7vv4+sWeN44MCEo0djHj6kmBhasYJcXCgujhQE6Brbm9kz4uf0/GfmuJOFRLaxqIi++Yb276ezZ8nbm1UHioqoaVOKj6eEBEpO1sYlacbSpfT2Lc2cSURkZGR07drR9etrHTjQd8iQpS1aUGZmVfQhMzMzXerys2TyoeIBrnXefdV5CLNm0dChZGUl+0lfX7/c+7VqUUwMnT5NDx5Qr150/DjVrEmBgfTDD3T6NAEluz169GjHjh2PHz+uyr7LRSKhS5coLo5q1qR27ejDBw9b22f6+vMMDH4RCl+7Ka4EHx1NDg7UpUtVdfb/Iwpzc+2JiMi7oCBd3fSmW7doxw6aPFmL/VKfrRs3fhsU9E+/fq29vdM6daKQELKyojt3aNEicnDQzjnkyqNIJDI0NOzevXtKSsrXVnqpLFU5IqyMy5cRFQUrK3TvLicjAsDgDh2uypYWibo2bgwgIwNNm6JzZ1aFMWXcugVra1hbqzZ8VAP2I0IAL1/Cyanc4jSkUowciaCg8jUxdMHSpcs5nBWyUYiDQ6V17xRQRSPCZ89gYwMVw1MLC3H4MEaPhocHnJ0xfDji44/b2NQ3Np4pENQ/cUIdpzvNrzcnB9u2oX9/8PkICMC0aZ9KeuXk5CQkrFq5cnVldYM/48oVcDg4dEjD/midf/uI8KdBg3ozTLyBgb+Tk3oR0QBat1ZiU1CVI8IWtWu/IwLRH0Q/NmumUoi8RlOjt27dio2NdXV1JSIHB4eYmJg7bPwBq5yvQQhlZGVh4UK4uiIgAOvWfZYCsWvr1rZWVnuIujLMupiYBw/g7S3fXLQcly9ftrT05nIdXV278njS4GDVMivUQyUhBHDuHPh8XL/+2UapFMOHo3FjnRe4X736LIcTQZTJMAcaNYpQo4UqEsLoaIwfr0kDN29i9mxYWfUn+psIRFfDwweq0Q7765VKpSNHTnZwCPD3b3337t0XL5CQgHbtYG6O1q2xdKkW7NcfNGnSi8PxNDIaqrEHmBb5twshunU7/e23v//+O5u0Abns24fq1ZXcbapSCLuFhl4iAtESff35M2eqdKwW1gjFYvH+/ft79+4tc1kLCQlJlGsI9uX4eoRQhkSCw4dLKurExHy6Uxw9ciR27Nh9U6cW2dgGCe+yDGm2tPQmOkokIRraqNH/dNftsqgqhAASE1G9OspFw0ql+PZbhIZ+VjlBu2zfDoEAQ4eurlWrWYcOA1+UKyHKjqoQwlevYG0NNYoHVmDgwDEczk4iMMz2wYPHqdEC++tNSUkxN48ikhJdMTFpY2ODvn2xZQtYW/4px9vcfDdROlFzhllWtmjZF+XfLYSnTsHZWYW5pgoUF6NWLeXVAqpSCNOOHm3E5dazsWnfqBGryYYyaDNYJisrKyEhwcXFpbKp1C+F2kL48OFD9e6bLElLQ3R0yXzpzp0Z9eq1FQoD3NzCJpjEZzt5s3SO4fGciCREINreuHG47npbFjWEEMDIkQgLez1//pL16zeUHi6RYNAgNGumybeyUmbNgpMTLrHO56yMqhDCCRMwapRWWkpPT/fxac7nB+jphe3apU6kCfvrnT9/McOsIQKRVCAI1EXalDOXK6sWtpaoR6dO2j+BWvyLhVAsRt26SE7WpI1ly9CsmfLdqjRYpnt3/O9/ErWchLQmhK9fv160aJG/vz8RWVhYqNEV3aGeEHbsOFAgCBcImo4dO1UXvSolMxPz5sHCYgrDyPLG9rRtOxJjxyI0lE2MfJ06bYmGEW3ncKpvVdEDTG3UE8J3794bGPgzzHJj45/KlryQShEVhbAwaPHGUliIAQPg66uo7jx7dC6Eb9/C2hqPH2u31YMH4eamzios++u9f/++kZEf0Rozs0GjR/+k8plY4O/gMIPoJFEg0U5Z4fOvgH+xEC5fjuBg1Vw5Pqdc0UEFVJ0QnjsHR0e1n6Y1iholIolEcuTIkR49ejg6Oo4ZM8bIyCghIeH58+faCdH5cty8efPs2Zw3b/548+bYunX7Zb5xOsLSksaOpRYt3gLViIioen7+G5o7l6ytadgwpYcbGu61tPRp1Chxy5YZ3bp1010/NSc19by+fmtgaF7etL//flpUVCTbzjC0dCnZ2lLnzlRQoIUTvX1LYWH04QOdPUtOTlpoUOcsWEDdu5Ozs3ZbbdWKWrTQrQ9ybq67icn2adM+bN7cdcGCqbo4xeG//77aunWcre08hulUq5YuTvH/ER8+0LRptGgRMYzabfzvf9S2rYYe3VoFoPHjadYsMjbW9YnkEBMTw+fziahatWozZsxQuxy2rlFjRHjjxg1r626yCR+GadCgQfb//oerV3XUQQA4deoMn1/PwGAenx+8b99BAMjLQ8OGmDFDwVEpKeBwqqJAXTnUGxHeunWLz29JVED0zMLCv9y7YjF690bbtpqmit+8CQ8P/PCDNotH6nZEmJUFgQAPHuii7ffv4eqKfSr62bG/3mbNsHSpyr1Skzp1ULfqDIkU828dEY4Zg6FDNWngwQPY2LBdy66iEeHmzfDz0+QLr9HUqJeXV2Rk5OHDhzUxJqgC1BDCoiJYWw82NW0nEISOGzf91CnExKBmTQiFiIxEcrI2YwFKefjw4caNGz+LvH35Eq6uCnzVZOuLVY96QghgwYIEJ6dAT88mXl7nRo0q/9EVi9GnD9q0UV8LDx+GSIQ1a9Q8vDJ0K4TTpmGgOrGdLDl1Co6OqhXRZHm9ycmoXbsKCyWmpYHDgQbZ31rkXymEd++Cz8fLl+odnZub+/fff3fpkjNtGttDqkIIFVidskYjIfyqai0pQA0hHDMGAsFlDseOy7UbMeKTydP9+0hIQPv2nwoV6DpjDzduQCjEn39WfGf0aBgaaq2ghEqoLYSlZGYiJAR9+pQPvxaL0auXmuPCFSsgEsn9VWmKDoUwJwciUaUWVVpi9Gj07avC/myuNy8Prq6q2f5pgbZtYW9ftaeUz79SCNu1w7x56h1669Yte3s/K6sBXK7fxYvXlR8AoGqEcM4cdOyoYRtfu8Xay5cv09LSNBxxqiqEe/bA1raAw2lKVEyUy+E4Z1fIdMvNRUoKoqLg4AB3d0RFISWlpBT77t1/tGzZd9SoKVkVnbPV488/YWdX7l6Zng4eT0PXePXRXAgB5OWhY0e0aVM+d6KoCJ06oUsXFRIixWLExMDLS07hKq2gQyGMj4fuc3vy81GrlgpxgmyuNzYWvXsDwP79+1u06PT99+Oqwmo/Oxt6eliyROcnUsa/TwgPHYKnp9qTLd27DyM6SQSi8x07DlZ+AIAqEMKMDAiFmi8OaSSEmZmZ48aN8/DwqGgEpWG3ZD0bPHiwUCisUaOGr6/vywrDealU2qZNG4FAQESnT59W0JRKQvjkCWxtERd3kGF6y7xIiJq7ur4YPrzSkral9o9mZggJSTUxaUF0ncdb1bq19m5wiYnw8ChrutigATw8tNa8qmhFCAEUF2PwYDRoUL4EQWEhOnRA166spt2ysxERgbAw1SoVq4SuhDA/H/b22qmVrIzUVNjasp0VU3q9T56Az8ejRzh06BCH4060iWGG1KrVVAsdVcrIkTAyqsIJWfn8y4RQlve3d6/aDfTuPYLoGBGITnfp8i3Lo3QuhKNGaSXpSCMhbN26tZ6eXq9evaZOnRr/OZr3bO/eva6urjLXg8jIyOHDh1fcZ9OmTXfu3LGystKWEBYVoUEDzJ+PGzdyiRoSTWGYYWZmvr16wd4eDANDQwQEYPp0+TZY6eno2/c3otWauHlVSkwMQkJkD3R794LDwRcsfqwtIQQglWLSJHh7l88dKChAu3bo1UtJxdCHD1G7NoYN0+2NUVdCuGABunXTScvymDyZ7RyS0uvt1g3TpwNAhw49iGR5hOBynTXuIwskEpiZYcSIqjhX5fzLhHD+fISFadLAtWv3uFx/a+seDg5+aaxn8nUrhPfuQShU1ZJQLuoLYX5+PpfLXaqziLHIyMj/x95Zh0WVtmH8PjNDh+TQHYqIiqig2GKjWKi4Yq6Frt2Ftcaqa2IHdgsWsPoZKHYHoigGqGAjXTPP98egIhITZ4Zx19/l5TUcznne5zBxz/u+T0yaNEn0+MKFC/r6+qWdaWBgwJYQjhlDvr70/j3p6lKtWpnjxo2bPXv21wWf3FzasIGaNyc9PWIY0tenFi1o82YqulV6/fp1AwMfII5htnh6Fu+mJBNCIfXsSd27k1BoaFhqAzDFwKIQihD1yyy2wpGbS+3aUbdupYrcpUtkbk5sfO8qB7kIYU4OWViIlY3FEnl5hbX9yqXs+z11iuztCzenZ8+eDQQCBcBlDqe+vKvlFbJ+PXG5rHwCSs3PJIQfPhCfX7zCoYRMnEh9+uQ9efJEoje+fIXQz4/++osVS9IL4bt37wDcvHmTFT9+pGHDhhs2bBA9TklJAfC5lEjNcoVwy5YtrVu3vl6EnJIWyo8dI2trev2aLCzIxqacGca7d7RwIXl5kaYmMQwZGFCbNrR9OwkEAguL6oA1h+NlYJBSXvcPCcnOpvr1/6kXrKYmlzoskjjCshAS0c6dxOdTsWdSNC/s06eE0Oh9+8jYuHgtbzkhFyEMCaH20hQ+lYX794nPLz9xv4z7LSig6tXpa167ry9xOJO5XCstLRdj41hNTYqOZs/dMrCwoFatFDJSyfxMQjh4MI0eLYsBUbSpFFW25CiE0dFka8tWrKCYQlhC3xojI6MaNWpcu3bN3d1dutzE+/fvr1ix4sfj8+fPNzQ0zMjIUFdXFx3R0NAAkJ6erqurK8VAiYmJV65cGThwoOhHHo+3aNEij+/TQV++ZAYM0Ny5M6dZM7XsbCY2NrPszG51dQQFISgIAO7d42zcqHLmDK9PH6ZPnzCh0BNYJxTGp6Xt7tz5j4iIbDU1KbwumU+rdtt7+BzqZi0UdpNnln855OTkcLlcFRUVFm126ABNTW6nTupr1uS0aiX4ejw0FP7+Gr17C1evzuVwAIAIy5aprl+vEhaWXaOGUAF/h8zMTEaGBOQSyM/XXLgwd/NmgWKfRRsbDBmi2qcP98iR7DJuqIz7XbNGxcCA5+OTnZGBuXNVIyNVT5+e5uExBYBQiO7dC5o25U2enDdpUp6cbkEEd+NGjbZts65eFVatKteBSkP00SkQCMo/tZlzhgkAACAASURBVELhxMVpHDqUdeMGyfBKGz5cffRogY5OvqQ2BAJBTk4O+wVJiDTHjMmbObOgoABsGBcKhWpifEyX3MBt69atAQEB2trarVq1MjQ0lHRsPT09Ly+vH4+LHDIxMfn0pVvdx48fORwOn8+XdAgR9vb2bdq02blzZ2knFBTg998xYQLmztVITMSTJzA11Rbffr16qFev8HHDhidiYmoDDOBM1MrWdtTYsdqhodI5XgKthmtrmB/535nGuGKD5s1ZsyshPB6PdSEE0LEjzMzQsaPGwoXo3bvwoLY2IiLg68v18zv6+fMGc3NTNbXZr19bXb8OExM5F5L4AhFpa0vwkiifTZvg4qJREc/g9Olo0ADbt2uLvsaVSGn3+/EjlizB//4HbW3tAwewaBE2b0bjxt+ehchIrF6NESNUo6NVT53CD1F07NG6NWrW1BwwAPfuyW2MshAJoeg7ulIzdSpmz9aSocDS8eN48QLjx/NUVCT+Rs/lctXV1Vl+7wDYsQM8nnrv3rLUxymKUCgU6ztNifNEExMTic6XiClTpgQEFO6x7d69u3r16qWdKfse4dix1L49BQaSioqsEXyXL1/mcKyAEKCXgcHQz5+pWjViq2L+yZPE4dDNm0TR0WRqKq9cATGQx9LoV+LiyMaGFi787uDVq/d5vGbAa+C0np6PgrMnWV4aLSggJyc6d45Nm5Lw8CEZG9OTJ6WeUNr9DhlCo0YRET16RCoqNHx4yZfHxZGhIenpyTme6+lT4nAoPFyeY5TKz7E0un8/ubrKEkiWm0vOzhQZKeXlclkazc4mGxs6L02jzdKQfmkUwLRp0zIzM6UW4bIZOHBgjRo1Nm7caG9vP3Xq1ClfuiB36NChe/fuv/32G4D9+/d/+vQpNzf3yJEjsbGxPXr0kGLt9OhRHDiArl2xdCkiI1Gtmkxue3p6Xr0atnTpijt33LKyJowejbAwNGgAV1c0bCiTZQA9e6JdO7i7A2iEv/9G27a4dAnSTpSVlipVcOkSWrfGq1dYuhSi5dCEhHtcbtuCAjPATE1twpdV85+TXbtgYcHCC0JaKlfG1Kno2xfR0YV/XnG4dQuHD+PBA6SmonZtNGiAlStLPrNKFbx+jZYtUasWVqxAGVNPmbCzQ/v2GDwYfn7yGeAnJzcXkydj9WrwSv4AF4e//0bVqmjdmkW3ZObvv1G3Lho0qIChWdRe8YmJienSpUvLli3XrVv39eDs2bPPfKkdEhwcPKgIb968KdFOGTNCUdbg5MnE4ZRRyEwaHj0iPp/q16cRI+jkSTI3l7UNwsSJVDxGZvp0qlOnQsJm5DojFPHxIzVoQL16FabVP3/+nM+vC5xRUVnduHEXuQ79I2zOCAUCqlZNxopQrHjRtGmpMXc/3q9QSI0a0caNJBCQnR1ZWopV2XHRIuJyqXFjNuu+focov14BccM/8BPMCOfOpS4yvVOSk8nYmGTpts7+jPDtWzIyksmnkmCnsszbt2/v3r3LkkvsU5oQ5ueTtzf1708cDv0ph462vXvTpElUuzZNm0aLFpG7u/Sa9eED8Xi0ePH3R4VCCgwkf3+5fcyUigKEkIgyM6ldO/L1Lfy7Xb9+PTBw5LRp8xXUL74IbI64dy95ebFmrRSys7MfPHiQXeYK8rNnZGREJb5xf7zfHTuoVi0SCKh5c9LUlCBz4fJl0tEhU1M5FRUnGju2QvLrlV0Ik5PJyIgeP5bFRq9eNG2aTF6wL4RDhtCYMWwaJCIZhVAoFC5YsEBU28XCwkJ0MCgoqMTk9wqkNCEcN468vYnHo99/l8u4z56RsTE9ekTVqtHcudSvn2T1HovSoAFZl5isnJv7wNOzgYFBLT6/T/v2iqhxRUSKEkIiKiigAQOobt2KzRljTwiFQqpeXeJmEBLy4MEDc3N3Pr9XubnPGzaQu3sJpeyK3W9mZuGmzPjxxOVKnPqYnU1eXsTjUWioZBeKi66uvN7DpaPsQhgYSFOnymLg4kWysipe/lBSWBbCuDgyNi5ehooNZBLCuXPn8ni84cOHBwcHfxXCQ4cO6erqKuZTUkxKFMLjx8ncnNTUyNdXjkMPHkwTJ1JyMjk7019/UZ060tS8PX2aOJxSP33a1KwZCxAQrKERummTjA6LicKEkIiEQho3jlxdKSEh++TJk/cUUpCsGKwJYXg4eXiwY6p0OnceBMQABJzz9x9S9snt2lFwcPGDxe53yhTq3Zt27iQOh3bulNKrMWOIw6EePYiI8vPzpeskXjKbNxOXW7QAoQJQaiG8fp3MzGRpkSMQkIcH7dolqyMsC2HbtrRsGWvWiiC9EObn5+vp6YmqqZ09e/arEL548QJAQkICu47Kwo9CmJREfD5pa8u9u9mrV2RgQK9eUWIi2dnRn3+SmZnE8wE+n9q2LfW3XnZ2OQABuxlm4cyZMjosJooUQhFz56arqHjp6o4zNPSdNEkOC9llwpoQ1q5Ncu6x/uwZ2dsP/CqENjZDyt61eP2aTEzo6tXvDha934QEMjKiEyeIy6UvtZ6kJDKS1NVJU3M6h2PN4Vj6+gbKZK4o1tbUrBlr1sRAeYVQKCRvb7EKCJXO+vXUsKEsTewLYVMIT58me3tZu5WWgvRCKGpDf//+ffpeCNPT0wFcLfbGqlCKCWF+PtWvT7q6ZGuriJ2FUaNoxAgioqdPydqapk4lU1MJlu6nTSNVVSrjc3j1kiW+BgaLebyaKipPy4iIZxXFC+GhQ4fU1GYBBAhMTYs39ZU37AhhRAS5uspvQ/fhQ+rTh4yMaPDgODMzdz6/l7m5+7hxjywsqHXrsqJzdu0iFxcq+qle9H47dKAZM0hTk9q0YcHJixcfAR5AAVDA4VR5ytbO4fnzxOHQrVvsWBMD5RXCrVvJw0OWl9mnT2Rqys7fkjUhFAioVi06eJAFUyWbF0sIS4iw1tbWZhhGVGitKHFxcQDKSDGscKZOxd274PFw754sccXiMnkydu5EUhLs7HDiBLZsQdu26NABaWnlX/vpExYuxMyZ0NEp9ZyhY8bMPHHCfOvWKA8Pu8hIFj1XKnR0dDQ0kgEA6USsFnlRGPPmYcYMCfIVxObOHXTvjkaN4OSEJ0+wdm2VZ88uRUdPffr00qJFzk+font3jBwJDw/s3o2CguKXBwTAzQ3BwSVY/t//EBuLTZtgZoaICBZczc9P4XD0AC7ABUyTk5NZMAqgQQPUqYOAAHas/bxkZWH6dCxbJsvLbOZMdOyImjVZdEtmQkOhpoZOnSrYjRLlsV69ej4+PtnZ2dHR0aIZYWZmpo+Pj6urK8t6LRtFZ4QREaSuTmpqsiYzSMTkyTTwS9+Se/fIxISaN6eOHctfeWjShCwtxR7m0SMyNCSFLEorfkYoFAq7dPnd2NhTX7+6nl7klSuKHJyNGeGpU1SlCuvTwZs3yd+fTEwoOLj8LaHz58nXl2xtacECKtYr8907Mjf/1mVXdL+i1j1Vq5Kuriz7Td8hEAh0dR0Zph8wmMdrxI5REa9fE5crv0lDMZRtRnju7FnfunU7W1ndli3qQdQInK3YNHZmhFlZZG1NFy6w4VHJyBQsc+XKFU1NTQcHhw4dOujq6g4bNszGxkZFReV/FZ0jVYyvQpiURBoaxOMpuoHRp09kZPStDszt22RiQq6uhY1sSuPSJeJwJHz2FyygZs1YWNovD8ULoYicnByhUBgRQSYmpEgtZEEImzShbdvY8KUQkarZ2NCyZSTRB/KtWxQYSAYGNGIEFS0Kf+QI2dkVLsKL7nfxYrKxIR5P9r6n35Gfn7948eLJk1dyuYLly9m0TP7+VHqbGnZRKiFMTU314POfAfcBdxOTgrJbl5VJy5Zstj1mRwhnzpR382pZ8wjv3r3r5+enpaUFQEVFpVmzZhfkqdvSIRLC/HyytiaGkb5ckCzMnk29en378dIlMjIiPr+s5gmmppKX18/Pp9q1acsWqXyUgIoSwq9ERipUC2UVwosXyd6erR3pkyepXj2yt6d160rIfBCTZ89oxAjS16fAwG/9efr2JVHqU1pa2ps3pKNDHI4cp1h//kkqKtL0NCiVrCxSVZVLUvAPKJUQ3rx5c6ChoaiNeHsTk1evXkln58ABGSuyFYcFIUxJIWNjev6cJY9Khp2EeiL69OkTm/HQrLJ9+/auXbu2aUMMQ+vXV4wP6elkavrdTDQmhgwMSF+/5DZh8+aRiopU61F37pCxMbHc/6k4FS6E9EULL19WxFhSC2Fubu79+/fTmjenjRtl9EEgoCNHqE4dcnOjrVvL6VcsJp8/07JlZGlJPj505AilppKNDUVE0K1bt9q1I4ahGTNYGKUMKlemypVZtTh1KqmpsdWdpwyUSgizXr2qpap6BNjL4Xg5OgqlWhPKyiI7O/pStosdWBDC/v1lDVYWA9aEUJnZvn074A0MnDy5It1YtKh4waOTJ0lXl6yt6dOn746np5OqKs2eLe1I06bJu9GdMgghKVALpRPC5OTk2ra2vfX1a3G50SdPSnp5WNiR3r1Hbdmyo6BAuG8fubiQuzvt28f+ynduLm3dSlWrUq1a1LbtMaAG4AF4NWgg9y2EN29IRYXGj2fVqIEBBbKXmFEKSiSEycnk5vZsyJCJQ4bMGD06JSVFOjMzZ1L37ux6JrMQ3rlDJibFN7TlgExCOGfOnIklMX/+/N27d7+XQ/6/dGzfvh0goFPwj5nDCiQriyws6MaN7w4ePkyamtSo0XdRFM2bk7m5DCPl5FDVqrR/vwwmykFJhJCIjh1TxBqpdEI4d/LkXQxDQBLQ2t1domv37w/T0/MDzqurDzQwWNGsGZ06JYULEiAQUFgYMYwrcEWUmMrnV5PvkEREFBJCXC7FxbFncdeuQwzT2Nb2j0GD5LdMpSxC+OIFOTnRrFmymzEyKr9js6TIKoQtW1JICHvulIpMQujs7Kz6peHY17YP6urqoh5dOjo68upNLCFfhHBgUFBQxXqyalUJqfG7dpGaGg0eXPjjhQuSx8j8yKVLZG4uj1pEIpRHCEkhWiidEP45deoOhiHgOdBGkoIyAgE1ajTkiyClODnJsRX727d04gQtWEA9elDlygTYAgkAAf/T1XWR37hF8fKS7Zvf90wePbodEA30ZJie7dqxZvd7lEIInz0jBwdaulR2S926yS6mJSCTEEZEUOXK0m+DS4JMQhgREWFra7t//35Rbd/09PT169dbW1vfuHEjLi6uSZMm+vr66enpLLssOdu3bwd+53BMP3z4ULGe5OaSrW0JIrd6NfF4FBQUM2jQIAODq82bszHYqFHUuzcbhkpAqYSQiI4fl68WSieEbyMj63K53Q0N3U1NL4jRPq2ggE6fpqAgMjUlHZ2/gDFABrDYzq6+pHteb9++PXPmzNuSqo4lJNDBgzRtGvn6koUF6elR06Y0ejRt20Z379KAAUMBByAIsCja9UWufP5MGhqslQuta2l5FSAgGXDR1GTH6A9UvBDGxpKlJW3YILulM2fIzk6y2GMxkU4I92zf3q9du+UmJvmKajYpvRAKBAIrK6sDBw4UO75o0aKGDRsSUXJyMpfLjZBzfWFx2L59e82aNSv+6xsREW3aRE2blnC8ZcuNgCewDPAeN67MvAoxycgge3s51XdWNiGkL1oop/1CaYTwzRuyssoPC3v8+HHZr72CAvrf/2jIEOLzycOD5s+nx48pIGA4MBhoBAxVVfVVVSUdHXJ0pHr1qEMH6t+fpkyhpUtp+3aKiqLbt+nlS8rNLTR45cpVPr+Wvv5YPt/90qXrd+7Q1q00ahQ1aUJ6emRpSe3b0/TpdOhQyR0hTp06NWjQoFsKrNJCRPv3s7EQQkREvfz8RgKZwBJgIkBNmsgj5rCChfDWLTIzox07ZLeUn09ubvKKDZZCCMP27/evVOkOMInDmc3y7nGpSC+EopIQP9a2j4qK0tDQED22s7MLlVfBeQkot0O9IsnPJ2fnEupdmZvXAa4BBDzW02Npb+bMGbK0LB6KwwZKKIREFBFBfD77WrhixfqaNVv26vXHx48fxb2moIBatCg75jI/n06coEGDyNiY6tShhQu/q4Vw5swlLrcuh7PS0LDp3r2HiCg1lR49opgYCg+n9etpzhwaOZJ69iQfH6penczMSEWFKlUiZ2fS1+8H3AAIuMblDqhShQICaOFCOnFC3ERpxTe6IqK2bUlfn4XY/dzc3Fa1a9uoqjaoXPnj8ePk4kIMQ15exGoBwooUQlFN7R8mIdKxciX5+LBiqQSkEMLRvXqdAwhIBZpXU8Qu9YsXL3x9+1y5Uv42dQlCmJ6ezuPxVq9eXez4+PHjzczMRI9NTEzC5FxiWByUSgiJaNeuEhrS1arVAtgEEHDI3r4ea4MNHEhy2BlVTiEkIlGuPYtaGBX1T6VK/sAbLndnu3ZiLzWPG0c+PiWmOOTlUVQUDRhARkbk6UmLFtGzZyUYGDOGfH0fb9my5Y4k1R8+fKC4OGrRYjjD/AMQw0QEBIwQ//KvVIgQ5udTpUrk5ycH0xcuUI0axDBUowZb1TQqTAjPnSNjY2JjzfDUqVMhIduMjN6zWzChKJIJoUBA+/bt5vP7cblJwHw1tSnDhsnLsyJUr96cYU6fP19+Oe+S9wh79uyprq4eHBx87dq1Z8+eXbx4ceTIkRwOZ+rUqUT04MEDAI9l6wzJCsomhAIB1ahBxV4eiYmJurrOHI6dlpZjHIshdJ8/k5UV6/3QlVYI6cu88NIlFkzl51PPnguA/QABQi63tpsbtWhBvXrR6NG0YAFt2ULHjtG1a5SUVKQsfng42djQu3dZWVlNm3bl82u5uDSKi3ty/Dj160eGhlSvHi1ZUlaE3qVLZGpKb95I6XZiYqKDgyef39TBwfOlVBmlFSKERBQdTRyO3PpzXLr0TQ5lXvitGCE8c4ZMTEjyVJwfCQqarKfXm8NZoq3tXuJeMitIIIQnT1L16lS/PkVHr/777w6enjPHji27s7Ts5ORQVBRpatYG6Lffyg8wLlkIMzIyAgICGOZbBWQVFZWRI0eKCvzEx8cfVFTdv7JRNiEkorAwcnNTVGP5Y8fIyYndrXBlFkIiioyUVQtv36bRo8nUlNzcLmtpNQMuqqvP9vcfefs2RUbStm20ZAmNG0e9e1ObNuTuThYWpKpKlSpRK7tHH1X445teGzaMWrRYzuP9DRBwVUXF39ubli4tv8itKPlF9nWvzzKUB60oISSiPn1IU1PWfrBlcfnyNzm8eVNqMxUghKLwaJZKd5mZeQBCgFRUlm3dymbxv6KIJYQxMdSwIVWrRvv2ycmNYrx/T/v2UWAg6euThwdZW/vxeOvPny//NV9WQv2LFy+OHz++adOmf/75R+pcTrmihEJIRJ6eCnveiQIC2E1aVnIhJGm18PVrWrKEqlcnW1uaPp3i44mITpw42aXLoAULlueU1wvtY2J6jkPVRxM37dtHK1eSp+d04Jhov8PJqYmYPowbV9i9tgKpQCEkIjMz8vaW8xixseTlRQxDLi50/frp06db1a3b089P/MByRQvh3r3sboA7OnoDiYBQT6//STammCVSjhDeu0f+/mRrS+vWKWBakJBAy5aRjw/p6pKvL61bV1jeLzU1dcKE2bGx5XcE++kryyihEEZFkbOzIhoiEhG9e0dmZsW7r8qA8gshEf3zDxkZUXR0+WdmZ9ORI+TvT4aGFBhIJ08Wr94iljAIheTv/y0hlOjBgwd8fk119b8MDZtv2SJWZ/fLl8nERPpFUbaoWCGMiyMOh83Sz6USG0teXikM4wIcAOYDLnp6Yl6qUCHcuZPMzdntFTBmzFV19XomJu6DB09g0WwxShXCZ89o0CAyMaEFC1jstSsUCj99HxtYUEDnz9PEiVSlCtnY0KBBdORICQNKHDWampoaFxcn+t70+PHjuFJg4Z7YQzmFkIgaN5axj7Qk7NpF1auzlZ36UwghfdHCr92FfuT6dRoxgoyNydub1q0rdUVOLGFYtIjq1Cn2Jnv16tWePXvul1hP9gdycsjVVa4VgcSlYoWQiCZPZrsed+nMGDhwJiCqWO3GMPmrVolT5FfeQigQCBITE7Ozs2nNGrKy+ta8hg1evyZjY3rwgEWTJVOCEL58SSNGkKEhTZxYVsNxybl9+7aFRU0TEx9X10bPnqUWXfwMDqbr18uqTSixEG7evBnAvHnziIjP50vUv7CiUFohPH+ebG2/pX/Jnfbt2aoe8bMIIX3RwrCwN6GhoWe+VBR+8YIWLCBHR6palYKDy08zK18YzpwhU1MZS1RNmED+/rIYYI0KF0KiwmdHARw7dqwuw6QD94DqDEOamsQwVKkSNWhAf/5ZmhrLVQg/f/7cyNXVz8Skpo7OGTOzkvM9ZaBLF7mXUxfxnRB+/EgTJ5KhIY0YQXIIz6lXzw+IA4hhNqupLezcmTZtEndxRWIhTExMDA8Pj4+PJ6KoqKjwUpD2XuSC0gohEbVsSWvXKmqwV6/IxITu3ZPd0k8khES0e/crDqcml7u0UqWerVvP9PEhQ0MaNIjEKPZSSDnC8Po1WVpSVJQsTooWRZVkk10ZhPDlS+LxaOZMRYw1rE8faxUVZ23tY8eOERGlpNCSJdSsGenrE8OQujpVq0Z//PE1uObkyZOVdXUd1dVFUwKWEQpXTZ++issl4A3QxMmJXfMREeToqID+HDRy2DAtDsdaV/f2pUu0YAEZG9OgQSRti6hyqVGjJZACEMOE/fGHZDr/X+k+obRCeO0aWVjIpbhRyaxfT3Xryt7C5+cSwvXrN3I4q0UpEBoatY8elXhrtixhyMujBg1o/nxZPBQtiu7ZI4sNNlEGISSiFSuIyy0MWaowMjNp0yby9SUzM2IYUlEhR8cqQBhwCbAFLosRwCIQCELXrx/Tr9/JEyeK/y4nh+7coX37aPZsCgggd3fS1Fymp7eBYQj4BDRwdmbxbjIyyNaWlfyLcti6dasL0BAYDbQDyN+ffqi+wi67dkVwOJ66uqMsLNyfS1hLSEwhZIiotFXQzMzM+Pj4jIyMhg0blnZOxbJjx47IyMidO3dWtCMl07EjmjTBqFEKGYwIPj5o1w5jxshiJicnh8vlqqiosOWXXImIiAgIOJKWthZIcHEZ8ODBWUktpKen6+jolPy7YcPw+jUOHUKRPCJJmTIFsbE4fFhqAyxT1v0qltq1kZKCly8r2g8RBQUIC/u0bVubY8cuAwAmAPXV1Do6OcHREQYG0Ncv/Ken9+2xvv68JUtSVq/ukpExT09vQnBwc21tPHqEuDg8fIjXr2FvjypVUKUKXFxQpQoqV/6Qm9u2bt1q6en3gBnr1/t27MjWHUyYgORkbN/Olr1SadmyZcuTJ88CQ4FRwOPSFYQtBg8GwyT37Pm4Vq1a2traEl0rFAoFAkH5H2glymNeXt6IESNEDSgsLCxEBwcOHBgQECCRGssbZZ4REtG9e2Riwu62cZk8e0bGxiRboYOfa0YoFAr79x9jauru7Nzg1q3bUlgodYa0Ywc5O8vYL+3mTTI1VZZFURFKMiMkos+fSV1dWKvWkrZtO0eLEwGsEMwY5hQQCzgBd8zMiMcjhiEdHXJxobZtaeBACgig1q3J05OcncnYuDHDZAAEnAbG8/nUvz8tXEiHD1N8fGmrE7m5ubdu3WK3md3du4qLSV63bl11oAkwBXAEqH59uc5Db94kMzPpq0nKtDQ6ZswYTU3NP//8c8WKFV+FMDIyUlNTU94VASRCyYWQiHr0IHnsNZTK339TkyayNHj9uYRQdkoWhjt3iM8n8SJCSyM3l9zcaNcuWWywj/IIIRFZWrYFBgGhHI6Nkmjhfk9PRx7PjscbP25c4aF792jaNPLyKoy10dUlLy9auJA+fCCi37t0WccwGUB/LnfHli1y8ioxMfFN6SonEFD9+qw0qxCXPj16aDKMhYbG+caNqWpVcnYmb286coT11tJCITVqRJs2SW9BeiHMzc3V0tIS1Ro9e/bsVyF8+fIllKOy2leUXwgfPSJjY3kUxy6FggLy8iIZmuz8EkL6+JEcHGj3bhktT5smn+qasqFUQsjlWotqoACbOndWgtWm48fJyakgM7PUqNHnz2nGDPL0JB0dkSh2VldvAXgDXgwzauhQeTjVpGrVqhyOI4fTpUnJpRtWryZv7+IaJO8ZS2HUaEEBBQWRmxtt3kweHlSjBm3dKnukwle2bycPD5ky8sUUQs6Pi6Xv37/PzMxs0qRJseOirYVPnz5JtET7H8fZGb6+WLpUUeNxudi4EdOmZT958uuZkgahEIGBaN8ePXrIYub2baxbh5AQttz6d6KqqgLcBYTAmZo1XSrYm+xs/PEHQkKgplbqOTY2mDULly8jLQ1v32LmzITc3DAgBphHlLFhAxo3xvjxOHUKBQWsOHVhx46CuLhYoTBeKIyLjn43cyZ270ZMDJKSRCekpCA4GCEh3zayly9ebMnjVdPSqmVhUcCSG6XC5SIkBAMGYMYMbNqEOXOwZg1q1MC2bbL/BTIyMHkyVq0CpwSZYpsftTEjI4PL5UZFRdH3M8Lo6GgAr+QWIysFyj8jJKLnz0lbe1eHDkPXrdsiZHvpoEQ2tWvnrqra2Nh4YNeukl77X58RzppFDRvKWJ0gL4/c3VnpKMc+SjUjPHHihKamA4fjwDCTFLdqUhpTp4oq4EmUR9jKw2MEcBloxjCr69enhg3J1LRwZ1Fbm6pWpR49KCSEilRI79aqlY2qqoe5efFWd3FxtH49DRpEDRqQtTVpaRHD3GeYLl9qAtQH3laqRBoahfYBYpgCjkquihYZGpKVFVWtSl5eLgzzDiBgEMPMlFuSSvGE+n37yNS0sMLF+fPk60t2drRsmSzJHJMmUd++svop0x6hj49P3bp1P3z4EB0dLRLCN2/e1KlTp06dOrL6xSo/hRBu3rxDVfU34IqOzsDFi0PkPZxAIKhhoEuLQgAAIABJREFUbJwHEBBoaHhVwuprFSKEZ06d6t2mzYTBg9+J2VWPPb4ThogIsrSk5GQZbU6fTr6+MtqQF0olhF8xM6OWLSvUg7g4MjYWpdhLJITZ2dm9OnXytLKaMWnSd79ITKRVq6hbN3JxIW1tYhji8cjMbK21dXcgAzgANFJXL6p5xDCkpUW2ttS4MQ0dSps2UXy8QCBwMTRszzDNORwvO7vvhsjPP7cpvqfJ/3LWhdK8eTRyJAUEUMuWLgwjAAhYBMyztJSl/ngZlFBZ5tQp4vO/7YrHxJCvL5ma0oIFlJkpqf0nT8jIiIUKRDIJYVxcnJGRkaGhobe3t7a2dqdOnfT09LS1ta9duyarX6zyUwhh+/b9gTsAAS+8vTvLe7j8/PxaxsaijZcghjnXuTNJ8qxJLYTb1q/3tLPzqV79xvXrEl34+PHj+kZGt4HdXK7vj+0c5cw3YXj6lExMKCZGRoO3bhGfL7/cYllRTiE8e5Y4HDl9YouBUEjNmtGKFaKf5FJZRtSseezYobq6B0R5r0A14JvmldlbeM+ePYUFAYqQlUUODvTDYerg7d2EwxkH2HK5KU5OxDBkZkazZ7Nb/rjkWqP37pG1NQUHfzty5w4FBpKpKQUH06dPh/btC+rWbd2KFQXl7SP6+tKiRSz4KWtCfVJSUlBQkIODg66urqWlZa9evR6yWhOPFX4KIVy0aJWm5jjgLcPMql37TwVMtwJatfLkcDpxONUNDPKDg8nBgapVo8WLxZnrSCeE8fHxzYyMMoGnQG1RW7X9+2nnTlq3jv7+m+bPp4kTadQoGjSIAgKoc2fy8SFvb/LwIEfH3YaGi0XrPEBtNTUaP562bKGrVyk9Xaq7l4xCYcjKInd3Wr5cRmv5+VSrlgLLzEqOcgohEdWrRw4OFTT29u1Uq9bXEA+5llgLDQ2tyTCngTFAY9kKzU2eXGozk3379s2cObMw0PTdOxo8mHR1iculhg3ZanNRatHtV6+oZk0aMeK7EJcnT2jQoKM6On5qapeBUVpa86dMKcP4iRPk6MhOyW4xhZBX2t6hpaVlyK+9fjYYPXrIx48Lo6J6e3nVffJkko8P9u6Fqam8hiOi2Fu3dgmFOcBfwD0/P/fgYMTEIDQUVavC2xt9+qB9+7IiAiTi6VOcP/909+56Hz9qAnaAyseP+QsWqOjpQVUVOjrQ0oKqKvT1oaoKLS3o6EBVFZUqQV0dGhqoVKnWy5chXbu2+fDhIYfDt7aGgQFOn8aqVYiLA58PFxdUq1b4f5Uq+CEZPDU19ezZs1ZWVh4eHtLfRVAQXFwwYoRMfwpg7lyYmaF3bxnN/BcJC4OFBVavRlCQYgdOS8OkSThwAFyuAkbr06dPZkbGzJUrHWrWjAoNldpObCw2bMCdOyX/1t/f/9sPRkZYuxZr1yIsDHPmoF49GBlhwADMnMnah0BRzM1x5gw6dULXrti5ExoaAODggHXrTr9/P/bQIU+gSmZml5CQSQwDR0c4O8PREUWqW+fl4Y8/sGKFXLwrFRY0t+L4KWaERREKacECsrJiqwdnCeTl5dU2NhZNsEYyzFkTE+ralf76i86epXfvaN8+8vUtoyKnWDPChARat44CA8nWlszMyN8/ccoUWw5nBzAXcNDSktTnk//8E9C8+eh+/YonS716RSdP0rJlNGgQeXuTtjaZmZGPD40YQevW0fnzb58+dbe0nKWt7WdouKjogox47Nyyxc/La1KjRp9dXWXvGHvnDhkbU1KSjGbki9LOCIlo8GDS1FRU/7KvDB1KQUFFD1RMh3pJEAqpSRNavVqqiz99otGjycCAuFzy8hJ9CMyaMaN59eozpk4V30w5/Qhzc6lnT/LyoiK7/ts2bhyirf0e+FtFZXyzZjRrFvXqRZ6eZGhIurrk4UHdu9PUqce7hU5ocKFodYCXL1+2rVOnlpnZgM6dJVqvSk5OHtaz50Mx4iTKKrGm/Ch5ibXSiIhAv34YMwYTJ8rF/gQ/v6fHjlno6t6zto7as0f19m1cvYqrV3H3LuzsULcuHB2RlIR//oG6Ovr0Qa9eMDMTXZuSkqKhoVGpUqXvLObn48YNxMTg3DlcuABjY9SrhypVYGKC7Gw8exZ16VLUpUvmAoEhsEFN7dy4cao1a6JGDTg4sBn7LBTi+XM8eIDYWNH/m+/fz8rLG04kALy0tK4FBqJSJTAM9PQAQF8fAPT0wDCoVAkcDnR0wONBWxsqKmdu317ev/+yz5//xzCXfXw2njghi2sFBfDywvDh6NuXhRuVH8pTYu1HhELo66NbN2zYoKghr1+Hnx/u3y98qQAARItpGqKpjFKyYQM2bMDly7K9t8LDMWcObt9ep6YWnpMzkmgFwzj06bNyyxZxrm7evPkff/zRsYwScUSYNQs7dyIyEo6OAIjo77lzTx46VLNevRmLF2tqan47+dMnPH6MJ08ybj+JWhHvW+WJ+ssnKCiAoyMcHXtfv9736dNmRHPV1AyHDRvas2fhVaJFpqJoaEBd/etPrZo0+ePePZ+LF9W9vMq+nYoRwidPnixZsuTDhw+tWrXq378/830tx/T09H379l24cCE3N7du3bqDBg0q7UX5kwohgMREdO0KJyesX1/8qZQVInh53e7Y8ZOXV8OGDXm8IqvfBQV49Ag3buDGDVy4gNhY2NiAx8Pz5/DwwLBhLebMeRobm88wLfz8Nu3YgcuXcf48zpzBtWswMYG5OTQ0kJeHly/x+jXMzWFvD3t7mJm90tTsMn/+ltTUJIb508IiesCAQrl6+hT29vDwgKsrqlaFpydK6fCVk5OjpqbGSFjV83B4+NlevZZmZr4CepiYnJ85E58/gwipqQAgyqRMTQURPn+GUIi0NAgESE9HQcHCN28cMjO7AgDqWFldS0yU6s9dyOzZiInBP//IUpdUESizEALYtQuBgUhMhIWF/AcTCODpiVGj0KvX94eVWgjfv4ebGyIi4O7OjrnmVlYrc3KqAk+AUQxzzNUVhoYwNYWdHWxs4OQEN7eib9uCgoJaFhbP3r1TB4ZPnBg8f35Z9leuxMKFOHwY4u1c9OkDS0v8+SeAb+rYdNSoI+/e6QAngDPGxvOtrQvPzstDZuZ312dnIyfn6091UlOvEQl/+42zY0c5A4s/zWSLtLQ0U1PTKVOmhIeHV65ceenSpcVOiIyMbN++/YYNG/bt21enTp2OHTuWZuqnWxotSnY2/f47VanCdhfNHTvI01OsWkefP9Pp0zR/PnXoQPr6d3i8tgAB+YAbkMPlkoYGcblkaEj16lFgIAUHU2goRUdTYuKPxR6iz5zp3rRpUEBAYmLid0PExNCaNTRkCNWvTzo6ZG1N7drR5Mm0Zw/FxlJ+vlAo7N+pk6exsRuff1zCPl8CgeD3Ll1qGhvXtra+fPGiRNfGxMS00te/CyxRUxtaWtSBeMTGEp9PRe9baVHmpVERjo6koNjhlSupadMf3ylKvjTaqxeNH8+mwfbe3nOAfGAh0NPcnLp3p8aNqVo1MjMjXV1SURHtsxCPRzo6ZGq6nc8fCrQD9gFWXG75A4SFkbExHT9e7okXL5KlZQlBcuuXL/fT19/IMHWMjG7euCH+rbXz9NzJ5WaIEQpeAUK4Zs0ab29v0eOoqCgbGxvB95+qRbPOY2NjORxOZilpKD+1EIrYupX4fDpwgCVzmZlkbU0SSoKIXSEh/l+iN2syzOvQUHr4kJ3Ira8IhZSQQGFhNGsWde1KTk6kqXnSyWmoqioBnwEPS0s2hyuPI2FhPVu0mDdliiwffPn5VLu2TOUQFYnyC+G9e8Th0D//yHkYUSv3uLgff6PMQnj2LNnYsBxP/fnz5/pOTlYqKvUcHD6VVtfg3Ts6e5bWr6fJkxe5uAQD7YAjgDWHI9YYly+Tqamo9GN+KZvAAgHVrUs7d5Zs4Pz586tXroyXsHHX+/fvJwUFxYuRl1MBQti/f/9JX5JPMzMzUWa1mqioKAMDg9IKsvwLhJCIbtwgOzsaMYKNMIFZs0oNqS6P/Px8Bx2dngzThsPxtLWV2RXxyMg4tHDhTDU1AgSAO5+voHG/ILswzJlDzZuzXm1YXii/EBJR27ZkairnMXr0oFJiQ5RWCHNyqEoVOny4gt148+aNpaqqFVCFYTqXUv60BJ48+ezg0MrU1IvPr+fo+GPN6g0bqH599t9HsqZPyEJ+fn5ycvKPx01NTVVVVVNSUlxcCusKampqampqpqSkmJub/3h+WlraiBEjZs+eXdrW0YsXL06dOtWsWbOvR+bMmVOjRg02bkJxODvj7Fmmf3/1pk0RGppjYiLlri3z+rXmihVZ585RRoZ0Fq4nJm7evFlPT69bt24Z0hqRFO++fRdu2JD6/v3j7Oyu2toZqangyeVlWSKZmZmSbkwW5dEjzooVGtHRWZmZP0fQmYz3qxg2bYK1tfaMGXkTJuTJwz43Jkb94sWs5ctLfKeIPjoFAoE8hpaFuXNVK1fmNGuWo6i3Zsloampee/GiSZMmXbp2nTRpkrgfFCYmy1u39l+9egDR1bdvpw0evLFIl870dGbGDM09e7IzM4XseisUCtXEyMOQyyfOo0ePOnTo8OPxgwcPuru7a2ho5HzZzxQKhaJmFz+enJWV5evr26xZs6DSE4tMTU1dXV0nT5789UiNGjUk7dyoDGhr4+RJ/PUXmjbV2rsX9epJZeXPPzF0qFbVqrJ4EhQUpODGvNra2tH371+4cMHU2LhqcDCGD8f27QqLOSEiKV4w+fn5v/02PCbmelqaWXDwOhcXBYR2sIN096tgtLUxcSL++kt10iTVoqGF7JCXh9GjERKiVUrclrIFyxDRjRs3kpNVN2+ufvMmlOHp09bWtrOz8/LyksiZzIICSyIAVkBaamrRa6dPh58fGjVi/ckubMxb/nksT0TFYNSoUb///rvo8YsXLzgczo/LNVlZWc2bN+/bt6+gzA4c/46l0aIcPkx8vlQZQqL+lZ8/y+hABRfdzsqiBg1o4kSFDSjdUuGKFWs1NGYBBJxq3boX617Jj59iaVSEkRF16iQHu7NmUeeyKh0q1dKoUChs2rSLkVFvFZWuHh5yafMkHeXkEZbEgwcPapqYBGtr1+fxjnbrVuQ48fkkpzLD0rdhkjf+/v5Hjx798OEDgNDQ0NatW4viuU+ePHnr1i0AeXl5/v7+BgYGGzZs4CiiA4cS0aEDLlzA2rXo0wdZWZJcOWoU/vwTurry8kwxaGggPBxHjiiwc5XE5OXh2LGk7Oy6AADP589lyrv4RWmEhuLwYTx8yKrRhASsWIElS1g1KkcePnx4/z7v/fut+fn7ExPjfureai4uLifu3fPYtWvn1au+d+5g+XLR8dGjMX06jIwq0jfFbcZ8pX79+n5+fjVr1rS3t09ISIiMjBQd//vvv+vUqePu7h4WFnb8+HEbG5vKlSuLfnX69GkbGxvFu1ohODriyhUMG4ZateLy8gZnZWV6elY/eHADr4yds/37kZaGPn0U6KbcMDTEyZPw9oahobIVK3v3Dps3IyQEBgaddXSGZGQk6+kdHTSoZ/lX/kJy2rVDjRro0gWxsewZHTkSkyfD1pY9i/JFQ0MjJycVACAkylDknoU8MDY2bt++PQCcPImGDWFmdojX7eVLDBlS0Z7JZToqBgkJCRcuXCjaRvnTp08ZGRlElJub+/F7Slsg/fctjRbFxqYtcB8gDY0ZmzaFlnpebi45OtLJk6wMqiz9CO/fJxMTioqS9zhiLhXeukX9+pG+Pg0aRPfvExE9fPhw+fJV586dk69/bPMTLY0SUWIicTjfGvvIyr59VK1auc0mlWppdM0a0tGZqq9f19i41ty5shaFZxEplkaLc++ekG/SxzTq9GmWfCqJiowaFQd7e3t7e/uiR/REZbEAVVVVVVXVinBKueBwPgKOAHJyqiYlvSj1vKVL4eYGHx/FeaYAXF0RHo5OnXDsmJg1KeSBQIDDh7FiBZ4+xbBhePIEBgaFv6pcufLXFYtfyAkrK/TsiaFD0aOHzOFT6ekYMwY7duDnmVQtXoyQENy6NdfEZBKPx1MvUjzs30C1alv8wpdt76SnewyosPe4iP/WDtzPRVBQoIFBVx7vb4ZZ0KRJ15JPevsWS5Zg4ULFuqYQvLywfj18fREfr/jB09KwfDkcHTFvHvr3R0ICJk78poK/UBhbtqCgAGPGyGxoxgy0aoXGjVnwSSEsXIiNG3H+PBwcoK2t/W9TQeDlS0wM88pbtR6+vnj0qGKdqbAZ4S/KZdy4oCZN6sbHxz99GjVypMmFCyVVJZ0+HX36wMmpAvxTAO3bY/ZstGmDCxfk2Lnqe548wcqV2L4dPj7YtUvaVJZfsASPh8WLMXw4Jk8urU5tOXz48EH7+XO13btx7x7b3smLGTNw8CDOnPlaDP9fyNix+OMP8Ae0h+pfaNkSMTGwsqooZ34JoVJTu3bt2rVrA0hKQmAgDhz4vt78gwc4ehQPHlSUe4pg4EAkJ6NlS5w7hy+L52yRmZl54cIFV1dXKysrIpw6heXLce0a+vbF3buwtGR3tF9IyZAhmD8f3bvjzBnJLhQKhX07dHh59eqn1NTxv/3W09hYPg6yCRHGjMG5c4iOruBASrkSE4PLl1HY6CIwEC9fom1bnDtXtA0IK8THx/P5fIPyFnN+LY3+HKxahY8fMXv290dFccdsy4PSMWMGmjZF587IzWXR6ps3b6pWbdSzZ5S7e0C/fnvc3DBhAtq3x7NnWLDglwoqFwcO4Nw5XLwo2VXnzp3TvHjx9Lt3l/LzF0VFycc1NhEKMXAgrl3D6dP/ZhUUCDB8OJYuxbdqCZMno2VLtGsnYdJYOUyf/lfDhqNu3Sq/9s0vIfw5UFHB3r0IDcXBg18OHT2KpCQMHFiRbimMpUthZIQ+fSBkpwJTWhrmzNmTlDTs06dlHz78c+DAyrVrcfMmBg2C0lQU+cU36tRBo0YICJDsqtzcXF2hEIAqwAiFpNy9VwUC9O+PJ08QGYli/UD/ZaxZA0NDdO78/dHFi+HsjB49UFAg+xBZWbh9GytX7nn/PuLGjfK/1f5aGv1pMDFBWBhat4ajI2q4FmDSJPz9tyLLclYkHA527ICvL4YPx+rVkl6dnV3YHjE2FvfvIzYW79/DyEiTw/kkEAD4bG2t2qCBHNz+BXscOABTU6xciT/+EPeSpk2bLjIyGpiZ+VxfP2DwYGUuspqXh549kZWFyMh/7VexjIyMFi16PHmSkpqqcfToNsDuu18zDDZsgJ8f+vfH1q3FooQvX7587979pk2bODo6FjMrFCIxEfHxePQIDx8iPh7x8Xj7Fo6OoiWkbENDMeKM5JjBIX/+3XmEJXLwINnaUvrcZdS2rTzsK0seYYl8/kzu7jR/ftFjkyfPs7LyqF27zdd69nl5lJBAR45QcDD5+1PVqqSuTlWrkr8/BQfTvn10/z4JBJSVlVWnTitj4yZmZjViYqRpXPUz8nPlERZj1ChSU7sdGNh3l9iphQXdul2dMOHp06fijzJ8+HB/f/+3b99K5aM05OSQnx+1b89y0zP5kZCQYGpq2q1ImbRySUujP/5YyOOtBQi4UGphwsxMql+fpkwpemzlyo36+r4czhojI4/o6FvXr9O+fbRgAQUGkocHaWmRvj55e9OgQbRgQeEbvKCAiGj37kPGxtVPnnxUrnsV06GeLX7eDvWyMG/8p6ErXHSunuLVcGXdeE5OjoKLbktGcjK8vTF1KgYMAHDq1KmuXUNTU0OBe6amExo2PBEbi2fPYGcHV1dUq1b4v4NDqTPnV69emZmZ/Xcq+Sl5h/qyCQlZO3z4JqA/w2wZPrzpihXlZQ19+ABHRzx9Kn4IhqamQ3Z2XcCUYfa8fx9bbpAFgLy8vOfPnzs7O4s5RDGystCxIwwNsX37z7G+8+DBA1fX5oAWoGdsnPf27V0ivHuHd+/w9i2Sk7978O4dkpPx9i24XHC5E9PSfIAWwBt39743b0aWPMCHD2jYEAMHYvTo/Hw8eIC2bZu9fh0O6AInVFTOVq8+r3JliP45O8PZuaRw+i+IGomUW0L9Z/jD/+J7JufOjLDwP7rGde3ainZF8ZiZ4cQJNGr0NNXgKK/Ttm1PU1MbAlygZmbmx86dMX06KleG+PUYdHV1/zsq+LPz119bgRVAPaL2q1cHpKbCyQnVq8PLCyYmJV2wbVtynTp+rXqYmRlu2bKqNFV7/x5Xr+LBA9y5k5adrQPsBkCU5+5+rH793mZmsLKCjQ3s7ODgULya7969e3/7bSyRpYrKq7i4c3Z2diUOURqfP6NdO1SpgvXr8bO8DCdMmAAEAVeAIe/eTTMwQFoa9PXB58PYGGZmhQ/q1//uiKYm7t8PbN68d0bGdQ2NyEmTRpdoPCcHdxMM43ufaDOjwaqVBn+96WNrC8CcYW4SNVFTuzF/vuXoki8tGR6PJ86S+C8h/Nl49IjZs7vx1QeT2iMkBMOGVbQ/iiI7G9eu4dw5xMQ45qYdPjixXZ4vPzCwxYsXnT9+1NLSuurv37hHj4r28hfyxMrKKDHxBlAPuK6iYnTlCiIjkZ6O3FwwDNTUUKkSjIxgYQF7e1Srht+WrA5IzrgmDAEe29s33LUr9sEDPHqEp0+RkoL375GWhtxcEEFVFVpa0NfXArKATEATePz2bdezZ8EwyM5GTg7y8iAUgmHA5UJNDRoa0NZGYuJqofB/QJXc3NDu3cdfvXpA/Nv5+BGtWqFePSxfrrC2YyxgZWUFxAEA0oA0d3ckJSEpCRoa4POhrQ0zMzg4FP4rGvXj6uraq1e7gwf3ennVadeupehgejru3MHNm7h5E7du4fFjVKkCd3dL7sjjU9Y0n7jTRL1j66Sk+R07Dnz9emzdutWHDVsnj5v6tTT6s+Hri+bNMXr0s2eoXx+7dqFpUzbNV9TSaEpKiq6urub33edSUxETU/jv9m1Uq4YGDdCwIby9YXTnFAIDcepUgqrq3r3hDg7W/v5dpJjb/dRLhVLwU9/v27dvXVyapKZmaWqqXrkSXrVI682EBNy8ibt3ER+PxESkpMDp3cWVmf4uGEKYDgCoq6p6WUuLY2AA0STPyQlubqhR41s5ivR0mJv3yMg4B3BMTY3377+1fTv274ePDwID0aYNeDwkJ+PxYyQk4OVLvH6NDRtqCwRHATMgHLjK480zM4ObG+rUQZUqhQt3xXr2HTsWGRp62MnJ+fjxoDZt1MWpCvX48WN1dXWriss3L4pAINDXr5qengRo6OgEjhmzLDgYQiGSkpCQ8O3fkydISIC6Ohwc4OgIBwe8fLlt9+4r2dlzebztHh5J9vaLbt7Ey5eoVg3u7qhVC7Vqwc2tyHLOlSto3x7h4ahfX2pvRf0Iy/9AE3+3Uwn5zwXLnDpFDg5ft9RPnyZTU0pIYHMExQfLFBQUNGnSmc9vZWzsHhq65+VL2r2bhg0jNzfS0aHmzWnmTDp1ijIyfrhy506ysqIXL2QZ/acOHpGC/9D99uv3oH9/DqcOkAbcVVGxLvt0gYB8fWnEiOJFt1NTad068vYmCwuaOJHi47+7avbs+RyOI8P053ItwsMvrV1LHToQn09aWmRpSRYWpK5OlpbUvDkNHUrLltGSJTGVKrUArjHMnzVqjBDnPpydG3A4bhxO5QYNOkr+V5AXoqLbyclUpw717Uu5uSWflpJCFy7Qtm00YwbZ248GzgEEpBoaNt+6le7epfz8Moc5doxMTSkuTmo/xSy6/UsIfx4KCsjNjQ4fLnosJISqVSMWP9wUL4QRERGVKo0GCMjicmsZGZGfHy1ZQpcvl/cmIRIsXDikUqWaRkZ1bW2vXbkixej/IWEgov/O/aalkYEBvXnTt+9wFRVrHZ3Kx48fL/uKsWOpRQvKzy+1+8S9ezRmDJmYUMOGtGULpacXHr9x48asWbNSUlKKnpyYSNu2Uf/+5OBAhobUqBH5+1NAANnYzAUOAgQIjYyqluhJZibFxlJkJG3YQP37X2aYJqLzORznYqNUIF+7T2RkkJ8fNWtGnz6Vc8nhw8f09NoDF7W1R0ybtkDckXbsIGvrG8ePb9269YXk33p/CeG/jrVrqWnTHw8PGUJ+flRKoyqJUbwQ7t9/WEVlKkBAvpGRu1AowbWHDx8eoapKQCLQqEoVKUb/rwjDF/4r97tmDfn7i396aCg5OdHHj0TltWHKy6OwMOrQgfT1qV8/Wr36oqmpu4lJd3v7um/evCnxkidPaPVq6taNrKyIx/sDaA+8BjYxjL2HBzk5kZkZ6emRujpxucQwBBCHQ6qqpKVFurq3AD+AAAK8mzZ9LcPsiE2KtmESCik4mKpWpWfPyrnq0KHDAQHDQ0I2FojyG8Rja5curbjcZTxeLWPju3fvSuSnsrdh+oVkpKVh1ixERPz4mxUr0KIFZszA3LmKd0tWEhIwb14rLa3lPF5fhnk2YcJAiaIG3r996ywUArAAsl6+RFJSBdbt/YUSsXEj5s0T89yLFzFhAqKjxUqyUFFBx47o2BFv3mDHDowd+2d29kHAjmH2tGq1vnLlaenpEP1LS0NqKtLTweFARwe6ujA2Rlra28+fzYGBgCOgbm6O6tXB58PUFBYWheGpRQttC4XVTU0TPnxoA2QaG+skJZlVrQpra4wZgxEjpPrLyAGGwcyZMDdHvXo4cADe3qWe2alTh06dOkhqP/ThwzCBoBJQ5d27PevWua1aJZO7JSKRuiob/6EZ4fjx9Pvvpf3y/XtydGSnf6kiZ4Th4WRqSsuWkUAguHXr1suXLyW1kJKSUtPCYr66ehc9vfkNGxKfT/7+dPWq+Bb+KzOkL/wn7vfOHbK2JvHmHImJZGFBERHfjkjUmLd27bbAc4AYZm/LlrN276Zjxyg6mm7epIQEev+++ObZ9evXuVwLhhnH4dQKDBwq5ijh4eH/+9//RI9fvKDu3UldnVQFXBSyAAAgAElEQVRVydeXvpSRUDQlNuaNiiJjY9qzh+WxAlq0iAEIWMQwKywsaNeu8ndNvvBrafRfxNOnZGREr1+XcUpsLJmYSCQBJaMYIczPp4kTycaGLl+W1dSHDx/27t17WWQoLY2WLSMrK/L2piNHSIxl1v+EMBThP3G/QUE0e7Y4J2ZlUZ06tGTJdwclEsLo6PMmJrX4/EBb29rJycniXJKYmDh79uyvwiY127eTiwsxDFla0sKFrG2OiElpHerv3CErKwoOZnOsZ8+eNXNz8zAxCWjZMicignx9ycyMgoPL35b8JYT/Krp0KVZXrETCwsjCgiSfVn2HAoTwxQuqV4/8/Aq3ZNgnL4+2bqVq1ahGDdq6tewvj/8JYSjCv/9+s7LI0FCcWGKhkHr0oN69ix+XSAiJKD09/f79+xVVmPD5c+rVq3CC2KYNPXlCnz9/7tjxt5o1mx88eFB+45YmhET08iXVrEkDB4o/bZOcmzcpMJAMDGjECEpMLONEMYXwJylm8J/k2bNnrT08PIyNR0dFCYcPL/f8jh0xaBD8/dntVsQyR4+iTh34+SEsjPXWY19QUUHv3rh3D6tWYf9+ODlh4UJ8/iyfwX6hZOzbh3r1YG1d7olz5uDFC6xfL+uA2trarq6uFVWV0MYG27cjOxubNuH5czg5wcCgT3h45du3R/n7Tzh37pziXbKwwPnzePUKvr5IS5PPGO7u2LYNN25AQwMeHoXvdxn4JYTKy+jAwDk3b954/54rEOwNDxfnkunTYWmJoUMhFArz8vLk7aFE5Odj7FiMGIGjRzFxokJKaTRogKNHcegQYmNhb4+RI/H6tfxH/UWFsnEjfv+93LMOHcLmzQgLg5qaAnxSBL164cED3L0LofARMB3wFQpHh4ZuqxBntLVx+DDs7NCwIZKS5DaMrS0WLMCTJ/DwQNu2he93qUrE/BJC5SXl9Wt3AIBXTs6L+HhxLmEYbNmCU6f2VapU08Ki/sCB4+XqofgkJqJxYzx+jBs3ULeuYscWfXm8ehUFBXBzw5AhePxYsR78QlE8eoSEBLRtW/ZZd+5g6FCEhZVSofRnplo1qKvnAheBTCAqJ6dlRXnC42HNGvTvj/r1ceuWPEfS1cXIkUhIwKBBmDy58P2eny+RjV9CqLx0CQzso6KymWHmGxt37NlTzKs0NSkr68+MjCvv318PD0+8Jd/XoFhERMDTE5074/BhiFHNXz44OCAkBI8ewc4OTZuifXu6cGHm2LFNXFw6N2r06tWrCnLrF6yyYQP69UOZq5QfPqBLFyxfDnd3hbmlUE6c2KqvP1BVtWrNmpX37u3Wrh1b3aylYeRILF2KVq1KzPxiFVXVwgXSxYuxfz9sbDBz5v2LF9t4eMRfvFj+5extX1YA//JgmcTE/+nqhixenCBJFbW8vDxj49qiDFx19ZEnT56RaEx2g2Xy82nSJLK2pgsX2DLJBpmZFBJyyNR0MJcrAM4yTOdGjSraJwXxbw6Wyc0lE5Oy8wny8qhx43JiGiUNllFmLl8mbW0yN5c1hu5HygiW+ZFLl8jMjFavJiJ6+/atQAERrteuUffu3lzuQyA/MrLc03/NCJWYTZua9+4dNHasvb29+BepqKj4+TUxNPSvVGmUquqd0aPr37kjPxfL4s0btG6Na9dw9aosVXPlgKYmgoIeDx7cTCDgAA2Jkp4/r2iffiEz4eGoVg0/dDAvyvDh+H97dx5QY/b/Afx9l9xS2hftm7JlSbeRlGVaGEsxZRhFU4aS3XznK8aXMoPsDUNUtFiGCBPGEjKWZBgiSwxFEhqlVNpu9/z+uDP9mrppcbe65/WXe855zvm4rvu5z/Oc5xxNTSxbJrGYpGzgQLx4AR0dWFigZdMMxMLBAZcuYePGQk3NwX36TDUx4d69e1e8Q3K52L+/SkOjO8BMTm62OU2Esqq2FrGxgu1nWys6el1KypLDhz0KC1O+/baTmxvWrJH05ZHUVNjZwckJZ840fyfmwIHDXO5oT8+A52K8sd7QKG/vDdrah4DZTOZn48ZJbFxKXJqbJhMRgWvXsHt3u9n5TyRUVZGRgYAAeHmhVTv5iZalJT77bFtxcfDr1ydfvIifM2eFBAbtOXDgciWl4i++aLYlXWJNVp04AUND9O/ftqNt/7kBMnUqhgyBnx9SUhAXByMj0UXYSEVFhYKCAoPB/v57REUhIQGurs0fdf/+/VmzthYWJty8mZWbO+3WrTNiDLEeGxubnampSbt3u5w583ndTjxUO/X0KW7dQtM/aFJSEB6OtLQP7WbegUVGYtgwTJmC06dx4wb+vd2ZhPD5lYQI9idUKyurkMCIO48c2RsfX2Zs3OzMBJoIZVVUFGbMaNuhfD7/119/LSkp8fDw6NKli5kZUlOxZQsGDMCGDZgyRbSB/s3be/rp078zGNXGxkv19Hxu3kTXro0Dw6tXePbs7508c3Px7Bnu3LlTVDQKMCTE8OXLELEE1wQbGxvTpUu7+PjA3R1+fmi3G/VR2LkTvr5QVGxQfPfu3U2b4pSUdBITZx48qNqamwwdzcSJcHTEwIEwMMDFi+jbV9IBLFw47cgRr8rKlPLyNA5nTU3Nh2c1iYCCgsLUgIDa2tpmW9JEKJPy8pCejsTEth09bpz/b7+pV1XpGxq6Zmamdu7cmcnEvHlwdsaUKTh5Elu3ivhh9gsXLhw58prPvw1UPXzY/9q1yQUFjLNnkZ2N/Hy8fPn3H54+BYcDCwvo68PAABYWcHKCr69DUNDEwkI7JjOrutq0tFTi+ahvX7i6YuNGLF8u2YEpEamtRUJC44mJL1++dHX1f/16FYPxxMJiytChv0glOtlhbIznzzFiBAYMwLZtbf6l3UYWFhYPH17KyMiwsFgaHKwzaRL27xd7LmwhmghlUnQ0Jk9u2/WLmpqaa9cevXt3FcDr10WXL191d3cRVA0YgBs3EBKC/v2xaxdcXEQQKSG4ehUhIQV8vjkAoFNtbbWhYaWxsZKpKYyNYWwMJyf4+MDICEZG9baf/n9m5ubbIiISjI27vngR6+aGY8egoyOC2Frhhx/A5SIoqAM+WSYPTp6EkRF6925QfO3atbKycYAbIW6lpbv4fD5Trm4PCsNi4exZhIZi5kycO4cDByQ6uoqKipOTE4DEREyYgMmT8fPPYMtCFhL7NFZx6piPT/B4xMSE3LrVtqP5fKKi0g8oBHhs9ihNzXuBgSQ19V9r8qakEGNjMmMGKS9veHjLH5948IAsWkT09EiXLqRTpzwGwwoIAsYoK3drW+SC4JctI1ZWpDUPjHyU/3+cYO5cMrdFO4a3ax3z8QkPD7JrV+PiR48eaWoOBQqAtB49WvqETEd6fOIDrl4lysrEzIw0sYtiM1r1+IRQVVVkzBgyYYI4lySla422YydOwMiobdNkKivh6wsTk/VGRiO7duUuXeqSkdGrZ08sXQo9PQQG4vJlEAJXV2RmoqICXC5u3mzdEIWF2LQJ1tawtcWmTbC0xPr1yMsz/OGH2dra501MXpw4EduGyAUYDISFYckSDBmCP/5oczdt8r//Yd8+PHki2VGpj/bqFS5dwoQJjWusrKycnedra092d//pYz6WHZKDA/Ly0KkTTE0rDAyGKSgYm5s7FBUVSSyATp2QlIT37+HjAx5PYsM2QYy5WPw65hnh6NEkLq4Nx714QbhcMnkyqagQUpuTQyIiyIABxNiYzJ1LLl0ifD7Zu5fo6pLVq/9/77amzgjfvSNbthAbG6KgQBQUiIMDiY0lJSVtCLNFkpOJjg45cUJc/df51xlSWBjx8RH7kFLVAc8IV64kgYFCa8rLiY4Oefy4df3JyRlhHS2tr4E1AAHW29uPbOFRH39GKFBZSUaNIhMntnD7yFajZ4Tt0/PnSE8X+vP2w27dwqBBGD0ae/c2njoHAGZmmDcPf/yBkyehoYFp02BhgWvXEBeHlBQMG4acHCFH1dQgLg52dtDUxIIF6NQJ27ahqAhXr+Krr6Cq2vq/YMuMHYvjx/H114iOFtcQQixciPPnW32OTEkRIYiNberxwT17MGgQLC0lHFM7w2DcAMYAADxv3OBYWcHDA2vWICNDEqNzODh0CG/e4OuvpbkUHD0jlDHLlrXhTtWBA0RXlxw92rqj7t4ly5cTS0vSqxcZM4ZoaREbm2+YTCMWy+ibb/6XnEyGDCEKCoTNJvb2ZPduUlnZ2rg+1uPHxMpKxJt8NtDwDOmnn8iIEWIcT9o62hnh2bOkb9+mKvv2JefOtbpLeTsjnD37WwbjU+A4g+Hm7h4yYwZxcCB6eoTJJAwGUVUlPXuS8ePJ1q3k1au/D7GxGc5gKLFYOtu3x4gkhvJy8umnxN9f9NsL041526GaGmJkRDIzW34En0+++45YWLTqoIY9XL5MZs8mamrXgSFADfAO6MNmV3/yCdmzR7y3spuVn09sbcmsWeK6ctIwMVRXk27dyEfvHi6zOloinDSJbN0qtObsWWJjQ/j8Vncpb4mQELJyZfiAAW4rVqxsUH77Nlmzhnh4ECsr0rkzAYiCAlFVPQZMAkYDCWy2iahiKC8nw4eTgAAR50JZT4RZWVkPHjxoqrasrCwzM/PevXtVVVUf6KSjJcKjR8ngwS1vXlZGvLyIszMpKBDB4HFxCQyGr2C1bgbDPjv7qQg6FYV374irK/n8c+H3Pj+680aJ4eefCZfblm/Q9qBDJcI3b4i6OikqElrp4UF27GhLr3KYCFuoqoqcPk0GDPgeWA2MBo4zmaYi7L+8nAwbRr7+WpT/+WT3HmF5efmwYcPGjBnj4eExdOjQsrKyBg1SU1MNDQ2nTJni7e1tamp6/vx5yQcpHa1ZTSY/H8OGgcPBmTOieerOy2u8gsIFBmMZgzFHXb3U3NxUBJ2KQpcuf9/XHD4cb96If7yJE0EIDh0S/0jUx0lIgIeH0LUhcnKQlgYfH8nH1JF16gR3dyQmfslibQGeMBhrrK1F+S3RuTOOH8ejRwgMbNv2um0nhUS4Y8cOPp//4MGDBw8eMJnM7du3N2jwySefFBQU3Lp16/79+wsWLJg3b57kg5SC589x7Rq8vVvSttmpMW2goqLy8uXt4OCixYtVX72S0o4VTWCzER2NESMwdChyc8U8GIOB9evx3Xet3duTkrSdO5uaJrN5M77+Wk6XFRU3S0vLP/+8bGxc7u9v9eDBb6LtXFkZx44hMxPz50s0F0ohER44cMDf35/NZrNYrICAgAON1jZQVlbu9M8CJBYWFi1ZKa4jiI6Gj09LVpNJTMTIkdi8GaGhIg5BU1Nz/fr1oaGhnYQtACNdDAZCQxEUBEdH8c9nGzYMZmbYuVPMw1AfIS0NPB6cnBrXlJYiIQGBgZKPSV6Ym5v37t17/Pjx4uhcVRWnTuHaNSxcKI7uhZPC4jbPnj2r22DPwsIiV9gv/KqqquXLl5eUlFy/fn3r1q1NdVVdXf3q1auzZ88KXrJYLAcHByUlJXGELV48HnbtwqlTH25FCNauxbZtOHWqw+6v/WFz5sDICO7u2LMH7u7iHGndOowcCR8fuhK3jBJsusRgNK6Ji4OLC8zMJB4SJSJqajh9Gu7uWLgQGzdKYkSxJMIzZ87s2bOnQSGLxYqNjQXw/v17xX8u5ykqKja+RyigoaHBZrNLSkru3LkzfPhwoW1evHhx7969VatW1ZWEhobatsMUwT5+vJOx8XtTU5SWNtWmshKzZinm5jLPn6/Q1SVNN/wolZWVLBZLQUaWwhXG1RU//8yaMkVp5coqb++PvXrZ1McPFhZKTk6169ZVf/vtRw4hU5r8+7YrjLIy5aNHy5cubfzfgBBs2aL800+VpaVtvJIkmF7Bk/5iJzKNx+NVVFSUiulrCGAykZTE8PRUmjOndtWqqjb3w+fzORxOs19oYkmEpqamI0eObFBYt9ytnp5e3UI+RUVFXRvv1gNwOJxFixYB+OKLL7hcbkBAQBdhP8zNzc1dXFz27t0ryuilYvduzJwp9O8okJ8PT09YW+PCBSgqqogvEAUFBRlPhABcXHD2LEaNUiwoUFy06GN7a/JtX7uWbW/PmT0burofO4Ys+cDHrN3YuxeurirCNlX69VeoqMDdve0b7gkSYbu8sCRBbDZbSUlJrJ+lLl1w7hzc3FgrVnRatw6lpaVtGI7P50ttG6bu3bt37969qVoul5uWlvbZZ58BuHLlCpfL/UBXqqqqPB6PL80lB8Tv+XP8/nvjaYrFxcXz5i2/e/dPV9fx+/dP9/cX/U3B9qtXL6SlYfRokpDwTVHRb126KCUmbu3fv58oxzA3x6RJCA+X0NUZquViYlDvOlB9mzdDTmbXyQN1dZw5AyenOzt2+Ckpqevp4dKlo2pqaiIfSAr3COfMmTNq1KjevXszGIwff/zx2LFjgnJra+udO3c6Ozvv2rXr/fv33bp1Ky4u3rhxo5eXlzj+5jIkKgq+vo2nyfj5LThx4tPa2iW3bs0NDTVZtmyEVKKTWQYGWLz4Vx+fCh7vj1evsn18pt27lyriMZYvR8+emD0b8ryjqyzZuW1b6u7d3CdPZg8d2vjL69EjZGTg6FEpBEaJiYYGVFSWl5buLS3tVVS0c9OmHaGh/xX5KFKYNero6Lh///6kpKSDBw/u27fP6Z95Xx4eHrq6ugB69+59//79LVu2JCcn+/v7N77d2KHweE0tlnj79r3aWl9Aj5BJVVUS3ouhfSgufgkIdto2f/asTPSzSXV0MGsWwsJE3S/VFnt27bq8ePHS9PT88vINP/zQuEFEBAIDRfZAESUjqqrKAS0APJ72yZPlL1+KYQyRPcEvDR1hZZkjR4iTk9Car76az2KFAVc1NV3T0tIkE07L9yOUBfn5+fr6/dnsTWpqk52dQ83MiJ0d2bGDlJW1tIfmV1opLSX6+m3eHlLWtOuVZYK8va8DBHgJjLG3b1D79i1RVyd5eR87Cl1ZpiVEtftES/zyywkdnYEaGgt1dfsHBeXo6pIJE0gLvxFld2UZ6l+aXk0mJCRcUVHVy2v3vn3/HTRokITjahf09fUzMk7HxGj88suMixeXP3mC8HCcPQsTEwQGIjNTFGOoqCAkBEuXiqIv6qM4uLtHKSo+BbYoKQ1ycWlQu3MnRo+GoaE0IqPEycNjVEbG4SNHPP7887fISLPHjzF4MCZPBpeLhAQR7WX4sclaqtr9GeGzZ0RLS8g+8YQQQubMId99J+GA2tkZYVPy8kh4ODE2/vsE8QOLlLboDKmqilhatmUjA9nTrs8I+Xz+ViMjLxubNcuWNfiU1tYSCwty7ZoIRqFnhC0hyTNCoWprSXIycXUl5uYkPLypFWfpGWG7EB0tdJoMgOJi7NmDoCDJx9QRGBpi0SLk5GD5chw8CHNzhIQI33CxRTp1QlgYFi+W9AKI1L8x0tODOZxDt2//NyyswRM+ycnQ1cUnn0grNErSmEyMHYuUFCQlITsb1tYIDERWVlt7E2lsVGsIpslMny60MioKY8fCyEjCMXUoLNbf/1UuXgQABwe4ueHgwTZdS5k8GTwejhwRdYxUa0RGIjgYTCHfWj/+SJ+akFO2ttixA5mZ0NfH0KFwc8OxY63+yUoTofQcOwZzc/Tu3biGx8PWrZg/X/IxdUxWVggPR24uZsxAVBRMTRESgtxcLF68qk8fFze3L182OxGNwcDKlVi8WER3JKjWKyzE8eP46qvGNXfv4tEjeHlJPCRKZnTtitBQ5OZiyhQsWYIBAxAVhYyMLEdHz/T0R80eThOh9ERFNbUw8KFDsLCQ09VExYfDwYQJSEnBiRMoLkbv3r9s2JD97FnauXMBPj4tOJsYORLGxoiNFX+klDA7d2LcOGhqNq6JiEBwMGR7NSRKEjgcTJ2KO3cQHo4jR2BvP/3atdWVlU2u7lKHJkIpyc3F9ev4/HOhlZs2YcECCQckR/r3x/btmDv3YU3NCIBNiOuTJ09bdOTq1QgLw/v34o2PaowQxMRg5szGNUVFOHy4qe2YKHnEYGDECJw8CTW1SsDm8OHm0xxNhFISFYUpU4ROk7l8GW/fYswYycckX774YoS29kbgGIMxf+hQtxYdY28PR0ds3izm0KhGTp2Cigrs7RvX7NiBceOgpyf5mChZZ2dnpai4atKkkmZbSmGJNQo8HuLicPq00MpNmzB/vtAJAZQo9evX78yZbTt3JhYWOuTkTOTzW/aer1wJR0dMnw4tLbGHSNWJjMScOY2LeTxERtI5TJRwycmxUVFxBgalgMaHW9KvW2lIToaFhdBpMk+f4uJFTJ0q+Zjkka2t7erVS/bu/ZLJZG7Z0rJjrKzg7Y3wcPFGRtWXm4u0NEyc2LgmKQkWFrCzk3xMVDvA4XBmzZpuZqbfbEuaCKWh6dVkIiLw9ddQEeM+S1RDTCbi4vDDD7h/v2UHLFuG2FgI21CaEovt2+HnJ/Q+wubNmDtX8gFRHQ1NhBKXm4sbN4ROk3n3Dnv2IDhY8jHJO3NzhIVh6lTUtGSjX319BAXRPbEkpLoasbFC51ffvIm8PHh4SD4mqqOhiVDiduzA1KlCf95GR/89RZ+SvJkzoaODdeta1Jj8978bDx1y6959gb+/+DbppgDg0CH06QNr68Y1ERGYPRtsOs+B+mj0QyRZgmkyZ840rqmtxdat2L9f8jFRAMBgICYGdnYYMwZ9+zbTOPHYsQfV1YmPHh3Kzl5SU7OlY+8UJl2RkVi4sHFxQQGOH8emTZIPiOqA6BmhZCUnw9JS6DSZpCQYG9PFEqXJ0BBr1mDqVFRXN9My4/LlL6qqNIApPF7G9esSiU4u3b+P7GyhzxJt24aJE+nUXUo0aCKUrKZXk6EP0csCPz9064YVK5pp5urltUlDIw1Yyma7jR0rkdDk0k8/ISio8Zox1dWIiqJ30ymRoZdGJSgnBzdv4ujRxjVXr+L1a9BvVFkQGYn+/TF2LAYObLKNi6trdULCz7t39z150p8uaiImpaU4cAB37jSuOXAANjbo00fyMVEdEz0jlKCYGPj6QlGxcY3gdJDFknxMVEM6Oti6FX5+qKj4ULPPxozZcuDA9Pnz2XShGTHZvRuurkJ32t2yhT41QYkSTYSSIpgmI+zs4dkzpKbC31/yMVHCjRsHOzssWdKCprNnY/9+vHol9pjk0PbtDRYXraio8PT019Hh3r07YeDAQmnFRXU8NBGKXXFx8VhHR6629sh37wq0tRs32LwZAQH0IXrZsnUrDh/GhQvNtdPVxaRJ2LZNAiHJl4sXweNh6ND6ZeHhW06f7vfmzY3Kyi+++aa5G7kU1WI0EYrdhuXLv7h+/UZJSXB5+Q/ffNOgtrQU8fGYNUsqoVFNUldHTAwCAvDuXXNN//MfbN+OsjJJhCU/IiMxcyYYjPplWVnPqqoGASDE8dGjp9IJjOqI2nciLCkpKSyU9SskBXl5PXg8AD0Jef38eYPamBi4u8PERBqRCXP37t1ceVo8LDU1tbKyUmiVmxtcXPCf/zTXhYUFhg7Frl0ij03kCCGnTp2SdhQt8NdfOH0avr4NigMDJygp/QfYraExfebML8U0eH5+fkZGhpg67zDevn1b1h5+/BUWFqanpzfbrH0nwnv37j18+FDaUTRj6vz5szmcCBYrQEvL/99fq7W1+OknzGvBprASExcXd+zYMWlHITlLly79wEcoIgKpqfj11+Z6WbQI69e3bH02aSopKZk+fbq0o2iBqChMmACNhjsGDBo0TEnpp5CQouPHl/r5TRLT4GfOnNmxY4eYOu8wsrOzHzx4IO0omnflypX169c326x9Pz5BCJF2CM0bbGHxs6JiWnh4zPDh3bv/a6/kI0dgYPChafpS0S7eVclQVkZsLL78ErdvC90a/R9cLiwtcfAgJk+WXHAdVW0tYmKQlNS4ZvduODv3W726n1jHp5//jqSF/5rt+4ywfYiIsAgI8A0KapAFQR+ibw+cnODlJXQvvH/79lusWQP6HfrxTpyAgQEGDGhcs3WrbF0+oToMmgjF7N07xMVh/vzGNTduID8fnp6Sj4lqnfBw3L6Ngwc/2GjUKDCZSEmRUEwdmGCaTCMpKeDzMWyYxOOh5ACjXV8HmDRpUnJy8uDBg6UdSJOGFBT0KCmJsrJqXJWT8yWHU2xgcFLyUX3Aw4cPO3fubCw3W2Ckp6fb2NioNPfwSklJj+zsqf37L2MweE21GVJQ0L2kJFrYv7WM4PF4V65cGfrvZxJkSpeamrA7d0JsbauZDX+jP3kSoKKSrad3Qdwx5OfnFxcX9+rVS9wDtWtXrlwxMjIyNTWVdiDN+OuvvwA0O/upfSfCP//888SJEzY2NtIOpON48+YNh8Pp0qWLtAORkGfPnhkbGzMbfe12VDk5Oebm5tKOQqaVl5eXlZXp6elJOxCZ9uLFC21tbQ6HI+1AmlFVVdW5c+fhw4d/uFn7ToQURVEU9ZHk5YcwRVEURQlFEyFFURQl12gipCiKouQaTYQURVGUXGuvK8tkZ2c/r7dup7KyMpfLlWI87V1BQUFeXt6Aek8xX7lypU+fPqqqqlKMSnyysrLy8vKGDx/OYrEAlJWVXb9+vdmpZe1XSUlJgxnkDg4Osj/lT8Lu3LlTUFAAQE9Pz9raWj7fn9LS0tu3bzs5OdWV3Lx509DQsME02pycnJiYmJUrVzY4/Pr16yUlJQwGQ19f39rams2WToqprq6+ePGiiYmJtbW1oOTOnTtqampNPu9B2qeFCxfq6+t/+o9p06ZJO6L2LSEhwdbWtn6JiopKWlqatOIRt+DgYAA7d+4UvMzIyFBRUZFuSGKVmpqqoKDwaT2vXr2SdlAyx9vb28LCwtXVtV+/fgYGBlevXpV2RFKQnp6urKxcv8TOzi4uLq5Bsz/++MPe3r7x4Y6Ojj179nR1de3Zs6elpWVWVpYYY22a4AeNmZlZVVWVoMTLy2vt2rVNtW+vZ4QARowYEd/dXbkAAAqJSURBVBsbK+0oqPaqX79+YWFhkydPVlRUlHYskqCmpnbu3DlpRyHrpk6dunz5cgBz5swJCQm50PyOlFRDCxYsmD59OiFkwoQJYWFh+/btk1Ykampq0dHRs1qwyx29R0jJKTc3t27dukVGRko7EEoWcbncFy9eSDuKdozBYNjZ2Un3PVy1atWKFStKS0ubbdmOzwgp0Xry5MmYMWPqXlZUVEgxGMkIDw8fPXr0tGnTpB0IJSsqKyvfvn1bWFgYHR09aNAgaYcjHZWVlfW/Ch4/ftyqw9+/f//27dv8/Pw9e/aMHTtW1NG1gpOTE5fL3bJly5IlSz7ckiZC6m86OjqzZ8+ue3n+/HkpBiMZ9vb2gwcP3rhx4/jx46UdCyUTfvzxxx07dujo6AwZMiQ8PFza4UiHgoJC/a+CR48eterwJUuWhIWFde3adcSIEcuWLRN1dK0THh4+bNiwwMDADzejiZD6m6qq6siRI+teCqZTdnjh4eEODg6Ojo7SDoSSCYsWLRLcI5RnLBar/ldBa6eOR0REyM7+z3369BkxYsTatWs/3IwmQkqude/efdy4cWvWrJF2IBRFicWKFSvs7Ow+vJ0InSxDybvQ0NArV65IOwqKosSiW7dukydPTk9P/0AbVmhoqKTiESV1dfU+ffrI/m5Y7YWysnKPHj169uxZV2JoaPjJJ58oKytLMSrxUVNTs7GxMTIyAqCurj5gwIAhQ4bY2tpKOy5x4XA41tbWffv2lXYgMk1DQ0PwBKG0A5EmDodjZWXVv3//uhJdXV07OzstLa36zV6+fHn8+PHGl0C1tbUHDBigra0tiVibxmKxTExMuFyu4BaPvb29lZXV0KFDu3btKrQ93YaJoiiKap2bN28GBQX9/vvv0g5ENOilUYqiKEqu0TNCiqIoqnUqKiqeP39et5Jne0cTIUVRFCXX6KVRiqIoSq7RREhRFEXJNZoIKYqiKLlGEyFFURQl12gipCiqGYcPH05JSZF2FBQlLnTWKEVRzeByuebm5gcPHpR2IBQlFvSMkKIk582bN5WVlW07tri4+PXr1yIJ46+//ioqKmqqtqioqLCwsIVdvX37tqCg4MMN3r5927r4KEqyaCKkqDY6efKkpqZm3W5tMTExmpqadYv3lpaW6ujoREdHAygsLBw/fnyXLl10dHQEy7omJSUJmmVnZ2tqasbGxtbv+fDhw5qamrdu3RK8/OWXX3r16qWhodG1a1cTE5P9+/cLjefMmTOampoXL16sX7h27Vo9Pb26tLd9+3YTExNdXV0tLS0bG5sLFy7UbxwdHW1hYaGlpaWtra2lpbV+/XoA/fv3z8jISE5O1tTU1NTU9PX1FTQ+ffp07969NTU19fT0zMzM9u3bV9dPRESEpqbm9evX+/Xrp6mp6eXl1bp3lqIkjFAU1SZFRUUsFmvbtm2Cl97e3p06dbK3txe8PH78OIDMzExCyNOnT6dPn/7rr7/ev3//8uXLn3/+OZvNvnnzpqClg4PD4MGD6/c8atQoa2trwZ+PHDnCZDL9/PyuXr168+bN4OBgBoNx6tSpxvHU1NR07drV39+/fmH37t09PT0Ff167di2TyVy8ePGNGzfS09M9PT2VlJTu378vqF23bh0AHx+fCxcuZGZm7t27d926dYSQS5cuWVlZOTs7p6SkpKSkZGRkEEKuXbumoKDg5OR04cKFtLS0cePGMRiMpKQkQVerVq0CYG5uvmHDhrS0tPPnz3/kW01RYkUTIUW1HZfL9fLyIoTU1tZqa2sHBwezWKyioiJCyIIFC/T09Ph8fuOjampqjIyMFi1aJHgZGRkJICsrS/Dy1atXbDY7PDycEMLn8y0tLd3d3esfPmTIEFdXV6HxLFiwQEVFpbS0VPBSsL3U4cOHCSHFxcXKysqzZ8+ua1xZWWlqajpz5kxCSElJiYqKypgxY4R2a2dn5+3tXb/E09NTXV29pKRE8JLH41lZWfXt21fwUpAIIyMjm3rfKEqm0EujFNV2Li4u58+fr62tzcjIKCwsXLx4sbKysuB647lz51xcXBgMhqBlaWlpdHT0okWLAgMDZ82axefznzx5Iqj68ssvlZSU9u7dK3i5Z88ePp/v4+MDIDs7+8mTJ9bW1mfrMTIyyszMFBpPQEBAWVnZ0aNHBS/j4+O1tLRGjRoF4MqVK+Xl5UZGRnX9XLp0ydTU9O7duwDS09PLysqmTZvWwr94RkbGZ599Vrd3OYvF8vb2zszMrH870NPTs+XvJEVJEd2hnqLazsXFZc2aNRkZGefPnxdscOjs7Hzu3DlnZ+e7d+/OmzdP0Oz27dsuLi5KSkqurq5aWlpsNltBQaGkpERQq6am5unpmZCQEBoaymQyExISRowYIdgrUTA7Ji4uri5N1uHz+Uxmwx+yNjY2tra28fHxvr6+lZWViYmJfn5+HA6nrqvVq1c3OMrc3BzAmzdvAAgGbRafz8/Ly9PX169faGBgQAgpKirS0NAQlOjp6bWkN4qSOpoIKartnJ2dFRUVz507d/78eRcXFwAuLi5RUVHOzs58Pv/TTz8VNIuIiFBVVc3MzKzb6PjEiRP1+/Hz89u/f/9vv/2mpqZ2586dJUuWCMrV1NQAbNiwYcaMGS0Myc/Pb+HChbm5uWlpacXFxX5+fvW7Onr06LBhwxofpa6ujn+SZbOYTKaSkpIgd9b566+/6kapa9bCmClKuugnlaLaTlFR0cHB4eTJk5cvX65LhFlZWfHx8ZaWlmZmZoJmOTk5PXr0qMuCjx8/fvjwYf1+3N3djY2N4+Pj4+Pj1dTUPDw8BOU9evTQ1dVt1QN8vr6+CgoKe/bsiY+PF5wgCsodHR0VFBQSExOFHjVw4EAOh9NUrYqKSkVFRf0SBweHs2fPVlVV1ZUcO3asW7duUt+anKLaQto3KSmqffv+++8BsNlswcwRPp+vq6sLYPr06XVt5s2bp6SkdOrUqcrKyhs3btja2qqoqLi5udXvJyQkREVFRVtbOygoqH55VFQUgICAgKysrPfv3z958iQ+Pl4wlaYp48ePNzIyYrFYGzdurF/+7bffMpnM//3vfzk5Oe/fv8/Kytq8eXNsbKygdtGiRUwm87vvvsvJySkrK0tLS4uPjxdUBQcHa2hoJCUl3bhx4/Hjx4SQ06dPMxiMiRMnPn36ND8/f+7cuQCioqIE7QWTZdr0dlKUFNAPK0V9lLS0NAD1n3+YNGkSgAMHDtSVvHnzZvDgwYKfnhwO5/vvv3d1dW2QCOvOEa9evdpgiJiYmK5du9b9eNXR0WmQ4RoQTJZhs9kvX76sX15bW7tixYq6GS4ATE1NExMTBbU8Hu+7775TUlISVLHZ7JCQEEFVXl7eqFGjBJdPx40bJyjctWtX3e3Azp07r169um4gmgip9oUusUZRkkAIycnJKSoqsra2rp+KWojP5z98+LC0tFRPT09wttfmSGpqah48eFBVVWVgYGBoaNigVnCmyGQyTU1N6/JcU6qrq+/fv8/j8Xr16tW5c+c2h0RR0kUTIUVRFCXX6GQZiqIoSq7RREhRFEXJNZoIKYqiKLlGEyFFURQl12gipCiKouQaTYQURVGUXPs/t59r2vC6X/kAAAAASUVORK5CYII=", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -1676,11 +1676,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/collinear_magnetism/19139c3c.svg b/dev/examples/collinear_magnetism/19139c3c.svg new file mode 100644 index 0000000000..f8b450c5f8 --- /dev/null +++ b/dev/examples/collinear_magnetism/19139c3c.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/collinear_magnetism/ecba6944.svg b/dev/examples/collinear_magnetism/ecba6944.svg new file mode 100644 index 0000000000..c15a4abc5a --- /dev/null +++ b/dev/examples/collinear_magnetism/ecba6944.svg @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/collinear_magnetism/index.html b/dev/examples/collinear_magnetism/index.html index 9884eec0e5..5726def618 100644 --- a/dev/examples/collinear_magnetism/index.html +++ b/dev/examples/collinear_magnetism/index.html @@ -1,5 +1,5 @@ -Collinear spin and magnetic systems · DFTK.jl

Collinear spin and magnetic systems

In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.

First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.

using DFTK
+Collinear spin and magnetic systems · DFTK.jl

Collinear spin and magnetic systems

In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.

First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.

using DFTK
 
 a = 5.42352  # Bohr
 lattice = a / 2 * [[-1  1  1];
@@ -13,61 +13,61 @@
 
 scfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -16.65001040191                   -0.48    5.5
-  2   -16.65071264937       -3.15       -1.01    1.0   18.3ms
-  3   -16.65080987848       -4.01       -2.33    1.2   19.2ms
-  4   -16.65082411869       -4.85       -2.84    2.8   25.3ms
-  5   -16.65082459367       -6.32       -3.26    1.8   21.1ms
-  6   -16.65082468814       -7.02       -3.76    2.0   22.7ms
-  7   -16.65082469753       -8.03       -4.27    2.0   23.8ms
scfres_nospin.energies
Energy breakdown (in Ha):
-    Kinetic             15.9208097
-    AtomicLocal         -5.0693049
-    AtomicNonlocal      -5.2202110
+  1   -16.65011073000                   -0.48    5.5   33.0ms
+  2   -16.65071859233       -3.22       -1.01    1.0   17.7ms
+  3   -16.65081186201       -4.03       -2.32    1.5   18.7ms
+  4   -16.65082384561       -4.92       -2.84    2.0   20.9ms
+  5   -16.65082456373       -6.14       -3.25    1.5   19.3ms
+  6   -16.65082467413       -6.96       -3.76    1.2   18.6ms
+  7   -16.65082469676       -7.65       -4.26    2.0   20.9ms
scfres_nospin.energies
Energy breakdown (in Ha):
+    Kinetic             15.9207639
+    AtomicLocal         -5.0692774
+    AtomicNonlocal      -5.2201876
     Ewald               -21.4723040
     PspCorrection       1.8758831 
-    Hartree             0.7793386 
-    Xc                  -3.4467483
+    Hartree             0.7793311 
+    Xc                  -3.4467459
     Entropy             -0.0182879
 
-    total               -16.650824697529

Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.

Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel $d$-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of $s$-electrons, 1 pair of $d$-electrons and 4 unpaired $d$-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.

magnetic_moments = [4];
Units of the magnetisation and magnetic moments in DFTK

Unlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton $μ_B$, which in atomic units has the value $\frac{1}{2}$. Since $μ_B$ is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.

We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.

model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)
+    total               -16.650824696759

Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.

Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel $d$-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of $s$-electrons, 1 pair of $d$-electrons and 4 unpaired $d$-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.

magnetic_moments = [4];
Units of the magnetisation and magnetic moments in DFTK

Unlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton $μ_B$, which in atomic units has the value $\frac{1}{2}$. Since $μ_B$ is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.

We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.

model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)
 basis = PlaneWaveBasis(model; Ecut, kgrid)
 ρ0 = guess_density(basis, magnetic_moments)
 scfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());
n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
 ---   ---------------   ---------   ---------   ------   ----   ------
-  1   -16.66157271041                   -0.51    2.618    4.8
-  2   -16.66808066293       -2.19       -1.09    2.445    1.4   37.0ms
-  3   -16.66904319397       -3.02       -2.05    2.337    2.1   43.1ms
-  4   -16.66910056799       -4.24       -2.74    2.302    1.9   42.4ms
-  5   -16.66910321215       -5.58       -2.99    2.294    1.6   40.7ms
-  6   -16.66910415326       -6.03       -3.53    2.286    1.9   42.2ms
-  7   -16.66910417275       -7.71       -3.81    2.286    1.9   42.9ms
-  8   -16.66910417415       -8.85       -4.33    2.285    1.8   42.2ms
-  9   -16.66910417510       -9.02       -4.84    2.286    1.6   41.3ms
- 10   -16.66910417507   +  -10.59       -5.29    2.286    1.8   41.8ms
- 11   -16.66910417509      -10.87       -5.87    2.286    1.8   43.1ms
- 12   -16.66910417508   +  -11.59       -6.27    2.286    2.0   46.2ms
scfres.energies
Energy breakdown (in Ha):
-    Kinetic             16.2947193
-    AtomicLocal         -5.2227260
-    AtomicNonlocal      -5.4100280
+  1   -16.66166158135                   -0.51    2.618    5.0   60.8ms
+  2   -16.66823054276       -2.18       -1.09    2.445    1.5   37.1ms
+  3   -16.66905792429       -3.08       -2.07    2.340    2.0   41.1ms
+  4   -16.66909847546       -4.39       -2.60    2.304    1.4   36.3ms
+  5   -16.66910263211       -5.38       -2.93    2.297    1.8   39.1ms
+  6   -16.66910411896       -5.83       -3.47    2.287    1.6   53.9ms
+  7   -16.66910416977       -7.29       -3.78    2.286    2.0   41.2ms
+  8   -16.66910417391       -8.38       -4.25    2.286    1.5   38.6ms
+  9   -16.66910417505       -8.94       -4.97    2.286    1.5   38.5ms
+ 10   -16.66910417510      -10.33       -5.30    2.286    2.4   44.9ms
+ 11   -16.66910417508   +  -10.67       -5.80    2.286    1.2   37.9ms
+ 12   -16.66910417509      -10.81       -6.11    2.286    1.4   38.8ms
scfres.energies
Energy breakdown (in Ha):
+    Kinetic             16.2947226
+    AtomicLocal         -5.2227277
+    AtomicNonlocal      -5.4100298
     Ewald               -21.4723040
     PspCorrection       1.8758831 
-    Hartree             0.8191962 
-    Xc                  -3.5406834
+    Hartree             0.8191967 
+    Xc                  -3.5406838
     Entropy             -0.0131612
 
-    total               -16.669104175084
Model and magnetic moments

DFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.

In direct comparison we notice the first, spin-paired calculation to be a little higher in energy

println("No magnetization: ", scfres_nospin.energies.total)
+    total               -16.669104175092
Model and magnetic moments

DFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.

In direct comparison we notice the first, spin-paired calculation to be a little higher in energy

println("No magnetization: ", scfres_nospin.energies.total)
 println("Magnetic case:    ", scfres.energies.total)
-println("Difference:       ", scfres.energies.total - scfres_nospin.energies.total);
No magnetization: -16.650824697528616
-Magnetic case:    -16.669104175083934
-Difference:       -0.01827947755531767

Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.

The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the $d$-orbitals these differ rather drastically. For example for the first $k$-point:

iup   = 1
+println("Difference:       ", scfres.energies.total - scfres_nospin.energies.total);
No magnetization: -16.650824696759308
+Magnetic case:    -16.66910417509165
+Difference:       -0.018279478332342336

Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.

The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the $d$-orbitals these differ rather drastically. For example for the first $k$-point:

iup   = 1
 idown = iup + length(scfres.basis.kpoints) ÷ 2
 @show scfres.occupation[iup][1:7]
-@show scfres.occupation[idown][1:7];
(scfres.occupation[iup])[1:7] = [1.0, 0.9999987814410648, 0.9999987814410648, 0.9999987814410648, 0.9582253341560243, 0.9582253341560245, 1.1266552412950664e-29]
-(scfres.occupation[idown])[1:7] = [1.0, 0.8438938075770984, 0.8438938075770991, 0.8438938075770954, 8.140897865004246e-6, 8.140897865004332e-6, 4.138928691871095e-33]

Similarly the eigenvalues differ

@show scfres.eigenvalues[iup][1:7]
-@show scfres.eigenvalues[idown][1:7];
(scfres.eigenvalues[iup])[1:7] = [-0.06935856089772784, 0.3568856004687862, 0.35688560046878687, 0.35688560046878637, 0.4617360753841307, 0.46173607538413064, 1.159621148432443]
-(scfres.eigenvalues[idown])[1:7] = [-0.03125745550017466, 0.47618910256380337, 0.4761891025638033, 0.4761891025638036, 0.6102500236660567, 0.6102500236660566, 1.238712715108625]
``k``-points in collinear calculations

For collinear calculations the kpoints field of the PlaneWaveBasis object contains each $k$-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up $k$-points and then all spin-down $k$-points, such that iup and idown index the same $k$-point, but differing spins.

We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.

using Plots
+@show scfres.occupation[idown][1:7];
(scfres.occupation[iup])[1:7] = [1.0, 0.9999987814474166, 0.9999987814474166, 0.9999987814474166, 0.9582255571845641, 0.9582255571845589, 1.1266700889683701e-29]
+(scfres.occupation[idown])[1:7] = [1.0, 0.8438895738876917, 0.8438895738876588, 0.8438895738876946, 8.140609655987201e-6, 8.140609655984757e-6, 1.6234174869995573e-32]

Similarly the eigenvalues differ

@show scfres.eigenvalues[iup][1:7]
+@show scfres.eigenvalues[idown][1:7];
(scfres.eigenvalues[iup])[1:7] = [-0.0693585985851512, 0.35688544009534, 0.3568854400953412, 0.3568854400953407, 0.46173591142035364, 0.46173591142035497, 1.159620908400242]
+(scfres.eigenvalues[idown])[1:7] = [-0.03125740709558854, 0.4761893156868414, 0.4761893156868439, 0.4761893156868412, 0.6102502694536367, 0.6102502694536397, 1.225045790902509]
``k``-points in collinear calculations

For collinear calculations the kpoints field of the PlaneWaveBasis object contains each $k$-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up $k$-points and then all spin-down $k$-points, such that iup and idown index the same $k$-point, but differing spins.

We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.

using Plots
 bands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6))  # Increase kgrid to get nicer DOS.
-plot_dos(bands_666)
Example block output

Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.

Similarly the band structure shows clear differences between both spin components.

using Unitful
+plot_dos(bands_666)
Example block output

Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.

Similarly the band structure shows clear differences between both spin components.

using Unitful
 using UnitfulAtomic
 bands_kpath = compute_bands(scfres; kline_density=6)
-plot_bandstructure(bands_kpath)
Example block output
+plot_bandstructure(bands_kpath)
Example block output
diff --git a/dev/examples/compare_solvers.ipynb b/dev/examples/compare_solvers.ipynb index 59720ceaf9..753a7eae46 100644 --- a/dev/examples/compare_solvers.ipynb +++ b/dev/examples/compare_solvers.ipynb @@ -70,16 +70,17 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.846814066043 -0.70 4.8 \n", - " 2 -7.852322221402 -2.26 -1.53 1.0 16.7ms\n", - " 3 -7.852617244679 -3.53 -2.56 1.5 18.5ms\n", - " 4 -7.852646045678 -4.54 -2.90 2.5 22.3ms\n", - " 5 -7.852646524674 -6.32 -3.20 1.0 17.0ms\n", - " 6 -7.852646680990 -6.81 -4.25 1.0 17.0ms\n", - " 7 -7.852646686684 -8.24 -5.01 2.2 22.4ms\n", - " 8 -7.852646686726 -10.38 -5.51 1.5 19.3ms\n", - " 9 -7.852646686728 -11.58 -5.66 1.2 17.9ms\n", - " 10 -7.852646686730 -11.87 -6.71 1.0 17.6ms\n" + " 1 -7.847779820891 -0.70 4.8 29.6ms\n", + " 2 -7.852410857116 -2.33 -1.53 1.0 17.0ms\n", + " 3 -7.852610871612 -3.70 -2.54 1.0 16.7ms\n", + " 4 -7.852645458720 -4.46 -2.78 2.2 21.4ms\n", + " 5 -7.852646083791 -6.20 -2.88 1.0 16.9ms\n", + " 6 -7.852646661776 -6.24 -3.83 1.0 16.9ms\n", + " 7 -7.852646684569 -7.64 -4.56 1.5 18.6ms\n", + " 8 -7.852646686690 -8.67 -5.04 1.8 20.3ms\n", + " 9 -7.852646686722 -10.50 -5.47 1.0 17.1ms\n", + " 10 -7.852646686728 -11.25 -5.65 1.0 17.5ms\n", + " 11 -7.852646686730 -11.81 -6.15 1.0 17.2ms\n" ] } ], @@ -105,14 +106,14 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) α Diag Δtime\n", "--- --------------- --------- --------- ---- ---- ------\n", - " 1 -7.846773261210 -0.70 4.5 \n", - " 2 -7.852552750822 -2.24 -1.64 0.80 2.2 216ms\n", - " 3 -7.852638554617 -4.07 -2.74 0.80 1.0 61.8ms\n", - " 4 -7.852646515518 -5.10 -3.32 0.80 2.0 19.3ms\n", - " 5 -7.852646677026 -6.79 -4.23 0.80 1.8 18.0ms\n", - " 6 -7.852646686595 -8.02 -4.82 0.80 2.0 19.7ms\n", - " 7 -7.852646686721 -9.90 -5.70 0.80 1.5 17.1ms\n", - " 8 -7.852646686730 -11.06 -6.85 0.80 2.0 19.9ms\n" + " 1 -7.847738990876 -0.70 4.8 398ms\n", + " 2 -7.852561001658 -2.32 -1.62 0.80 2.0 2.32s\n", + " 3 -7.852640927098 -4.10 -2.70 0.80 1.0 235ms\n", + " 4 -7.852646514316 -5.25 -3.37 0.80 2.0 29.4ms\n", + " 5 -7.852646681409 -6.78 -4.36 0.80 1.5 24.7ms\n", + " 6 -7.852646686605 -8.28 -4.83 0.80 2.0 20.6ms\n", + " 7 -7.852646686725 -9.92 -5.48 0.80 1.5 17.5ms\n", + " 8 -7.852646686729 -11.39 -6.62 0.80 1.5 17.7ms\n" ] } ], @@ -138,101 +139,56 @@ "name": "stdout", "output_type": "stream", "text": [ - "Iter Function value Gradient norm \n", - " 0 1.380094e+01 3.291980e+00\n", - " * time: 0.04595613479614258\n", - " 1 1.232801e+00 2.033710e+00\n", - " * time: 0.27105712890625\n", - " 2 -1.254125e+00 2.517570e+00\n", - " * time: 0.2887611389160156\n", - " 3 -3.691819e+00 2.035582e+00\n", - " * time: 0.3141341209411621\n", - " 4 -4.701090e+00 1.870208e+00\n", - " * time: 0.3395850658416748\n", - " 5 -6.644361e+00 1.055905e+00\n", - " * time: 0.3649439811706543\n", - " 6 -7.371995e+00 4.719368e-01\n", - " * time: 0.3902881145477295\n", - " 7 -7.668230e+00 2.394569e-01\n", - " * time: 0.408005952835083\n", - " 8 -7.745229e+00 9.681594e-02\n", - " * time: 0.42566895484924316\n", - " 9 -7.763456e+00 1.153055e-01\n", - " * time: 0.44341301918029785\n", - " 10 -7.775555e+00 4.979200e-02\n", - " * time: 0.4610869884490967\n", - " 11 -7.780884e+00 4.332608e-02\n", - " * time: 0.47877001762390137\n", - " 12 -7.786047e+00 5.110680e-02\n", - " * time: 0.4964289665222168\n", - " 13 -7.794195e+00 6.378840e-02\n", - " * time: 0.5140969753265381\n", - " 14 -7.806420e+00 6.615867e-02\n", - " * time: 0.5318150520324707\n", - " 15 -7.822117e+00 5.948395e-02\n", - " * time: 0.5495800971984863\n", - " 16 -7.834311e+00 4.792840e-02\n", - " * time: 0.5672039985656738\n", - " 17 -7.847194e+00 3.977858e-02\n", - " * time: 0.5849440097808838\n", - " 18 -7.850626e+00 1.977768e-02\n", - " * time: 0.6026411056518555\n", - " 19 -7.851991e+00 1.189389e-02\n", - " * time: 0.6202900409698486\n", - " 20 -7.852479e+00 1.165521e-02\n", - " * time: 0.6379520893096924\n", - " 21 -7.852585e+00 3.572241e-03\n", - " * time: 0.6556510925292969\n", - " 22 -7.852628e+00 2.349321e-03\n", - " * time: 0.6733460426330566\n", - " 23 -7.852640e+00 1.544671e-03\n", - " * time: 0.6910159587860107\n", - " 24 -7.852644e+00 9.324593e-04\n", - " * time: 0.7087559700012207\n", - " 25 -7.852646e+00 5.762728e-04\n", - " * time: 0.7264001369476318\n", - " 26 -7.852646e+00 3.752237e-04\n", - " * time: 0.7440860271453857\n", - " 27 -7.852647e+00 2.048671e-04\n", - " * time: 0.7618210315704346\n", - " 28 -7.852647e+00 1.242726e-04\n", - " * time: 0.7795310020446777\n", - " 29 -7.852647e+00 6.994715e-05\n", - " * time: 0.7972660064697266\n", - " 30 -7.852647e+00 2.807038e-05\n", - " * time: 0.8149480819702148\n", - " 31 -7.852647e+00 3.105599e-05\n", - " * time: 0.8337879180908203\n", - " 32 -7.852647e+00 1.498306e-05\n", - " * time: 0.8601751327514648\n", - " 33 -7.852647e+00 6.234469e-06\n", - " * time: 0.8863630294799805\n", - " 34 -7.852647e+00 5.899983e-06\n", - " * time: 0.9054770469665527\n", - " 35 -7.852647e+00 2.174102e-06\n", - " * time: 0.9240429401397705\n", - " 36 -7.852647e+00 1.608544e-06\n", - " * time: 0.9424691200256348\n", - " 37 -7.852647e+00 9.368904e-07\n", - " * time: 0.9604511260986328\n", - " 38 -7.852647e+00 5.465731e-07\n", - " * time: 0.9782669544219971\n", - " 39 -7.852647e+00 2.652823e-07\n", - " * time: 0.9960391521453857\n", - " 40 -7.852647e+00 1.931178e-07\n", - " * time: 1.0137739181518555\n", - " 41 -7.852647e+00 1.147412e-07\n", - " * time: 1.0314791202545166\n", - " 42 -7.852647e+00 6.528110e-08\n", - " * time: 1.0493040084838867\n", - " 43 -7.852647e+00 4.313957e-08\n", - " * time: 1.0669710636138916\n", - " 44 -7.852647e+00 2.197759e-08\n", - " * time: 1.084712028503418\n", - " 45 -7.852647e+00 1.551778e-08\n", - " * time: 1.1024141311645508\n", - " 46 -7.852647e+00 1.551778e-08\n", - " * time: 1.2194061279296875\n" + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +1.362603724839 -1.01 4.60s\n", + " 2 -1.481389975768 0.45 -0.66 108ms\n", + " 3 -3.684523267160 0.34 -0.44 33.1ms\n", + " 4 -5.349902897794 0.22 -0.59 33.2ms\n", + " 5 -6.878574799308 0.18 -0.82 33.4ms\n", + " 6 -7.313822853926 -0.36 -1.45 25.4ms\n", + " 7 -7.601326033377 -0.54 -1.71 25.5ms\n", + " 8 -7.681570835809 -1.10 -1.99 25.5ms\n", + " 9 -7.719685455995 -1.42 -2.12 25.5ms\n", + " 10 -7.742333062207 -1.64 -2.30 25.6ms\n", + " 11 -7.757599274932 -1.82 -2.35 25.5ms\n", + " 12 -7.781886733066 -1.61 -2.42 25.1ms\n", + " 13 -7.800661598040 -1.73 -2.14 24.9ms\n", + " 14 -7.813134820589 -1.90 -2.33 58.8ms\n", + " 15 -7.834233960693 -1.68 -1.96 25.5ms\n", + " 16 -7.843794486268 -2.02 -2.65 25.1ms\n", + " 17 -7.850268387626 -2.19 -3.15 25.0ms\n", + " 18 -7.851774871463 -2.82 -3.36 25.1ms\n", + " 19 -7.852418769725 -3.19 -3.65 25.4ms\n", + " 20 -7.852563911462 -3.84 -4.16 25.7ms\n", + " 21 -7.852614744506 -4.29 -4.22 25.5ms\n", + " 22 -7.852636230291 -4.67 -4.29 25.8ms\n", + " 23 -7.852642763141 -5.18 -4.71 25.6ms\n", + " 24 -7.852645138713 -5.62 -5.06 25.7ms\n", + " 25 -7.852646147969 -6.00 -5.09 25.6ms\n", + " 26 -7.852646516482 -6.43 -5.56 25.6ms\n", + " 27 -7.852646646633 -6.89 -5.64 25.5ms\n", + " 28 -7.852646673374 -7.57 -5.70 25.5ms\n", + " 29 -7.852646680688 -8.14 -6.17 25.4ms\n", + " 30 -7.852646684107 -8.47 -6.20 25.6ms\n", + " 31 -7.852646685592 -8.83 -6.44 25.3ms\n", + " 32 -7.852646686344 -9.12 -6.71 24.8ms\n", + " 33 -7.852646686619 -9.56 -6.99 24.6ms\n", + " 34 -7.852646686695 -10.12 -7.51 24.5ms\n", + " 35 -7.852646686718 -10.64 -7.34 24.5ms\n", + " 36 -7.852646686725 -11.15 -7.68 24.6ms\n", + " 37 -7.852646686728 -11.54 -8.14 24.6ms\n", + " 38 -7.852646686729 -11.97 -8.54 24.6ms\n", + " 39 -7.852646686730 -12.59 -8.51 24.5ms\n", + " 40 -7.852646686730 -12.96 -8.53 24.5ms\n", + " 41 -7.852646686730 -13.52 -8.96 24.7ms\n", + " 42 -7.852646686730 -13.97 -9.12 24.7ms\n", + " 43 -7.852646686730 -14.45 -9.24 24.6ms\n", + " 44 -7.852646686730 -14.57 -9.78 24.6ms\n", + " 45 -7.852646686730 + -Inf -9.92 32.6ms\n", + " 46 -7.852646686730 + -Inf -9.87 32.5ms\n", + "┌ Warning: DM not converged.\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/scf/scf_callbacks.jl:60\n" ] } ], @@ -266,7 +222,7 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.846801867260 -0.70 4.5 \n" + " 1 -7.847784689085 -0.70 4.8 30.2ms\n" ] } ], @@ -292,9 +248,9 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Δtime\n", "--- --------------- --------- --------- ------\n", - " 1 -7.852645865896 -1.64 \n", - " 2 -7.852646686730 -6.09 -3.70 1.55s\n", - " 3 -7.852646686730 -13.22 -7.22 125ms\n" + " 1 -7.852645854534 -1.63 13.6s\n", + " 2 -7.852646686730 -6.08 -3.69 3.61s\n", + " 3 -7.852646686730 -13.23 -7.20 98.0ms\n" ] } ], @@ -319,9 +275,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "|ρ_newton - ρ_scf| = 2.5105794429729203e-7\n", - "|ρ_newton - ρ_scfv| = 6.19616350579379e-8\n", - "|ρ_newton - ρ_dm| = 4.267566857927198e-9\n" + "|ρ_newton - ρ_scf| = 7.001802948574029e-7\n", + "|ρ_newton - ρ_scfv| = 5.60148691565758e-7\n", + "|ρ_newton - ρ_dm| = 1.986805325233621e-9\n" ] } ], @@ -341,11 +297,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/compare_solvers/index.html b/dev/examples/compare_solvers/index.html index 1e81639181..a6212128c4 100644 --- a/dev/examples/compare_solvers/index.html +++ b/dev/examples/compare_solvers/index.html @@ -1,5 +1,5 @@ -Comparison of DFT solvers · DFTK.jl

Comparison of DFT solvers

We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.

First we setup our problem

using DFTK
+Comparison of DFT solvers · DFTK.jl

Comparison of DFT solvers

We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.

First we setup our problem

using DFTK
 using LinearAlgebra
 
 a = 10.26  # Silicon lattice constant in Bohr
@@ -16,118 +16,77 @@
 # Convergence we desire in the density
 tol = 1e-6
1.0e-6

Density-based self-consistent field

scfres_scf = self_consistent_field(basis; tol);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.846880200007                   -0.70    5.0
-  2   -7.852325653503       -2.26       -1.53    1.0   17.9ms
-  3   -7.852613577844       -3.54       -2.55    1.2   18.7ms
-  4   -7.852645934052       -4.49       -2.87    2.5   24.2ms
-  5   -7.852646479391       -6.26       -3.14    1.0   18.0ms
-  6   -7.852646678222       -6.70       -3.99    1.0   18.0ms
-  7   -7.852646686367       -8.09       -5.21    1.8   21.1ms
-  8   -7.852646686724       -9.45       -5.46    2.5   24.1ms
-  9   -7.852646686730      -11.24       -6.50    1.0   18.1ms

Potential-based SCF

scfres_scfv = DFTK.scf_potential_mixing(basis; tol);
n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
+  1   -7.847702638793                   -0.70    5.2   31.5ms
+  2   -7.852394695347       -2.33       -1.53    1.0   17.3ms
+  3   -7.852609816933       -3.67       -2.55    1.2   17.8ms
+  4   -7.852645605243       -4.45       -2.79    2.2   21.7ms
+  5   -7.852646173531       -6.25       -2.89    1.2   17.7ms
+  6   -7.852646669624       -6.30       -3.91    1.0   17.0ms
+  7   -7.852646685834       -7.79       -4.36    2.0   20.7ms
+  8   -7.852646686671       -9.08       -5.13    1.2   18.0ms
+  9   -7.852646686726      -10.26       -6.06    2.0   25.6ms

Potential-based SCF

scfres_scfv = DFTK.scf_potential_mixing(basis; tol);
n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ----   ------
-  1   -7.846810665131                   -0.70           4.5
-  2   -7.852524016627       -2.24       -1.64   0.80    2.0   20.2ms
-  3   -7.852636395982       -3.95       -2.71   0.80    1.0   19.1ms
-  4   -7.852646462027       -5.00       -3.28   0.80    2.2   32.6ms
-  5   -7.852646682385       -6.66       -4.12   0.80    1.5   27.6ms
-  6   -7.852646686376       -8.40       -4.81   0.80    1.2   17.8ms
-  7   -7.852646686723       -9.46       -5.74   0.80    2.0   21.1ms
-  8   -7.852646686730      -11.17       -6.68   0.80    1.8   19.8ms

Direct minimization

Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.

scfres_dm = direct_minimization(basis; tol=tol^2);
Iter     Function value   Gradient norm
-     0     1.422136e+01     3.190521e+00
- * time: 0.009868860244750977
-     1     1.067707e+00     2.196954e+00
- * time: 0.02828383445739746
-     2    -1.856487e+00     1.942438e+00
- * time: 0.046452999114990234
-     3    -3.741270e+00     1.778155e+00
- * time: 0.0724799633026123
-     4    -5.192383e+00     1.655498e+00
- * time: 0.09862399101257324
-     5    -6.791971e+00     1.097959e+00
- * time: 0.1250619888305664
-     6    -7.451373e+00     3.871056e-01
- * time: 0.15153288841247559
-     7    -7.656430e+00     1.928949e-01
- * time: 0.1701488494873047
-     8    -7.734878e+00     1.425624e-01
- * time: 0.18865489959716797
-     9    -7.776185e+00     1.032698e-01
- * time: 0.2071208953857422
-    10    -7.800336e+00     8.409873e-02
- * time: 0.22553181648254395
-    11    -7.822374e+00     5.860403e-02
- * time: 0.24404382705688477
-    12    -7.838833e+00     4.880713e-02
- * time: 0.26227593421936035
-    13    -7.848068e+00     3.224996e-02
- * time: 0.2805788516998291
-    14    -7.850812e+00     2.990200e-02
- * time: 0.2988598346710205
-    15    -7.852080e+00     1.336702e-02
- * time: 0.3171718120574951
-    16    -7.852500e+00     1.072310e-02
- * time: 0.3355410099029541
-    17    -7.852611e+00     4.300728e-03
- * time: 0.3539259433746338
-    18    -7.852636e+00     1.778173e-03
- * time: 0.3721909523010254
-    19    -7.852643e+00     1.336586e-03
- * time: 0.39039087295532227
-    20    -7.852646e+00     6.716949e-04
- * time: 0.4083278179168701
-    21    -7.852646e+00     2.957463e-04
- * time: 0.426494836807251
-    22    -7.852647e+00     1.913079e-04
- * time: 0.44487786293029785
-    23    -7.852647e+00     1.275083e-04
- * time: 0.4634239673614502
-    24    -7.852647e+00     6.055316e-05
- * time: 0.4816718101501465
-    25    -7.852647e+00     4.493357e-05
- * time: 0.5001299381256104
-    26    -7.852647e+00     2.647896e-05
- * time: 0.5185959339141846
-    27    -7.852647e+00     1.099816e-05
- * time: 0.536916971206665
-    28    -7.852647e+00     5.322596e-06
- * time: 0.5552489757537842
-    29    -7.852647e+00     4.390518e-06
- * time: 0.5735418796539307
-    30    -7.852647e+00     2.354754e-06
- * time: 0.5917189121246338
-    31    -7.852647e+00     1.328102e-06
- * time: 0.6097948551177979
-    32    -7.852647e+00     9.140157e-07
- * time: 0.6279258728027344
-    33    -7.852647e+00     6.459954e-07
- * time: 0.6459219455718994
-    34    -7.852647e+00     2.547856e-07
- * time: 0.6639080047607422
-    35    -7.852647e+00     1.501501e-07
- * time: 0.6817460060119629
-    36    -7.852647e+00     1.038999e-07
- * time: 0.6995279788970947
-    37    -7.852647e+00     6.094045e-08
- * time: 0.7172768115997314
-    38    -7.852647e+00     4.505547e-08
- * time: 0.7351429462432861
-    39    -7.852647e+00     2.419247e-08
- * time: 0.753154993057251
-    40    -7.852647e+00     1.189729e-08
- * time: 0.7711379528045654
-    41    -7.852647e+00     1.189417e-08
- * time: 0.8210859298706055
-    42    -7.852647e+00     3.907935e-09
- * time: 0.8393659591674805

Newton algorithm

Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.

scfres_start = self_consistent_field(basis; tol=0.5);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
+  1   -7.847727426781                   -0.70           4.5   40.1ms
+  2   -7.852559438278       -2.32       -1.62   0.80    2.0   19.9ms
+  3   -7.852640973993       -4.09       -2.70   0.80    1.0   15.9ms
+  4   -7.852646502378       -5.26       -3.40   0.80    2.0   19.4ms
+  5   -7.852646681453       -6.75       -4.41   0.80    1.5   17.7ms
+  6   -7.852646686631       -8.29       -4.88   0.80    2.2   20.9ms
+  7   -7.852646686725      -10.02       -5.53   0.80    1.0   15.9ms
+  8   -7.852646686730      -11.39       -6.48   0.80    1.8   18.2ms

Direct minimization

Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.

scfres_dm = direct_minimization(basis; tol=tol^2);
n     Energy            log10(ΔE)   log10(Δρ)   Δtime
+---   ---------------   ---------   ---------   ------
+  1   +1.694973039521                   -1.03   44.4ms
+  2   -1.642227753314        0.52       -0.67   24.7ms
+  3   -3.752931951173        0.32       -0.44   32.6ms
+  4   -5.202789607218        0.16       -0.54   32.5ms
+  5   -6.928797438369        0.24       -0.72   32.4ms
+  6   -6.985981947077       -1.24       -1.39   24.6ms
+  7   -7.564107828070       -0.24       -1.53   24.5ms
+  8   -7.611110617666       -1.33       -1.89   24.5ms
+  9   -7.754330033477       -0.84       -1.87   24.5ms
+ 10   -7.803808077097       -1.31       -2.44   24.5ms
+ 11   -7.839369209147       -1.45       -2.44   24.5ms
+ 12   -7.845813923096       -2.19       -2.54   24.5ms
+ 13   -7.849430250100       -2.44       -2.71   24.7ms
+ 14   -7.850940354397       -2.82       -2.96   24.6ms
+ 15   -7.852030073855       -2.96       -2.98   24.7ms
+ 16   -7.852404355882       -3.43       -3.44   24.5ms
+ 17   -7.852578612567       -3.76       -3.73   24.5ms
+ 18   -7.852623482859       -4.35       -4.29   24.6ms
+ 19   -7.852641063956       -4.75       -4.15   24.5ms
+ 20   -7.852645083517       -5.40       -4.40   24.5ms
+ 21   -7.852645999244       -6.04       -4.89   32.6ms
+ 22   -7.852646448118       -6.35       -4.69   24.8ms
+ 23   -7.852646617473       -6.77       -5.25   24.7ms
+ 24   -7.852646662521       -7.35       -5.64   24.6ms
+ 25   -7.852646677850       -7.81       -5.88   25.8ms
+ 26   -7.852646683529       -8.25       -5.63   24.8ms
+ 27   -7.852646685708       -8.66       -6.56   24.6ms
+ 28   -7.852646686384       -9.17       -6.10   24.7ms
+ 29   -7.852646686610       -9.65       -7.12   24.6ms
+ 30   -7.852646686697      -10.06       -7.21   24.6ms
+ 31   -7.852646686720      -10.64       -7.18   24.6ms
+ 32   -7.852646686727      -11.20       -7.71   24.6ms
+ 33   -7.852646686729      -11.64       -7.62   24.6ms
+ 34   -7.852646686729      -12.18       -7.76   24.8ms
+ 35   -7.852646686730      -12.64       -8.65   25.0ms
+ 36   -7.852646686730      -13.03       -8.11   24.7ms
+ 37   -7.852646686730      -13.50       -8.37   24.8ms
+ 38   -7.852646686730      -13.80       -8.79   24.7ms
+ 39   -7.852646686730   +    -Inf       -9.51   24.7ms
+ 40   -7.852646686730      -15.05       -9.61   24.7ms
+ 41   -7.852646686730      -15.05       -9.70   24.7ms
+ 42   -7.852646686730      -15.05      -10.39   24.7ms
+┌ Warning: DM not converged.
+@ DFTK ~/work/DFTK.jl/DFTK.jl/src/scf/scf_callbacks.jl:60

Newton algorithm

Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.

scfres_start = self_consistent_field(basis; tol=0.5);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.846883512169                   -0.70    4.5

Remove the virtual orbitals (which Newton cannot treat yet)

ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ
+  1   -7.847733001678                   -0.70    4.5   29.2ms

Remove the virtual orbitals (which Newton cannot treat yet)

ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ
 scfres_newton = newton(basis, ψ; tol);
n     Energy            log10(ΔE)   log10(Δρ)   Δtime
 ---   ---------------   ---------   ---------   ------
-  1   -7.852645926375                   -1.64
-  2   -7.852646686730       -6.12       -3.71    313ms
-  3   -7.852646686730      -13.34       -7.26    111ms

Comparison of results

println("|ρ_newton - ρ_scf|  = ", norm(scfres_newton.ρ - scfres_scf.ρ))
+  1   -7.852645836718                   -1.63    420ms
+  2   -7.852646686730       -6.07       -3.69    319ms
+  3   -7.852646686730      -13.21       -7.20    125ms

Comparison of results

println("|ρ_newton - ρ_scf|  = ", norm(scfres_newton.ρ - scfres_scf.ρ))
 println("|ρ_newton - ρ_scfv| = ", norm(scfres_newton.ρ - scfres_scfv.ρ))
-println("|ρ_newton - ρ_dm|   = ", norm(scfres_newton.ρ - scfres_dm.ρ))
|ρ_newton - ρ_scf|  = 3.0441848730098526e-7
-|ρ_newton - ρ_scfv| = 1.585329614590753e-7
-|ρ_newton - ρ_dm|   = 8.644187950852714e-10
+println("|ρ_newton - ρ_dm| = ", norm(scfres_newton.ρ - scfres_dm.ρ))
|ρ_newton - ρ_scf|  = 1.0378436234911173e-6
+|ρ_newton - ρ_scfv| = 4.322733443942211e-7
+|ρ_newton - ρ_dm|   = 5.207089267463966e-10
diff --git a/dev/examples/convergence_study.ipynb b/dev/examples/convergence_study.ipynb index 67d75afc12..7aaa5a002e 100644 --- a/dev/examples/convergence_study.ipynb +++ b/dev/examples/convergence_study.ipynb @@ -43,7 +43,7 @@ " model = model_LDA(lattice, atoms, position; temperature=1e-2)\n", " basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n", " println(\"nkpt = $nkpt Ecut = $Ecut\")\n", - " self_consistent_field(basis; is_converged=DFTK.ScfConvergenceEnergy(tol))\n", + " self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))\n", "end;" ], "metadata": {}, @@ -87,52 +87,52 @@ "nkpt = 1 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -26.49767419697 -0.22 8.0 \n", - " 2 -26.58816719122 -1.04 -0.62 1.0 82.8ms\n", - " 3 -26.61295626608 -1.61 -1.41 2.0 25.2ms\n", - " 4 -26.61324731200 -3.54 -2.03 2.0 22.6ms\n", + " 1 -26.49605492611 -0.22 8.0 121ms\n", + " 2 -26.59146115191 -1.02 -0.63 2.0 45.9ms\n", + " 3 -26.61282260044 -1.67 -1.40 2.0 24.5ms\n", + " 4 -26.61325931377 -3.36 -2.09 2.0 21.3ms\n", "nkpt = 2 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.79196407013 -0.09 7.2 \n", - " 2 -26.23199014706 -0.36 -0.70 2.0 90.7ms\n", - " 3 -26.23819180780 -2.21 -1.32 2.0 96.2ms\n", - " 4 -26.23847875926 -3.54 -2.32 1.0 83.4ms\n", + " 1 -25.79100051873 -0.09 7.0 153ms\n", + " 2 -26.23201994190 -0.36 -0.70 1.8 92.9ms\n", + " 3 -26.23817688276 -2.21 -1.32 2.0 94.2ms\n", + " 4 -26.23847490910 -3.53 -2.32 1.0 68.1ms\n", "nkpt = 3 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.78534515975 -0.09 4.8 \n", - " 2 -26.23812757811 -0.34 -0.78 2.0 100ms\n", - " 3 -26.25073310490 -1.90 -1.63 2.0 94.8ms\n", - " 4 -26.25103653462 -3.52 -2.16 1.2 71.7ms\n", + " 1 -25.78431270957 -0.09 5.0 133ms\n", + " 2 -26.23824645643 -0.34 -0.78 2.0 92.3ms\n", + " 3 -26.25075381202 -1.90 -1.62 2.0 94.8ms\n", + " 4 -26.25103735894 -3.55 -2.17 1.0 69.8ms\n", "nkpt = 4 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.91117921255 -0.11 5.1 \n", - " 2 -26.29241066673 -0.42 -0.76 1.8 165ms\n", - " 3 -26.30833180697 -1.80 -1.73 2.3 202ms\n", - " 4 -26.30842520357 -4.03 -2.67 1.1 127ms\n", + " 1 -25.91119908611 -0.11 5.6 332ms\n", + " 2 -26.29308848822 -0.42 -0.76 2.0 169ms\n", + " 3 -26.30835199153 -1.82 -1.75 2.0 188ms\n", + " 4 -26.30842720156 -4.12 -2.74 1.0 126ms\n", "nkpt = 5 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.90265289088 -0.11 3.9 \n", - " 2 -26.26491804486 -0.44 -0.71 1.9 164ms\n", - " 3 -26.28543664778 -1.69 -1.63 2.1 194ms\n", - " 4 -26.28570836139 -3.57 -2.25 1.8 158ms\n", + " 1 -25.90247284997 -0.11 3.9 266ms\n", + " 2 -26.26519596942 -0.44 -0.71 2.0 162ms\n", + " 3 -26.28544393976 -1.69 -1.64 2.0 188ms\n", + " 4 -26.28571184136 -3.57 -2.28 1.0 129ms\n", "nkpt = 6 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.87438026914 -0.10 5.0 \n", - " 2 -26.27160715029 -0.40 -0.76 1.9 279ms\n", - " 3 -26.28806498091 -1.78 -1.69 2.1 368ms\n", - " 4 -26.28818599273 -3.92 -2.58 1.1 233ms\n", + " 1 -25.87444788581 -0.10 5.4 606ms\n", + " 2 -26.27239346641 -0.40 -0.76 1.9 298ms\n", + " 3 -26.28808961940 -1.80 -1.72 2.1 365ms\n", + " 4 -26.28818867883 -4.00 -2.63 1.0 218ms\n", "nkpt = 7 Ecut = 17.0\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.89697229477 -0.11 3.5 \n", - " 2 -26.27699470015 -0.42 -0.74 1.9 307ms\n", - " 3 -26.29414410800 -1.77 -1.73 2.0 356ms\n", - " 4 -26.29420688356 -4.20 -2.69 1.0 218ms\n" + " 1 -25.89635284085 -0.11 3.4 465ms\n", + " 2 -26.27746449688 -0.42 -0.74 2.0 303ms\n", + " 3 -26.29415273701 -1.78 -1.75 2.0 349ms\n", + " 4 -26.29420723968 -4.26 -2.68 1.0 224ms\n" ] }, { @@ -171,108 +171,108 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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HIM2bdqU/nsDUHPM7GS6rZm7DfULjti3XmJDPQAAAAAAdYGuYLRjx47BwcGO8YkTJzxRT+0zevRox0BV1ffff7/MObm5uatXr3aMx44d66XKAFSSIvLWAHOE1eUEuyYTtqqZRV6sCQAAAAAAVA9dwai/v/9tt93mGO/atSs1NdUTJdUyrVu3di4affHFFzMzM389Z+7cuXl5eSJiNpunTJni1foAVEaTIOWtAe421F/I1x7dxYZ6AAAAAABqPV3BqIg8+uijiqKIiKqqzz33nCdKqn3mz5/v+Eu4ePHinXfemZOTU/rZZcuWvfzyy47xfffd1759ewNKBFBhY683ACa4ngAAIABJREFUTWjj7r1x+Qn7p6ftXqsHAAAAAABUB73BaJ8+faZNm+YYv/7662vWrNFdkrf16tVLKaVhw4bOpx588EHlf50+ffrXV+jTp8+cOXMc482bN7dr1+7xxx9/5513FixYMHjw4MmTJ6uqKiJt27b917/+5Z0/FAA9XutnblHfXbPRmQnqpSteKwcAAAAAAHieRf8lFi5cePLkye+++85ms91zzz3PPffcn/70J7PZ3V7UumfevHmZmZlvvvmmiCQnJ/86AG3Tps1XX30VERFhRHUAKifEX94bZB78tU11caeltEKZFGdbP9ziLj0FAAAAAAA1mN4VoyJitVq//vrrmTNnKopSVFT05z//uVOnTi+++OLBgwdLSkr0X7+6BQcHh1WYyVT235iiKIsWLVq9enWvXr2ueSoiIuLPf/7zgQMH2rVrV/1/GgCeMSBKmd3F3Tvkt0nakuNsqAcAAAAAoLZSNM3FgqiKmTlz5u7dux3jn3/++Zr2mlartVGjRiEhIQEBARW84J49exz9OmuvxMTE48ePJycn16tXr0WLFr179/bz8zO6KI8JCAgoKioSkcLCQqvV9d27q1l2dnZRUVFkZKRRBcAXFKnSZ43tcIbLN8kgixwYa2kXUrvfsiqluLg4PT09IiLC39/f6FoA35KSkmK1WkNCQowuBPAtubm5eXl50dHRRhcC+BabzZaamhoaGhoYGGh0LYBvSUtLM5lM4eHhRhfiPXq30v/888/79u1z9WxRUdGFCxcuXLig81VqlzZt2rRp08boKgDoZTXLh4PNvVbbCl3chf6KTe7dou78ncXPA4vvAQAAAACAV/HbPAC41DlMeaaH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bBk3btzJkydFpHPnzmvXrk1ISDB6KMCPpKSk/P3vf//ggw/MZrOIFBcX/+53vzN6KMAXzJs3b9OmTSIyYcKErKwso8cB8BNPPfVU058r1qxZY+wwgG84vXl9zz33uP7ufqZJkyZFRUW51hs2bPDCYN5HMAoAuCDbtm0bO3ZsbW2tiMTGxubk5HTr1s3ooQB/NHHixKlTp7rW//rXv07fXw/ADaWlpU8//bSItG/ffuHChUaPA+DnQkNDR40a5Vrn5+cbOwzgG5riThEZOnToLx1mNptTU1Nd63379rX4WEbgqfQAgPP7/vvvx44d67pFd6dOnXJyci699FKjhwL812233TZ//nwRcTgcX3/99YQJE4yeCGjDiouLXZshnE7niBEjznrM8ePHXQu73d6jRw/XeuzYsa+88op3hgT8XNODJSoqKoydBPANKSkp3377rWvdqVOncxwZExPjWvjqH+MJRgEA57F3795f/epXVVVVIhIZGfnpp5/27dvX6KEAv5aUlNS05iMi4CknT548dOjQuY/Rdb3pGG7yC3hN01NiAgMDjZ0E8A29e/duWjscjnMcabfbXYugoKCWnckgbKUHAJzLvn37Ro0adfToURGJiIj47LPPmjZTADCKq77t4pOPBwUA4HQFBQWuxbmrbQAu0PDhw5vWxcXF5ziy6bu++tNHYxQA8Iv2798/atSoI0eOiEj79u3/85//DBkyxOihAPzk5vfc7Re4SKmpqceOHTv3MX/605/+8pe/iEhgYKDrj4VCcw3wluLiYtfj0eScN0MEcOGuvvrq2NhY19aHzz//PCMj46yHVVdXb9++3bX21U+CNEYBAGdXWFg4evTo0tJSEQkNDV29evUVV1xh9FAA5NixY3PmzHGtExIS+vfvb+w8QFtnNps7nE9ISEjT8U0vhoWFGTg24CecTudDDz1ks9lcX2ZmZho7D+AbTCbTnXfe6VovWbLEddu0M73yyiuNjY2u9fjx4700nHcRjAIAzqKoqGjkyJGFhYUiEhoamp2dffpuCwAt5PHHH1+wYMGJEyd+6YAdO3aMGjXKYrG4vpwxY4aiKN6aDgAAD5s2bdry5cubkpefKS8vv+mmm7Kzs11f9u3b98Ybb/TidIAve/LJJ113ZKqqqrrzzjsbGhp+dkBOTs4f//hH13rQoEGjR4/29oheoei6bvQMwLnU1NTcfPPNp79y9OjRXbt2udZpaWnBwcFN3+rcufMbb7zh1fkAH5WRkfHxxx+71p07d05JSTn38YMGDWqqsAFw2+TJk1euXBkUFDRq1KhBgwZddtllERERQUFBx44dO3DgwLp167744gtN01wHDxs2bMOGDQEBAcbODPiDZ555xvXhMDAwsOkhMAAu3hVXXPHNN9+Eh4enp6cPGjSoZ8+eERERDofj6NGjX3zxxQcffFBfX+86sl27dp9//vngwYONHRjwJW+88cZ9993nWl966aWPPfbYsGHD2rVrd+jQoRUrVrz66quu5zKFhITk5uYOHDjQ0GFbCvcYRWtnt9tzcnJ+6btN95px6dWrV8tPBPiFpv1KIlJSUlJSUnLu4+msAR5ktVrXrFmzZs2acxyTnp7+3nvvkYoCAHxAbW3tqlWrVq1a9UsHxMbGLl++nFQU8Kx77723pKRk1qxZuq7v/f/t3WtwlNX9B/DdBAIBhBACWooCRUojk7aCUNoS5GYoXrg4iC3DlHYEMlNpiwWLlWpLp5U6VWREaKu1VopWxtoMaGi5CUIQBsSCHUALlUsEIQZCpCEkxOT/Iv8+s8MlLHFDWPbzeXXO2XOe81veGL+z5znvvTdp0qSz57Rq1eqFF164UlPRkKP0AACXj7Fjx37jG99o0aJFHXN69er15z//ecWKFe6jByDeDR48+Nprr61jQuvWrX/wgx/861//GjRo0CWrChLHQw89lJ+f36VLl3N+OmzYsI0bN44YMeLSFnVJOUrP5a6qqmr79u1RTm7evHnPnj0btB5IELt3767jLYdna926dffu3RuuHkgoFRUVGzdufPvtt/fu3VtcXPzJJ5+0bt06PT09KyurT58+F3y1BRBzhw4d+vDDD0OhUDgc7tWrV2OXA1ea/fv3b9iwofa/esXFxVVVVW3btu3UqVPfvn2/+tWvuugMGlp1dXVBQcHrr7/+wQcfnDhxIiMjo0ePHjk5OYnwZ6dgFAAAAABIOI7SAwAAAAAJRzAKAAAAACQcwSgAAAAAkHAEowAAAABAwhGMAgAAAAAJRzAKAAAAACQcwSgAAAAAkHAEowAAAABAwhGMAgAAAAAJRzAKAAAAACQcwSgAAAAAkHAEowAAAABAwhGMAgAAAAAJRzAKAAAAACQcwSgAAAAABE1bhgAADp1JREFUkHAEowAAAABAwhGMAgAAAAAJRzAKAAAAACQcwSgAAAAAkHAEowAAAABAwhGMAgAAAAAJRzAKAAAAACScJo1dAAAAnFthYeHp06dr223atGnXrl3j1nMZKikpKSsrq203a9asffv2MXx4aWnp0aNHa9vhcLhr164xfDgAQKPzi1EAAC5TgwYN6vY/jzzySGOXczm6//77r/2fO+64I7YP/9Of/hT8+2dlZcX24QAAjU4wCgAAAAAkHMEoAAAAAJBwBKMAAAAAQMIRjAIAAAAACcet9AAAEK/Gjh2bmZlZ2+7YsWPjFgMAEF8EowAAEK9ycnJycnIauwoAgLjkKD0AAAAAkHAEowAAAABAwnGUHgAALlpFRcWePXsOHTp0/Pjxq666qlu3bt26dUtKiv3PDsrLy3ft2nXw4MFTp06lpaV17969S5cuMXlyaWnp+++/X/vk9u3b9+jR45prronJkwEA4oJgFACAK0R1dfVDDz20efPmYKRz585PPvlkixYtYrjLli1b5s2bt3Tp0tLS0sjxDh063H333dOmTevcuXMoFPrggw+++93vBp/OmTMnKyvrnA8cP378kSNHattjx46dNGlSKBSqqalZunTpggUL3njjjYqKimBydnb2unXrgu68efOWL19e2/7CF77w2GOPRfMV8vPzf//73y9fvryysjJyvGfPnhMnTszNzU1NTY3mOQAAcU0wCgDAlaCiomLChAmLFy8ORrKysp577rkYpqLl5eUzZsyYP39+dXX12Z8WFRXNmzfv2WefnTt37qRJk06ePLlq1arg05KSkvM9dsOGDfv27att9+rVKxQKHTx4cPz48WvXrj17ck1NTWR3+/bt+fn5te3i4uILfoWioqLvfe97r7zyyjk/3bFjx3333Td//vyXXnqpd+/eF3waAEBcE4wCABD3jh07NmrUqPXr1wcjQ4cOfeWVV1q3bh2rLU6dOjVq1KgVK1bUPe3kyZOTJ08+duzY6NGj67fRgQMH+vfvX1hYeM5Pz5nJRqmoqGjgwIG7du2qe9qePXtuvvnmC35TAIB4JxgFACC+7d2799Zbb3333XeDkQkTJjzzzDNNmzaN4S7jxo07Iyu87rrr7rzzzu7du7dt2/bIkSObN29+7bXXTpw4EQqFfvKTn9TvNHplZeXIkSODVLR58+Zf+9rXOnXq1LRp08OHD7/99ttn/GI0euXl5Tk5OWekollZWaNGjeratWtycnJhYWF+fv6mTZtqamrKyspGjx5de6gfAOBKJRgFACCObdmy5Y477gje0RkKhWbMmDF79uxwOBzDXRYtWpSXlxd0U1NTZ8+ePWXKlOTk5Mhpx44du++++xYuXFhTU/Pggw/WY6Pnn3++9tB927Ztf/azn02cOLFly5bBp5988sm2bdvq9xVmzZq1ffv2oNu+ffvf/e53d955Z+ScmTNnrl+//jvf+c77779fVFQ0d+7c+u0FABAXBKMAAMSrFStWjBkzpvZHmqFQKDk5ef78+bm5ubHd5b///e/UqVODbkpKyl//+tdbb7317Jnp6enPP/98u3btnnjiibKysnrsVZuKfuYzn1m1atUNN9xwxqfJycn1e/Xnjh07Hn/88aCblpa2evXqc14GlZ2dvX79+q9//ev79u2r31cAAIgXSY1dAAAA1Mcf//jH2267LUhFW7ZsuWTJkpinoqFQ6C9/+cvRo0eD7owZM86ZigYee+yxr3zlK/XeLjk5ecmSJWenop/GU089VVVVFXR/+9vfnjMVrdWxY8fFixcnJfk/BQDgCufPHQAA4kxNTc3Pf/7ze+65Jwj7rrnmmjfeeOO2225riO2eeeaZoJ2RkfHAAw/UPT8pKenRRx+t93b33HNPnz596r38bGVlZS+++GLQ7dev39133133kr59+44bNy6GNQAAXIYEowAAxJPKyspvf/vbs2bNCkauv/769evX1++M+QUdP378rbfeCrpjx45t0aLFBVcNGDDgc5/7XP12nDx5cv0Wns/atWs//vjjoDtx4sRoXsDq5iUA4IonGAUAIG6cOHFi5MiRixYtCkb69eu3cePG66+/voF23Lx5c+RF8MOHD49mVTgcrvu4/flkZGTEPOHdsmVLZHfkyJHRrOrfv3/79u1jWwkAwGVFMAoAQHw4dOjQgAED/vGPfwQjo0ePfv311zMyMhpu08ib3EOh0Je//OUoF0Y/M1KvXr3qsapuW7duDdrXXXddlP9cSUlJN954Y8yLAQC4fLiVHgCAOLBz586+ffsePHgwGJk6derjjz8e/R1B//znP/ft23fBaWf8UjLy2qWmTZt26tQpyu3qd5T+s5/9bD1W1e3DDz8M2pmZmdEvzMzMXLFiRczrAQC4TAhGAQCIA5E/FA2FQr/61a8efPDBi3rCggUL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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABwgAAASwCAIAAABggIlUAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXxU1fk/8DMzCWHfRBQRFFEUNxRBRdlswWq19asW2yqKGyBSpa60Lm3d+tOublXBDVFo1dbailWrVhYVURBFBcSdRWWRfUlI7szvj9CIlhmBJDNJ5v3+62bm3JOnLff2xYfznBNLpVIBAAAAACCfxHNdAAAAAABAtglGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUQAAAAAg7whGAQAAAIC8IxgFAAAAAPKOYBQAAAAAyDuCUbbZ+vXrc10CAAAAAFSKYJRtc9FFFzVu3Pjcc8/NdSEAAAAAsP1iqVQq1zVQmzRu3HjdunXxeLy4uLiwsDBXZRQXF5eVlTVu3DhXBUB+iqJo/fr1DRs2TCQSua4F8svatWsLCgrq16+f60Igv5SUlGzcuLFJkya5LgTySzKZXLduXf369XP4V07IT+Utwg0bNsx1IdljxSjbpqysLISQTCaTyWQOyygpKdHRD9kXRdHatWujKMp1IZB31q9fX1JSkusqIO9s3Lhx7dq1ua4C8k4ymVy7dm353z2BbFq/fn1xcXGuq8gqwSgAAAAAkHcEowAAAABA3hGMAgAAAAB5RzAKAAAAAOQdwSgAAAAAkHcEowAAAABA3hGMAgAAAAB5RzAKAAAAAOQdwSgAAAAAkHcEowAAAABA3hGMAgAAAAB5RzAKAAAAAOQdwSgAAAAAkHcEowAAAABA3hGMUvusW7fuoYceuv322xctWpTrWgAAAAColQSj1CZz584dMWJE27Ztf/KTn1x33XW77777ySef/Pzzz6dSqVyXBgAAAEBtIhilFigrK/vb3/727W9/e99997311ltXrVoVQgixeFlZ2WOPPdavX7/OnTvfcsstK1euzHWlAAAAANQOglFqtM8///ymm27q2LHjD37wg//85z+pVCoUFIVuJ4eRE8NvPwon3xBa7hpCePfdd3/605+2adPmlFNOmTp1aq6rBgAAAKCmi+lBZpvUr1+/pKQkhFBcXFxUVFStv+uJJ574wQ9+sHHjxk0/t94z9B0SjhwUGrb4clBUGmb+I0wcFd6dVPHZpZde+tvf/rZaa4P8tHHjxi+++GKHHXaoV69ermuB/LJkyZKioqJmzZrluhDIL2vWrFm7dm2bNm1yXQjkl7KysqVLlzZv3rxBgwa5rgXyy7Jly+LxeMuWLXNdSPYIRtk22QxGu3fvPn369BBPhAO/G/qeF/btF2KxtKM/nRMm3hVeGRc2rC4qKpo/f37r1q2rtTzIQ4JRyBXBKOSEYBRyQjAKuZKHwahWemqo1157bfr06SGEMPD2MPxvYb/+mVLREMIuncOpt4SrpoVYvKSk5N57781OnQAAAADURoJRaqg//elPIYTQsHk49EfbcFvrjmH/74QQ7rrrriiKqqc0AAAAAGo9wSg10YoVKx599NEQQjhyUChqtG039x0SQpg/f/6TTz5ZDaUBAAAAUBcIRqmJ7rnnnvXr14dYLPQevM03H3BsaLV7COHOO++s8sIAAAAAqBsEo9Q4qVTq7rvvDiGEzt8OO3fa5vtj8dD73BDCM888M2/evKquDgAAAIC6QDBKjfP000+/9957IYTQd+h2TtHr7FBY/8uAFQAAAAC+SjBKjbOpBb55m3Dgd7dzisatwiEnhRDuvffe9evXV11pAAAAANQRglFqlo0bN/7rX/8KIYTDfhwShds/0eGnhhBWrFjx4osvVlFpAAAAANQdglFqlnr16h1wwAEhhDBvSqUmmjclhFBYWLhpNgAAAADYjGCUGmfYsGEhhPDRa+HjGds5RdnG8OKYEMJJJ53Upk2bKqsMAAAAgLpCMEqNM3DgwBYtWoQQwqRR2znFjL+F1YtDRcYKAAAAAF9VkOsC4OsaNmx4+umn33rrrWHaw+EHN4ZGLbd5iomjQgj77rtv7969q74+AAAAyKIoin7961+/9dZbuS6EuqN9+/bXXHNNo0aNcl1IjglGqYmGDRt22223pUo3hJfHhv4/3babF74V3n85hDB8+PBYLFYt9QEAAEC2PPHEE7/4xS9yXQV1TZs2bS655JJcV5FjWumpifbZZ59vfetbIYTwwl0hldy2myfeFUJo3LjxwIEDq6E0AAAAyKqlS5fmugTqoGXLluW6hNyzYpQaatiwYc8//3xY+mGY/XzYr//W3la8Jkz7Swih+/dPb9q0aTXWBwAAANn17W9/e+jQobmugtrt8ccfHz9+fK6rqCkEo9RQJ5xwQtu2bRctWhTGXRC+c3E4/NRQ1DjTDalkeOup8O+bQ/GaEMIrnQe/vzq1Z1Ot9AAAANQRe+yxx4ABA3JdBbXbBx98kOsSahCt9NRQBQUFw4cPDyGEpR+Gh34SLts9jB8RPp2zhaFrloanfhN+vne47cTw7qQQQtjnqA0773/mpChKZbVmAAAAAGoLwSg118iRIx988MHDDz88hBA2rA4v3Bl+2SX8rn+Y/tcQlYYQwgevhHsGhcv3CI9dFb74JIQQdmgfTrwunP9ICOGlxanfztrG/UkBAAAAyA9a6am54vH4wIEDBw4cOHPmzDvuuOPPf/7zunXrwruTwruTQrM2oUmrsPCtTUNj8bBf/9D3vHDAMSGeqJjhFzOifm1j3VppqAcAAADgK6wYpRY4+OCD77777oULF95888177713CCGs+qw8FW3ecofCYy8ON8wOI54IXY7bPBUNIZQmw6CJ0YaynFQNAAAAQM0lGKXWaN68+YgRI+bMmfPss89+73vf69q16/333//ZooW3/P63Ycc90t01e2XqqhlRNusEAAAAoObTSk8tE4vF+vXr171795KSktatW4cQzuscnpyffHJB2oOWbn47eVy7+Ld20VAPAAAAwCZWjFLrxUK4r3dB6wZpByRT4YxJ0YqSLNYEAAAAQM0mGKUuaN0gjOqZyDBg0brUiKka6gEAAADYRDBKHfF/u8UH7ZXpz/OD7ycf/jCZtXoAAAAAqMkEo9Qdtx6R2L1Jpo1Ez3sxWrAu7VakAAAAAOQPwSh1R9PC8GCfRCJ9NLpyYzhnciQZBQAAAEAwSp3Sc+fYRftn+lP97KLUHbM11AMAAADkO8Eodc313RIHtszUUH/ptOidFZaNAgAAAOQ1wSh1TVEijD8qUT/9GfXFUThjUlRq2SgAAABAHhOMUgft1yJ2zSHpk9EQXl+WuuGNKGv1AAAAAFDTCEapmy49IN63TaaG+hveSL6yREM9AAAAQJ4SjFI3xWPhwb6JFkVpB5Qlw8CJ0drSLNYEAAAAQI0hGKXO2rVR7A+HZWqo/2B16vJXNdQDAABAtn3xxRcffvhhrqsg3wlGqcvO7BQf0CHTH/K75iSfXKChHgAAALJkxowZZ5xxRps2bTp27NitW7fRo0evW7cu10WRpwSj1HF3HJlo0zDtt6kQzp5ctmRDFgsCAACA/LN69erbb79933337dat24MPPlhaWhpCmDFjxtChQ9u3b3/ppZe+//77ua6RvCMYpY5rVT+M6VOQ4RimJRvC0Bc11AMAAEC1mDt37ogRI9q2bXvBBRfMmTPnfwcsX77897//fadOnfr37//oo4+WlZVlv0jyk2CUuu/otrGhnTP9UX/8k+QD7yWzVg8AAADUeSUlJePHj+/Zs2fnzp1vvfXWtWvXfvldvYah55nh+1eHFm0rPkulUs8999wpp5zSsWPHX//614sXL85B0eSZglwXANnw+8MS//k0NW9V2u1EL3w56rNzbPcmGZaWAgAAAN9s2bJlf/jDH+69994lS5Z8/bud9gp9hoQjzwgNW4QQwnE/D28+GV64K8z9T0ht+jv7/Pnzr7zyymuuuebkk0++9NJLu3btmt3ya5zFixfPnj07iqIQQtOmTQ899NBcV1R3CEbJCw0LwvijEj3+WVaaZmHo6tJw+qRo4nEFCdEoAAAAbK9UKnX00UfPnDnzK5/GE6HLcaHveaHzt0Nss794xwvCwSeEg08Ii98LE0eFl8eG9SvLv9m4ceOf//znv//977Nmzdprr72y+J8g91auXPn222/P+K/Zs2dXfNW9e/dXX301h7XVMYJR8sUhrWI/7xK/dmbalvkXP0/98e3kpQfYXwIAAAC20/PPP/+VVLTZzqHn2aH3uaHlrplu22mv8MPfhROvDa8+HF64K8zfNENxcfFtt9126623VmfJNc7ee++9hcW2VAMZEHnk6oMTh7XOtCL0qunRrOVp2+0BAACAzO64445NV0WNwpCHwo3vh//71TekohXqNQw9zwpXTwtXvBh229RBP3bs2HXr1lVPsbVGPC7Bqxb+ayWPFMTDmN6JhunXSZdE4dQXomJn1AMAAMC2+/TTTydMmLDph8NPDd1PCQX1tmeiDoeG719dfrlq1apx48ZVUYG1RvPmzY888sgLL7zwgQceePvtt0844YRcV1Q3aaUnv+zTPHbToYkLXk6bfb6zIvXLGdFNhyayWRUAAADUAXfddVdpaemmH3qfW6m5Djg2tNo9LPs4hHDHHXcMGTKkssXVHm+++ebOO++8+SexmBNRqoUVo+Sd4fvGv9su0wvld28lJ36moR4AAAC2QWlp6b333rvphz2PCO0PrtR0sXhFtPrmm2++/PLLlauuNvlaKkr1EYySd2Ih3N0rsUNR2gHJVDh9YrSiJIs1AQAAQC332GOPffrpp5t+6Du0CmbsdXYorF9+eeedd1bBhNXsqquu6tatW7du3YYPH/6Ngx999NHywX369Nm4cWMWyuN/CUbJR7s0jI3ulalZfuG61MXTbDUKAAAAW+vLY5catwpdT6yCGRu3CoecVH75yCOPLF68uArmrE69evWaMWPGjBkzRo8evWjRosyD//jHP5YP7tSpU71627UTK5Vmj1Hy1Em7x0/bMzXu/WS6AWPmJb/bLjagg388AAAAoJZ5aXHqnneTs1ekomxtFFe8YM47U6Zs+qH3ORUrPSur79DwyvgQwsaNGw+59J6dTx5ZNdN+kyaFoUVR7HvtY6fvGS/Y6mDg6KOP7tSp07x588rKyu67776rr7463ci33npr6tSp5ddDh1bF6lq2i2CU/PWnIxJTPk/NX5v2/yXOfynquVO8TcNsFgUAAACVcv3M5C9mZC0R/a/H7gipVAghxOKh1zlVNm3HHqH9wWH+zBDCon+NWtTrkhDP2mnJqb9/HMa+l3zyOwUNty4/i8VigwcPvuyyy0IId9999xVXXJFIbLnau+++u/yiS5cu3bp1q6KC2WZWw5G/mtULD/VNxNOfw7SsOJw5qcwxTAAAANQWzy5KXZ39VLRkbZg2ftP1gceGVrtX5eR9Bm+6WL4gvPV0Vc68FSZ+lhr56jZstXfWWWfVr18/hLBgwYJnnnlmi2M2bNjw0EMPlV+ff/75lS+S7SYYJa/12jk2Yr9MT8G/F6VGzUnbbg8AAAA1yp9m5+LvsFMfChtWb7qukmOXNnf4qaFhi03XE0dV8eRb4b55yQ1lWzt4hx12GDBgQPl1xbLQr3n44YdXrFgRQmjcuPGPfvSjqqiR7SQYJd/9v+6JA1qmXzUawiXTonmrLBsFAACgFpizMhd/gZ311KaL5m3CfkdX8eT1GlYcwRRmPxvKSqp4/m+yvix8kn4Xvv81bNiw8osJEyZs8QimisD0tNNOa9q0aeUrZLsJRsl3RYkwtk+iXvpHYX1ZOPWFqNSyUQAAAGq85jk53rx1x00Xq5eE5Qurfv5PZmy6aLFrKCiq+vm/SfOiTAuqvqZHjx5du3YNIZQfwfS1b+fMmfPyyy+XXw8ZMqSqKmT7CEYhHLRD7FeHZNq8ecay1P97UzIKAABATXfCbrmIevoMCbFYCCEkozB5y/3j2++DqWH+G//9RYMzDq0Wh7WO7dxg226pOGj+7rvvjqKvbFF65513ll907969PD8lhwSjEEIIIw+M92mT6d9/rpsZTVuioR4AAIAabcT+8f1bbMPyxqrRZp+wV69N15PvDaXFVTl5xb6iBfVCzzOrcuat0KAg3Noj01KqLTr11FObNWsWQliwYMG///3vis83P3bJctGaQDAKIYQQj4X7eyeaFqYdUJYMZ06O1m/1dssAAACQfY0KwgvHFZzaMZ7IcjpacebS2mXh9b9X2bRrl4UZj2267vaD0KR1lc28Fbq2ir3w3YJDd9zm/yobN248cODA8uvRo0dXfP7II4+UH7vUpEmTH/7wh1VVJ9utINcFQE3RoUnsD4cnzp0SpRswd2Vq5KvRbUds878UAQAAQNa0qh/GHZW4s2fi/VWprHU+lh33g+/987Kln38aQggTR4XDflw18065r2L96X2/OP/A7tkLslo3CO0abX+6PHz48DvuuCOVSpUfwdS2bduw2bFLAwcObNKkSdUUSiUIRuFL5+wdf3ph6q8fpd1O9E+zk8e2i3+3Xda7EgAAAGBbNC0MXVtl82+v9c4bfM51110XQgjvvxzmzwztD67slKlkmHxP+WWXLl3OOvbIyk6YRZ07d+7Vq9fkyZPLysruv//+q666avNjlwYPzsFmqfwvrfTwFXcemciwp3IqhMFToi9KslgQAAAA1AbnnXdeYeF/t6j7b6BZKW89FZZ9XH55/vnnV8GE2TVs2LDyi/IjmO66665UKhVCOOywww4+uNKpMVVBMApf0ap+uL9PQYZ/U/t0fWpI+nZ7AAAAyE+77LLL8ccfv+mHqePC+hWVnXHipt05mzRp8uMfV1FvfhaddNJJO+20Uwhh/vz5//znPyuOXao4s56cE4zC1x2za+zcfTI9Go99nBz3ftp2ewAAAMhPFWskw8b14ZXxlZpr6Ufh7WfKL88666zauCNnvXr1zjnnnPLrwYMHL1++PITQrFkzxy7VHPYYhS344+GJiZ+l3luVdpfq4S9HvXaOtW9ss1EAAADYpF+/fp06dZo3b14IIUwcFfoMCYnCb7opjRfuDKlkCCEWi5133nlVV2NWDR069Kabboqi6Isvvij/5PTTT2/YsGHmuxYuXDh37tzNP1myZEn5xerVq5977rnNv+rQoUPHjh2rruT8IhiFLWhUEB7ok+j1RFmUJhpdtTEMnBhNPK4gLhoFAACAEEIIsVhs2LBhF110UQghfDY3jNwz9Do79Bkcmu+ytVOUbgivPhIm3hU+nlH+Qd++fTt37lw99Va79u3bH3vssRMmTKj4pGINaQZPPPFEuj1V33333f79+2/+yZVXXnn99ddXss68pZUetqxH69jILpkekCmfp255R0M9AAAAfGnQoEFfrohc9VmYcEMYuWe485Qw5z8hlbYvM4QQlrwfHrk8XNYhjBlckYqG2nns0ua+3F4ghCOOOOKggw7KYTF8jRWjkNY1XRPPLkq9tjTti/vnr0X9dokd0NKqUQAAAAghhBYtWtxzzz0jRoxYunTppo+SZeH1x8Prj4edO4W+Q0OP00PD5l/ekIzCrH+FiXeF2c99LTkt36PzpJNOymL5Va9nz56JRCKKohDCkCFDtuaWjh07DhgwYCvn33///be/uLwnGIW0CuLhgT6JQx4v21C25QElUThjUjTthIJ61l4DAABACCGEH//4xyeffPI//vGP0aNHf2VDzM/nhb9cEv52ZehyXOg3IuzYIbw8NkwcHb745GsztGnT5owzzhg+fHi7du2yWno1ePTRR8tT0RYtWpxyyilbc8vRRx999NFHV3NdhKCVHjLr3Dz2626JDAPe+CL1qxlR1uoBAACAmq9evXoDBgx49tlnZ86cOXjw4EaNGn35XWlxmP63cGPvcFmH8LcrN09FY7FY//79H3vssQULFtx44411IBUNIdx2223lF4MGDWrQoEFui+FrBKPwDUbsHz9m10zN8jfNSk76LOM+KQAAAJCXDjrooNGjRy9atOiWW27ZZ599vvJd8sv2zBYtWlx00UVz587997//feKJJyYSmZYo1SL//ve/33zzzRBCYWHhpjOpqEkEo/ANYiHc0yvRsijtgGQqnDU5Wl2axZoAAACg9mjWrNmFF144Z86cKVOmDBgwoLCwsOKrrl27jho1asGCBX/4wx86deqUwyKr3OLFi887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2Y36zj333H79+lVJKeVsMAq0bhBG9Uz837NpW+YXrUtdODV6qG+mpnsAAACADCobjP7whz+skjoANnfCbvEzO6XGzEumGzDu/eTx7WI/6mjZOwAAALA9ZApADXVbj8SeTTMtIR/2UrRgnc1GAQAAgO0hGAVqqMaFYUyfRCJ9NLpyYzh7ciQZBQAAALaDYBSouY7cKXbJAZleU88tSt3+Ttp2ewAAAIB0BKNAjXbtIYkuLTM11F/+avT2CstGAQAAgG0jGAVqtKJEGP+tRP30588XR2HQpGijZaMAAADAtqjsqfQZrF+//o033li8ePHKlStXrVrVsGHDFi1a7LDDDvvtt99OO+1Ufb8XqGP2bR67rlvismlRugGvL0tdPzO69pD06SkAAADAV1V9MLpw4cJRo0Y99dRTb775ZllZ2RbH7LHHHr179x4yZEiPHj2qvACg7rl4//i/5idf+Cxty/z/ezN5bLt4j9aZmu4BAAAAKlRlK/2SJUtOO+20Dh06XH/99TNmzEiXioYQPvzwwzFjxhxxxBHdu3d/+eWXq7AGoE6Kx8LYvokWRWkHlCXDwBeiNaVZrAkAAACozaosGH3qqacOPPDA8ePHZ8hD/9f06dN79+599dVXR1HaJlmAEMKujWI3H56pWf7DNanLX/UmAQAAALZK1QSjEyZM+P73v7948eLtuDeKouuvv/7888+vkkqAOuyMveKn7JHprXXXnOSE+U6oBwAAAL5ZFewxOn369FNOOeVrC0WLior69evXvXv3zp07t2zZslmzZuvWrVuzZs2HH344c+bMZ5555vPPP998/OjRo3fbbbcrrrii8vUAddhdRyZeXpxauC5t+nnOlLJZJxXu1CCbRQEAAAC1T2WD0VQq9ZOf/GTDhg0VnzRr1uyqq64655xzWrRoke6uKIqefvrpK664YtasWRUfXnfddaeeeuruu+9eyZKAOqxFUbivd+I7T5WlS0aXbAhDX4we7++EegAAACCTyrbSP/bYY9OmTav48dBDD50zZ86ll16aIRUNISQSieOOO27GjBkjR46s+LC4uPjqq6+uZD1Ande/bey8zpneXf/4JDlmXjJr9QAAAAC1UWWD0XHjxlVcH3zwwf/5z3/atGmzlfcWFBTceOONP/vZzyo+eeyxxzZffAqwRb87LLF3s1iGARdMjd5fbbNRAAAAIK1KBaMlJSXPPffcponi8TFjxjRq1GhbJ7n22mv322+/8uv169dPnDixMiUB+aBhQRh3VKIw/QtsbWk4c1IUiUYBAACANCoVjM6dO3fNmjXl13369DnwwAO3Y5LCwsIhQ4ZU/Pjaa69VpiQgTxzSKnbFQZneYC8tTv3+LQ31AAAAwJZVKhhdsmRJxfW3v/3t7Z5n83s3nxMgg6sOShzWOlND/S9mRG8ut2oUAAAA2IJKBaPLli2ruN76rUX/V9u2bSuuBaPAViqIh3F9E40L0w4oicKp/4mKoyzWBAAAANQSlQpGi4qKKq6Li4u3e57169dXXDdo0KAyJQF5pWPT2I3dExkGzF6Zunq6ZBQAAAD4ukoFozvuuGPF9Ycffrjd82x+7+ZzAnyj8/eNf7ddpob6P7ydfOEzDfUAAADAV1QqGN28Bf7vf/97KrWd0cPjjz++xTnZGhs3bnzttdfuuuuuwYMH9+/fv3///gMHDsx1UZA9sRDu7pXYoSjtgGQqnDExWlGSxZoAAACAGq+gMjfvscceHTt2/OCDD0IIH3744f3333/22Wdv6ySffvrpvffeW/FjZQ5xyjfJZLJ79+5vvfVWaWnp5p/vvvvuOaoIcmOXhrG7eyVOei5ty/zCdamfvhI90CdT0z0AAACQVyq1YjSEcMwxx1RcX3zxxdOmTdum29euXfujH/1o5cqV5T/uuuuuBxxwQCVLyh+pVOr111+vSEWLiori8cr+Dwq11Im7x0/fM9Of/7HvJR/5MJm1egAAAIAarrI52vDhwwsKNi07XbVqVb9+/caOHbuVPfWzZ8/+1re+NWXKlIpPRowYEYtl2iuQr+nWrdvQoUNHjx49Y8aMNWvWNG7cONcVQc7cdkRit8aZXiDnvRQtXGezUQAAACCEygejnTt3Pvfccyt+XLt27aBBg3r06DFmzJjVq1dv8ZYoiiZOnHjWWWd16dLltddeq/i8Q4cOF1xwQSXrySuJRKJid9GuXbsWFhbmuiLIpWb1woN9E4n00eiKknD25EgyCgAAAIRK7jFa7sYbb5w6deqbb75Z8cm0adOmTZt27rnn7rXXXp07d27VqlXTpk3Xrl27evXqjz76aNasWevXr//aJA0bNhw3blxRUfrzUwC+Sa+dYz/dP/77t9K2zD+7KHXXnOSwzjadAAAAgHxXBcFos2bNnnrqqd69e7///vubfx5F0dy5c+fOnfuNM9SrV+/hhx/u0aNH5YsB8twN3RLPLkrNWp52Yeil06Jv7RLbu5ldOwAAACCvVc2yqTZt2syYMWPIkCHbce++++47derU448/vkoqAfJcUSKMPypRP/358+vLwmkvRKXOYQIAAID8VmX9pE2bNh01atRTTz119NFHb+UBSp06dbrllltef/31rl27VlUZAPu1iP2qa/pkNIQZy1K/fkMyCgAAAHmtClrpN3fMMcccc8wx8+bNe+aZZ1555ZXp06cvXrx41apV5d82aNCgZcuWBx544OGHH967d+8+ffo4gx6oDpcdGH9qYXLSZ2kb6q9/Izpm19hhrb2CAAAAIE9VcTBarlOnTp06dao4Yj6ZTK5atapBgwb169evjl8H8DXxWLi/d+Kgx8pWl255QFkynDYxeuPEgsaF2a0MAAAAqBkqFYyuW7du6tSpFT926dJlxx13/N9h8Xi8RYsWlflFdcyECRPOOeecbb3riCOO+Pvf/14d9UCd1KFJ7I89EudMjtIN+GB16mevRbcfkanpHgAAAKirKhWMzpgxo3///uXXhYWFCxYsqIqS6r7i4uIlS5Zs613Lly+vjmKgDju7U/ypBam/fpR2O9E7Zie/2y7+3XYa6gEAACDvVCoY/fTTTyuujzzyyJ122qnS9eSF/fbb79prr93Wu3bbbbfqKAbqtjuPTLz4efLzDVv+NhXCuVPK3jq5cIei7JYFAAAA5FqlgtEo+rJHtUOHDpUuJl907tz56quvznUVkBda1Q9j+hQc+3RZumOYPlsfBk+JHuunoR4AAADyS6WC0c13Dm3atGmli6kjZsyYMWfOnMWLFzdu3Lhdu3a9e/du3LhxrouC/PWdXWOD94mPnpu2of7vHycffD92+p7xbFYFAAAA5FalgtG99tqr4nrp0qWVLiZnPv300xn/NW3atIr/LKNGjRoyZMjWzzN27Njrr7/+vffe2/zDRo0a/fjHP/7Nb37jBCrIlT8cnpj4WWreqnTLRsMFL0e9d47t1thmowAAAJAvKhWM7rnnnrvsskv5TqMzZ86sopKyavLkySeeeGLlzzWKomjQoEHjxo3736/WrVt3zz33PP300//6178OOOCASv4iYDs0Kghj+iR6PVEWpYlGV20Mp0+MXjiuICEaBQAAgPxQqdbRWCw2YMCA8us5c+bMnj27KkrKqpUrV1bJae+XXXZZRSraoUOH66+//uGHHx49evQJJ5wQj8dDCAsXLvze9763ePHiyv+uza1fv37FZlKpVAghmUxu/uGGDWnOnYF80qN17OcHZXrjTfk8dfPbadvtAQAAgDqmsnvqXXzxxQ0bNiy/HjlyZKXryZk99thjwIABN95441//+tdtvffFF1/84x//WH59/PHHv/3221deeeUpp5wyePDgxx9//C9/+UthYWEI4ZNPPrnkkkuqtuyLLrqo5WbWrFkTQpg/f/7mH1533XVV+0uhlvrlwYlDd8y0IvTK6dGs5Wnb7QEAAIC6pLLBaPv27X/zm9+UX0+YMOHKK6+sdElZ1aVLl2effXb58uUffPDBI488MnLkyL59+27rJFdccUX5Rfv27cePH1+RFJcbMGBARWT85z//+a233qp01cD2KIiHB/okGqTfQaQkCqe+EBVHWawJAAAAyJFK7TFabvjw4Z999tkNN9wQQvj1r389e/bsW2+9tV27dpWfOQt222233XbbrTIzzJ07d8qUKeXXl19+eZMmTf53zMiRI2+99dbVq1cnk8n77ruvYnlp5Q0ZMqRfv36Zx+yzzz5V9eugttuneezG7okRU9Nmn++sSP3q9ejG7olsVgUAAABkX2WD0bVr15aWll5yySVt27YdOXLkmjVrHn/88SeeeOLYY4/t37//wQcf3LZt2+bNm8diW3ugSa07uv2f//xn+UVBQcFpp522xTGNGzc+6aSTxowZE0J4/PHHqzAYPeSQQw455JCqmm1rlG9jGkK49957Cwq+4c9PLBbr27fvXnvtVf11wda6YL/40wuTTy1I2zL/21nJY3eN92njGCYAAACoyyobjJ544onPPffc1z6MomjChAkTJkzYjgmTyeTWp6g1wfPPP19+cdBBBzVv3jzdsL59+5YHox9//PEHH3zQsWPH7JRX5UpLS8svhg8fvjXjmzRp8sYbb1R53r169eqSkpLyzVthW/3+wNgrixuu2LjlV00yFQZNLJ3cb32TAvuNft3GjRtXrVoVj8fr1auX61ogv6xcubKoqCiZdEYcZNXatWvXrVtXv379XBcC+aWsrGzVqlUhhOLi4lzXAvll5cqV8Xg857nc/2fvTuOjKs8+jl9nZpJJAiGThIQEkB1k30HWACoCAgIqbqBQNgFbpfZRSmtdKli1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AEDAIRgFAAAAAAAAEHAIRgEAAAAAAAAEHIJRAAAAAAAAAAGHYBQAAAAAAABAwCEYBQAAAAAAABBwCEYBAAAAAAAABByL2QMAAFoAl8t19OjRU6dOhYSEtGnTJj4+3uyJgEBx6tSpkpKSurq6qKgoq9UaHBxs9kQAAADwW6WlpaWlpREREYmJiWFhYWaP0+QIRtFi2Gy2bdu25eXlff3117W1te4H33rrrYSEBHMHA/yVYRibN2/++OOP165du2PHjob3nYgkJSXddNNN06dPv/HGG02cEPBLu3bt2rRp0+bNm7ds2XL48OH6+vqGp4KDg3v37j1hwoT777+/TZs2Jg4JBJTnnnvu888/d68tFsuqVavMnQfwM0899dTmzZsv58j3338/MjKyqecBApBhGB988MHSpUs//vjjmpqahscTExNvvvnmW265Zdy4cRERESZO2HQUwzDMngG4mA8++OAf//jHtm3bjh8/fv6zR44cSU1N9f1UgN977733Zs2adejQoYsfNnHixEWLFrVu3do3UwGBICUlpaio6OLHtG3bdtGiRePGjfPNSEAg27Bhw7Bhwxp+aQoODrbb7eaOBPiZ2267beXKlZdzZEVFBZ8LAl737bffTp8+veEjwAvatGnToEGDfDaSL9EYRXO3du3anJwcs6cAAs4XX3xxbiqqaVrHjh3j4+MdDsfevXtPnz7tfnz58uUHDx5ct25dVFSUSZMC/iw4ODghIaFdu3a6rttstqNHj7ofLysrmzBhwpIlSyZPnmzuhIB/q6mpmTp1KlUSAIC/2r59e0ZGxsmTJxse6dChQ1JSkq7rx48fLygoMHE23yAYRUtitVqvu+46wzAu8xNFAFcoLCxs3LhxkyZNuvHGGxuiT5fL9cEHHzz66KM2m01E8vLyZs2atWjRIlMnBfxHXFzcoEGDMjIybrrppk6dOp371MGDB+fNm7d48WIR0XX9oYceuummm5KSkkyaFPB/Tz755IEDB0Ska9eu+/btM3scwM9NmTJlxowZFzmAT+IB7zp06NCIESPcqWhwcPCvf/3r6dOnd+jQoeGA0tLSf/7zn2+//baiKKZN2cTYSo/m7rXXXisqKurXr1+/fv0SExNF5J133mkoyLCVHmgiTz/9tNPp/PWvfx0bG3vBA2w22/XXX+/ur6mqWlRUlJyc7NsZgQD1+9///sknn3Sv582b99hjj5k7D+CvtmzZkp6e7nK5hg0bdsMNNzz//PPCVnqgCTRspX/yySd/97vfmT0OECgMw8jIyFi3bp2IREVFffLJJwMHDjR7KBOoZg8AXMJ999331FNPjR492p2KAvCNZ5555ve///2PpaIiYrVa58yZ417ruv7xxx/7ajQg0M2ePTsuLs69/uKLL8wdBvBXdrt9ypQpLpcrPDz8lVde8eOmDAAgMC1dutSdiorIq6++GpipqBCMAgAu6HJ+A7z99tsbDrvkbZoAeIvFYunVq5d7XVZWZu4wgL965pln9uzZIyLPPfdc586dzR4HAAAvW7BggXsxZMiQCRMmmDuMiQhGAQAeioiICA0Nda/r6urMHQYIKA07eS9S6wbgsa+//vovf/mLiPTq1euRRx4xexwAALxsz549DRuPpk2bZu4w5iIYBQB4qKSkpLa21r3mC0YBn6moqNi2bZt7PXjwYHOHAfyP0+m8//77HQ6HxWL5xz/+ERQUZPZEAAB4WW5urnuhquro0aPNHcZc3JUeAOChf/7znw3rYcOGmTgJEDjc33vo7mi3bdv2vvvuM3siwN88//zzX331lYj85je/6du3r9njAAHk888/Hz9+/O7du0tLS1u1ahUfH9+/f/8RI0aMHTtW0zSzpwP8SsOn7N27d4+OjjYM4+OPP16yZMnOnTtLSkqio6M7duw4bNiwX/ziF+3btzd31KZGMAoA8ER1dfW8efPc6549e/KrI+B19fX1R48eda9ra2sLCwt37dqVlZV18OBBEWnVqtXy5cvbtGlj6oyAv9m5c+cf//hHEenSpctTTz1l9jhAYNmwYUPD+uTJk0VFRXl5eYsWLercufP8+fNHjRpl4myAn9m5c6d7kZaWdvTo0XvvvXft2rUNz544ceLw4cPr1q17/vnnZ8+e/fTTT6uq3+44JxgFAHhi1qxZhYWF7vWcOXO4XS/gdXv27OnTp8/5j2uadvvtt8+ZM+eqq67y/VSAH3M6nVOmTKmvr1cUZeHChWFhYWZPBEBE5ODBg2PGjPnjH/84e/Zss2cB/MSJEyfci9DQ0IyMjL1797r/mJycHB4eXlxcXFNTIyJ2u/25557bv3//22+/7a+/8flt4gsAaDpvvPHGyy+/7F5PmTKFD/ABXxoyZMikSZM6depk9iCAv/nzn/+8detWEZkyZUpGRobZ4wABpEOHDrNmzVq3bt2xY8fsdntNTc2hQ4feeOONgQMHug8wDOOJJ5545513zJ0T8BuVlZXuxdKlS92p6JQpUw4fPmyz2fbv33/q1Kn33nsvNTW14Zj//d//NW3WJqYYhmH2DEDjvPPOO5MnT3avjxw50vBeBeAbq1evHjt2rPum2D179ty8eXNERITZQwF+aN++fXfeead7bRhGYWFheXl5w7P9+vVbvnw58SjgLXv37u3Tp09tbW1iYuKePXtat2597rNPPfXU7373OxEJDg52/wQE4C2FhYXt27e/YBnNMIz58+f/6le/cgcX8fHxBw8ebNWqlc9nBPxNaGjouT/O/ud//ue55577wTHFxcUDBgyw2WwiEh0dXVBQEB0d7dMpfYLGKACgETZt2jRu3Dj3D9HOnTt/8sknpKJAE+nateu27+Tl5ZWVlX377be//OUv3TegyMvLGzp0aElJidljAv5A1/WpU6fW1taKyPz583+QigJoUikpKT+2RVdRlJkzZ/72t791/7G0tHTJkiU+HA3wW+f+EtetW7enn376/GOSk5P/+te/uteVlZXLli3z0XC+RTAKALhcW7ZsGTly5JkzZ0SkXbt2a9asSU5ONnsoIICkpaW99NJL77//vsViEZGioqL/+q//MnsowB/Mnz9/48aNIjJ69OgJEyaYPQ6A//DEE080fFzxySefmDsM4B/ObV7fe++97s/dzzdu3LjY2Fj3ev369T4YzPcIRgEAl2Xbtm233nprVVWViCQkJOTm5nbs2NHsoYBANHbs2GnTprnX77777rn76wF4oLi4+MknnxSRqKioRYsWmT0OgB8KDw8fNmyYe717925zhwH8Q0PcKSIDBgz4scMsFku/fv3c63379jX5WGbgrvQAgEv75ptvbr31VvdXdLdt2zY3N/fqq682eyggcE2aNGnhwoUi4nQ6v/zyy9GjR5s9EdCCFRUVuTdDuFyuIUOGXPCYkydPuhcOh6Nz587u9a233rpgwQLfDAkEuIYbS5SVlZk7CeAf0tLSvvrqK/e6bdu2FzkyPj7evfDXD+MJRgEAl7B3795bbrmloqJCRGJiYlatWtWjRw+zhwICWkpKSsOaXxEBbzlz5syhQ4cufoxhGA3H8CW/gM803CUmODjY3EkA/9C9e/eGtdPpvMiRDofDvQgJCWnamUzCVnoA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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -304,66 +304,66 @@ "nkpt = 5 Ecut = 10\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.57907160132 -0.16 3.4 \n", - " 2 -25.77623318252 -0.71 -0.76 1.2 59.6ms\n", - " 3 -25.78625090981 -2.00 -1.85 2.0 75.5ms\n", - " 4 -25.78631726273 -4.18 -2.87 1.0 54.8ms\n", + " 1 -25.57857152724 -0.16 3.5 86.5ms\n", + " 2 -25.77683677592 -0.70 -0.76 1.7 84.9ms\n", + " 3 -25.78626934627 -2.03 -1.85 2.0 74.4ms\n", + " 4 -25.78631724235 -4.32 -2.86 1.0 55.8ms\n", "nkpt = 5 Ecut = 12\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.78696767939 -0.12 3.5 \n", - " 2 -26.07601073614 -0.54 -0.71 1.7 69.7ms\n", - " 3 -26.09343048570 -1.76 -1.69 2.0 79.7ms\n", - " 4 -26.09373969985 -3.51 -2.31 1.5 81.0ms\n", - " 5 -26.09375408501 -4.84 -2.72 1.9 75.6ms\n", + " 1 -25.78625590235 -0.12 3.6 92.8ms\n", + " 2 -26.07608640745 -0.54 -0.71 2.0 82.9ms\n", + " 3 -26.09344114770 -1.76 -1.69 2.1 80.0ms\n", + " 4 -26.09374061784 -3.52 -2.34 1.0 58.0ms\n", + " 5 -26.09375405428 -4.87 -2.73 1.1 60.0ms\n", "nkpt = 5 Ecut = 14\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.86786884448 -0.11 3.6 \n", - " 2 -26.20689159637 -0.47 -0.71 1.9 60.5ms\n", - " 3 -26.22668728199 -1.70 -1.63 2.0 67.8ms\n", - " 4 -26.22700180801 -3.50 -2.24 1.8 66.5ms\n", - " 5 -26.22702623101 -4.61 -2.72 1.8 63.8ms\n", + " 1 -25.86736229831 -0.11 3.8 74.9ms\n", + " 2 -26.20729139177 -0.47 -0.71 2.0 61.4ms\n", + " 3 -26.22671046466 -1.71 -1.64 2.1 66.9ms\n", + " 4 -26.22700599045 -3.53 -2.28 1.0 52.1ms\n", + " 5 -26.22702601008 -4.70 -2.70 1.0 49.7ms\n", "nkpt = 5 Ecut = 16\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.89685544438 -0.11 3.8 \n", - " 2 -26.25478895075 -0.45 -0.71 1.9 151ms\n", - " 3 -26.27557265561 -1.68 -1.62 2.1 193ms\n", - " 4 -26.27586802508 -3.53 -2.23 1.8 155ms\n", - " 5 -26.27589333698 -4.60 -2.76 1.8 164ms\n", + " 1 -25.89705732627 -0.11 3.8 262ms\n", + " 2 -26.25555015063 -0.45 -0.71 2.0 155ms\n", + " 3 -26.27560695574 -1.70 -1.64 2.0 188ms\n", + " 4 -26.27587548661 -3.57 -2.29 1.0 123ms\n", + " 5 -26.27589300756 -4.76 -2.72 1.0 125ms\n", "nkpt = 5 Ecut = 18\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.90525931162 -0.11 3.9 \n", - " 2 -26.27001296875 -0.44 -0.71 1.9 157ms\n", - " 3 -26.29098828394 -1.68 -1.61 2.2 199ms\n", - " 4 -26.29127688953 -3.54 -2.22 1.7 157ms\n", - " 5 -26.29130423996 -4.56 -2.76 1.9 176ms\n", + " 1 -25.90532731407 -0.11 3.9 266ms\n", + " 2 -26.27091111244 -0.44 -0.71 2.0 164ms\n", + " 3 -26.29103287407 -1.70 -1.64 2.0 188ms\n", + " 4 -26.29128732608 -3.59 -2.29 1.0 124ms\n", + " 5 -26.29130390095 -4.78 -2.72 1.0 126ms\n", "nkpt = 5 Ecut = 20\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.90776443277 -0.11 3.8 \n", - " 2 -26.27438723834 -0.44 -0.71 1.9 163ms\n", - " 3 -26.29529605728 -1.68 -1.61 2.3 211ms\n", - " 4 -26.29557820318 -3.55 -2.21 1.6 157ms\n", - " 5 -26.29560592456 -4.56 -2.76 2.0 189ms\n", + " 1 -25.90772331062 -0.11 4.2 275ms\n", + " 2 -26.27525338575 -0.43 -0.71 2.0 171ms\n", + " 3 -26.29534057112 -1.70 -1.64 2.1 192ms\n", + " 4 -26.29558963721 -3.60 -2.29 1.0 126ms\n", + " 5 -26.29560553655 -4.80 -2.72 1.0 125ms\n", "nkpt = 5 Ecut = 22\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.90852713902 -0.11 3.9 \n", - " 2 -26.27554123689 -0.44 -0.71 2.0 173ms\n", - " 3 -26.29614418255 -1.69 -1.62 2.1 202ms\n", - " 4 -26.29641255656 -3.57 -2.24 2.0 179ms\n", - " 5 -26.29643547367 -4.64 -2.75 1.8 180ms\n", + " 1 -25.90852706003 -0.11 4.2 279ms\n", + " 2 -26.27629349213 -0.43 -0.71 2.0 182ms\n", + " 3 -26.29618622347 -1.70 -1.65 2.1 197ms\n", + " 4 -26.29642063363 -3.63 -2.30 1.0 130ms\n", + " 5 -26.29643532501 -4.83 -2.72 1.0 132ms\n", "nkpt = 5 Ecut = 24\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -25.90877682411 -0.11 4.0 \n", - " 2 -26.27555395344 -0.44 -0.71 2.0 170ms\n", - " 3 -26.29621860137 -1.68 -1.62 2.2 193ms\n", - " 4 -26.29648824987 -3.57 -2.23 2.0 175ms\n", - " 5 -26.29651158879 -4.63 -2.76 1.9 177ms\n" + " 1 -25.90881531798 -0.11 4.1 263ms\n", + " 2 -26.27650711921 -0.43 -0.72 2.0 174ms\n", + " 3 -26.29626568712 -1.70 -1.65 2.0 212ms\n", + " 4 -26.29649697489 -3.64 -2.31 1.0 118ms\n", + " 5 -26.29651134315 -4.84 -2.73 1.0 376ms\n" ] }, { @@ -402,106 +402,106 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABwgAAASwCAIAAABggIlUAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdfVzV9f34/+f74oCCKArhBQbhJSYO86K8oHQT3dhPnabgRaW1FaQradv3M/l9vtu03T7rI58+W2qrhC7VVSplJs4WYtOp6UIxCw1FQyhMEi8QUPG8L75/QK2cled4DufAedz/OhzO+32edpuH+eD1fr8U27YFAAAAAAAAAAKJ6usBAAAAAAAAAKClEUYBAAAAAAAABBzCKAAAAAAAAICAQxgFAAAAAAAAEHAIowAAAAAAAAACDmEUAAAAAAAAQMAhjAIAAAAAAAAIOIRRAAAAAAAAAAGHMAoAAAAAAAAg4BBGAQAAAAAAAAQcwigAAAAAAACAgEMYBQAAAAAAABBwCKMAAAAAAAAAAg5hFAAAAAAAAEDAIYwCAAAAAAAACDiEUQAAAAAAAAABhzAKAAAAAAAAIOAQRgEAAAAAAAAEHMIoAAAAAAAAgIBDGAUAAAAAAAAQcAijAAAAAAAAAAIOYRQAAAAAAABAwCGMAgAAAAAAAAg4hFEAAAAAAAAAAYcwCgAAAAAAACDgEEYBAAAAAAAABBzCKAAAAAAAAICAQxgFAAAAAAAAEHAIowAAAAAAAAACDmEUAAAAAAAAQMAhjAIAAAAAAAAIOIRRAAAAAAAAAAGHMAp3XLhwwdcjAAAAAAAAAO4jjMJlv/nNb8LCwmbOnOnrQQAAAAAAAAA3KbZt+3oGtDLdunWrrq4WkXPnznXq1MlXY1y6dMkwjA4dOvhqAADfxLbt+vr64ODgoKAgX88C4EqNjY2XL18OCwvz9SAArqKuri4oKCg4ONjXgwC4ktPpvHTpUocOHRRF8fUsADyGFaNwmWEYVzzwicbGRq7oB/xWfX290+n09RQAruLy5cv19fW+ngLA1TU0NDQ2Nvp6CgBX4XQ66+vrLcvy9SAAPIkwCgAAAAAAACDgEEYBAAAAAAAABBzCKAAAAAAAAICAQxgFAAAAAAAAEHAIowAAAAAAAAACDmEUAAAAAAAAQMAhjAIAAAAAAAAIOIRRAAAAAAAAAAGHMAoAAAAAAAAg4BBGAQAAAAAAAAQcwigAAAAAAACAgEMYBQAAAAAAABBwCKMAAAAAAAAAAg5hFAAAAAAAAEDAIYyiVbpw4cLLL7/85JNPfvLJJ76eBQAAAAAAAK0PYRStzOHDh3/xi19ER0f//Oc//6//+q+4uLipU6du2bLFtm1fjwYAAAAAAIBWgzCK1sEwjPXr148fP37AgAFLly49d+6ciIiimqa5YcOGCRMmxMfHP/HEE2fPnvX1pAAAAAAAAGgFCKPwd9XV1dnZ2X369Jk2bVphYaFt26IHy7Bp8su35PHjMu0P0uVGETly5Mgvf/nL7t27p6Wlvfvuu76eGgAAAAAAAH5N4QJkuCoyMvL06dMiUlNTExER4dX32rx585133tnY2Nj8dVRvueMBSbpXQrv860WmU97Pl20r5PB2+eJ/z4888sgTTzzh1dkAfBPbtk+ePNmxY8fQ0FBfzwLgSnV1dfX19d27d/f1IACu4uTJkyEhIR07dvT1IACudOHChdra2qioKE3TfD0LAI8hjMJlLRlGR44cuWfPHlE1GZQiYzNk4HhRvnmZ82elsi1Hdv9FLtY6HI6Kigr+1Qf4BGEU8GeEUcCfEUYBv0UYBdokLqWH/9q/f/+ePXtERGYtlYfWS8IPv62Kikj3eJn1hCzaK6rmdDqfe+65lpkTAAAAAAAArQ5hFP7rqaeeEhFpFyYjZrtwWESsDEoRkRUrVjidTu+MBgAAAAAAgNaNMAo/de7cuTVr1oiIjJoj7cJcO3hshoicOHEiPz/fC6MBAAAAAACg1SOMwk+9+OKLDQ0NIiJ33O/ywQMnSNe+IvLMM894ei4AAAAAAAC0BYRR+CPbtnNyckRE4sdK9ECXj1cUuf1nIrJ169bDhw97ejoAAAAAAAC0eoRR+KPCwsLmoDkmw81T3H6fBIXYtr1ixQoPDgYAAAAAAIC2gTAKf9R8CXyn7nLLZDdPEdJZhk0XkZdeeqn5knwAAAAAAADgC4RR+B3TNDdt2iQiMjxVNIf7JxoxW0TOnTu3fft2D40GAAAAAACANoIwCr+jaVpiYqKIyJEd13WipsNVPfvMwDeOW4blgdkAAAAAAADQNhBG4Y/mzZsnIlK5Xz7+p5unMJ2y8wURkcGT/nGpx52FZtxa4/f7rRMXbI9NCQAAAAAAgFaLMAp/NGvWrC5duoiIbMtx8xTFG+TcZyIiY5u3b/q0wV60z7xpjZG61XznhE0fBQAAAAAACGS6rwcArqJ9+/b33nvvn/70JynKk9QlEhbl8imaimq3/hL//a8+7bTktXLrtXIrPlx5MF6d208ND/LQ0AAAAAAAeMeKFSveeecdX0+BtiM6Ovr3v/99WFiYrwfxMcIo/NT8+fOXLl1qGY2ya5X86P+4dvBnpVK2Q0RkbIYoylVfUnrOfmSPmVVkTopRMxPU0V2v/jIAAAAAAHyrpKSk+Y5zgOdERET85je/8fUUPsal9PBTvXv3Hj9+vIjIthVima4d/PdnxLYlKERG3vXtL7xkSl65lZRvDNtg5JZaDYa74wIAAAAA4B2nTp3y9Qhog2pqanw9gu+xYhT+a968eW+//bacrpSDBTIo5VoPa6yXPS+LiIyYLSGdr/GgfTV2xk7z1++ZM3qpCwaqAzuzgBQAAAAA4F8GDhy4aNEiX0+B1m3z5s0vvfSSr6fwF4RR+K+JEyfGxMRUVlbKK5nywwoZcZe0+9abX9iWlLwtBUvl4nkRkTHprr5j7WXJLbVyS63RXZXMBHVKrOpgUTUAAAAAwD9ERUWlpqb6egq0bidOnPD1CH6E6gP/pWnaQw89JCJSc1xeXiD/cZO8/LBUHbzKS+tr5G//K/8ZL8t/IqV/F5EBt96RPPIWt5d97qq207aasWucWUVmZT072AMAAAAAALQ1hFH4tV/96lcvv/zyqFGjREQu1cm2HFl8izw+ToryxLgsIvLxP+WF++TXveT1/5Sa4yISExPzhz/8YdffNmxJ0Q9N1xcmqp2D3Xz3zy5I9gGr11pjUoFRWGXTRwEAAAAAANoMLqWHX1NVdfbs2bNnz37//fefeeaZl19+uaGhQY7skCM7pFM36Rgln3zQ9EpFUcaPHz9//vyJEydqmtb0ZHy4smS49n8Ha68es54+ZB04407bNG3ZVGlvqjT6dlJ+1k+9P16NcLe0AgAAAAAAwE+wYhStw+DBg3NycqqqqpYvXx4fHy8iUnuyqYp26dLll7/85eHDh99+++2f/OQnX1bRL4U5JD1eff9Ofe8UPT1ebe/urwPKau2sIrPnK860reauataPAgAAAAAAtGKEUbQmnTp1evjhhw8dOrR169af/OQnt9xyywsvvPDpp5/+8Y9/7Nu373cePjRSyUnSjs9wLBmuxYW5eQPSS6bklVtJ+cawDUZuqdVguHcaAAAAAAAA+BKX0qP1URTlBz/4wdChQxsbG6Oiolw9PKq9LExU/+N76jsn7NxS640Ky7DcGWNfjZ2x0/z1e+aMXuqCgerAzm5v9QQAAAAAAICWxopRBChVkeRoZd047fgMfdEQNaq9m+epvSy5pVbC60ZSvpFXbjndaqwAAAAAAABoYYRRBLroUGXxEO2TWY5147TkaMXtZZ+7qu20rWbsGmdWkVlZzx1IAQAAAAAA/BphFBARCVIlNU7dkqIfmq4vTFQ7u7vv/GcXJPuA1WutMf4tI7/Soo8CAAAAAAD4J8Io8DXx4cqS4VrFTEdOkpbYxc31o6YthVX25AKzf56RfcA63ejZGQEAAAAAAHC9CKPAVYQ5JD1eff9Ofe8UPT1ebe/uLmVltXZWkRn9ijNtq7mrmvWjAAAAAAAA/oIwCnyboZFKTpJWNcuxdIQWF+bmAtJGU/LKraR8Y9gGI7fUajA8OyMAAAAAAABcRhgFvlvnYMlMUI+m6VtS9NQ4VXf3782+Gjtjpxn9ijNjp3nwLAtIAQAAAAAAfIYwClwrVZHkaGXdOO34DH3REDWqvZvnqb0suaVWwutGUr6RV245LY9OCQAAAAAAgGtAGAVcFh2qLB6ifTLLsW6clhytuHmBvciuajttqxm7xplVZFbWs4AUAAAAAACg5RBGATcFqZIap25J0Q9N1xcmqp2D3TzPZxck+4AVt9YY/5aRX2nRRwEAAAAAAFoAYRS4XvHhypLhWsVMR06SltjFzfWjli2FVfbkArN/npF9wDrd6NkZAQAAAAAA8DWEUcAzwhySHq++f6e+d4qeHq+21908T1mtnVVkRr/iTNtq7qpm/SgAAAAAoA2qq6s7duyYr6dAoCOMAh42NFLJSdJOzHYsHaHFhbm5gLTRlLxyKynfGLbByC21GgzPzggAAAAAgG/s27cvIyOje/fuffr0GTBgQHZ29rlz53w9FAIUYRTwivAgyUxQj6bpW1L01DhVd/ev2r4aO2OnGf2KM2OnefAsC0gBAAAAAK3SpUuXXnrppdtuu23YsGG5ubkNDQ0iUlpampWVFRsb+9BDDx06dMjXMyLgEEYBL1IVSY5W1o3Tjs/QFw1Ro9q7eZ7ay5JbaiW8biTlG3nlltPy6JQAAAAAAHjNsWPHsrKybrzxxvvuu++999779xecP3/+qaeeGjhw4LBhw1atWuV0Olt+SAQmwijQEqJDlcVDtE9mOdaN05KjFTcvsBfZVW2nbTVjXnVmFZmV9SwgBQAAAAD4KdM08/PzU1JS+vXrl52dXVNT86/vaQ4ZNk2mLJYb4r56yL59++bOnRsbG7to0aKqqqqWnhiBx90NYgC4LkiV1Dg1NU4tPWe/VGblllpn3dp9/uRFyT5gPf6B9YMeyoKB6sQY1e3SCgAAAACAZ9XX1z/55JM5OTkVFRVXfi+8h9xxv9zxM+nUXUTkx1lS8rZsy5EP/yZ289WRn3322e9///vHHnts8uTJv/rVr0aNGtWy4/udU6dOHTx40DAMEQkNDR05cqSvJ2o7CKOAD8SHK0uGa/93sPbqMevpQ9aBM+6s/bRsKayyC6vMvp2sn/VT749XI4I9PikAAAAAAK6ZOXPmX//61689pSgS/30Z+6AMnijqV2KUosqgFBmUIjXHZfuzsuslqTvV9B3DMNavX79x48Z33313+PDhLTe9H6itrf3www/3feGjjz6y7eZuMGDAAG7G6kGEUcBnwhySHq+mx6v7auzcUmv1UeuiW7vPl9XaWUXmomJzcoyamaCO7sr6UQAAAACAbxw6dGjz5s3/+jokXEbeI2MzpFu/bzss8iaZ9gf5ye9k7+uybYUc29P0tGEYTzzxxCuvvOLNkf3OkCFDPv74Y19PERC4xyjge0MjlZwk7cRsx9IRWlyYm1mz0ZS8cisp3xi2wcgttRrcaqwAAAAAAFyPZ555pnl5o6LK3U/J/5TLzD9+RxX9kh4sI2ZL1j/kt+9Jv9ubnnv99derq6u9Nm/roKoUPK/gPyvgL8KDJDNBPZqmb0nRU+NU3d2/nftq7IydZvQrzoydZslZNmgCAAAAALSQ+vr61atXN38xKEXGPCDBoe6cKGawTHus6eHly5efe+45Dw3YanTq1Gn06NELFixYuXJlSUnJXXfd5euJ2iYupQf8i6pIcrSSHK1VNajPHrae+cj6/KI756m9LLmlVm6pNbqrkpmgTolVHfweBAAAAADgTX/5y19qa2ubvxibfl3n6nWbxA6RimIRycnJycrK0jTtugdsHXbt2tWtW7evPqMo3DTPKyglgJ+KDlUWD9E+meVYN05Ljnb/I3BXtZ221Yx51ZlVZFbWs4AUAAAAAOAtubm5zY8iYmTghOs93ZjmtPrJJ59s2rTpes/WelxRReE9hFHArwWpkhqnbknRP0rVFyaqnd3dd/7kRck+YMWtNca/ZeRXWvRRAAAAAIBn7dy5c//+/c1fjH1Q1Ote4DliloR2aXr4zDPPXO/ZvO+xxx4bNmzYsGHD7rvvvu988V//+temF48aNerChQstMB7+HWEUaB36d1KWDNcqZjpykrTELm6uH7VsKayyJxeY/fOM7APW6UbPzggAAAAACFxPP/108yM9WEbP8cAZHe1l1D1NDwsKCo4cOeKBc3rTmDFj9u3bt2/fvpUrV5aVlX37i5ctW9b04tjY2JCQkJaZEFfgHqNAaxLmkPR4NT1e3Vdj55Zaq49aF93afb6s1s4qMhcVm5Nj1PR4NTmam5UAAAAAQNvx4Rl7RalVXGM7rRZ6R+P8qQ9eW9/8xfBUCYvyzHnHPiiFT4pt2bZ9x69X9Lz3fzxz2u/SwSHhQcqPeio/7a8GXfOqwtGjR99yyy379++3bfv5559fsmTJN72yvLx869atTY8zMjKuf2C4hzAKtEpDI5WcJC37Vm3lEWv5QevjOncujm80Ja/cyiu3hkYq6fHqXX3UUD4SAAAAAKCVW1lmPbDDbLEk2uyvz4rzi8sSx3qu9EX1lgE/kEOFIlK95cXqCYskqMUWV9pvVsiLR6yCFL1T0LUek56ePm/ePBF5/vnnH3300eDgq98R79lnn7UsS0T69+8/ZswYDw0Ml3EpPdCKhQdJZoJalqZvSdFT41Td3b/Q+2rsjJ1m9CvOjJ1myVluQAoAAAAArdVH52wfVFHLlB0vND++MVF63ebJk3+ZWS+ck/fWefLM1+C9U/bD75rX/vq77767Y8eOIlJTU/Pmm29e9TWGYaxcubLpcXp6OjvO+xBhFGj1VEWSo5V147TjM/Qlw7WeoW5+pNZeltxSa9DrRlK+kVdutfTPUQAAAADAdcst9cW/5j7YLKcrmh9/f56HT544USJimh///elvfalXvPqxdeaat+jo0KHDXXfd1fT42WefveprNmzYcOLECREJDg6+5557PDEj3EQYBdqO6FBlYaJ6bIa+bpyWHO3+r5x2VdtpW82YV51ZRWZlPQtIAQAAAKDV+OicL/4R98Hm5gd6sNw6w8MnVzW5bXbz48r3pfYzD5//uxiWlNW68F/1oYcealoEunXr1qtuwfRlMJ0+ffoNN9zgkSHhHsIo0NYEqZIap25J0T9K1Rcmqp2vfj+T73byomQfsOLWGuPfMvIrLfooAAAAAPi/8CBfXJcd1bv5gdEoVSWeP3/FvuYHIZ0lNMLz5/8uLv3L+uabbx49erSING3BdMV3y8vLCwsLmx6z7ZLPEUaBNqt/J2XJcK1ipiMnSRsc4eaPRsuWwip7coHZb52RfcCqueTZGQEAAAAAnjQ51hdhdPRc0b9oh9tyPHzyz4/JoeYN3CXpXtGveSMkD4kPV/p1cu2/atP+SyLy/PPPNzZ+7Tr8L7ddio+PT0pK8tSQcA9hFGjjwhySHq/un6rvnaKnx6vt3d13/uh5O6vI7PmqM22rWVjF+lEAAAAA8Ecze6njerR4Gw27QYZObX5clCd1n3vy5NtWiG2JiCiK3HG/J898DRyqPDVKc/Wo6dOnR0VFiUhNTc3GjRu/fP6r2y5lZGSw7ZLPEUaBQDE0UslJ0k7MdiwdofUKc/PDt9GUvHJr/FvGsA1GbqnVYHh2RgAAAADAdVEVeXOC/tDNajuXa971+XLveKNRdq3y2GmdF+Xd1c2Pbx4vXft67MzXIKGzUpCi/8D10BwUFHTfffc1Pc7Nzf3y+TfffLNp26V27drNmTPHU3PCbe4uHgPQOoUHSWaC+vBA9Z0Tdm6p9UaFZbi1X+G+Gjtjp/nr98wZvdSHB6oJnfk1FwAAAAD4hVBdnhylZd+qHam1zZa73m/MXZtvOfzhfhGRbStkwi9E9USa/ecaaTjT9PCPC+eNSWm5kBURLDe5u6hIRObNm/e///u/pmk2bcHUt29f+cq2S6mpqV26dPHMoLgOhFEgEKmKJEcrydHaiQvq6jL7z4esTxvc+WlZe1lyS63cUmt0VyUzQZ0SqzpYhg4AAAAAfiBEF7d3m3DPI/PTm++tebpSDhbIoBQPnPSLO5beeOONmbMnaVqrWZQTGxv7wx/+cPPmzbZtv/DCC//93/9dXl6+ZcuWpu+y7ZKfoGEAAa1HiLIwUT02Q183TkuOdv/uJruq7bStZsyrzqwis6KeO5ACAAAAQMC5++67O3Xq1PzFttxvfe21+fifUlHc9DAjI0PTWvjuANfrii2YnnvuuaZtlwYMGDBq1CifjoZmhFEAEqRKapy6JUX/KFVfmKh2Dv7uQ67q5EXJPmD1WmuMf8vIr7ToowAAAAAQODp06HDPPfc0f/HhW1Jz/HrP+MVy0aCgoPvvb+ltl67fj3/845tuuklETp06tX79+pdeeqnp+Xnz5rHtkp8gjAL4l/6dlCXDtYqZjpwkze1rLixbCqvsyQVmv3VG9gGr5pJnZwQAAAAA+Kn58+c3Jz/bkn88d13nqj8te19rejh9+vSuXbte93QtTVXVBx54oOnxww8/3LTtUvv27e+++26fzoV/4R6jAK4U5pD0eDU9Xt1XY+eWWquPWhfd2n3+6Hk7q8hcVGxOjlHT49XkaH4hBgAAAABt2YABA8aMGbNt2zYRkZ0vyv+XJcEd3DzXP54VZ/NCmwcffNAz87W4Bx544Pe//31jY+Pp06ebnpkxY0bnzp2//ajPPvvs4MGDVzzT9KChoaGwsPCr37rxxhv79+/vuZEDC2EUwDcaGqnkJGnZt2orj1jLD1of17lzcXyjKXnlVl65NTRSSY9X7+qjhvLBAwAAAABt1Lx585rDaN0p+XVvGT1HxqRL177XerzRKPvekG0r5Oi7TU8MGjTo9ttv98qs3nfDDTdMnTp1zZo1Xz5zLdsuFRYWzpkz56rfqqysHD9+/FefyczMXLp06XXOGbC4lB7AdwgPkswEtSxN35Kip8apursfG/tq7IydZo+XnRk7zZKz3IAUAAAAANqgqVOn9ujRo/mLC2dlyzL5bYI88WPZv1Es89uOPF0pb/xWft1bnpvzZRUVkfnz53tzXq/7cgsmEfne9743YsQIHw6DK7BwC8A1URVJjlaSo7UTF9TVZfafD1mfNrgTN887JbfUyi21RndVMhPUKbGqg1/QAAAAAEBb4XA4XnzxxQceeKCysrL5KduWQ4VyqFC69JQ77pekn0qnbv86wLbk4BbZtkI+/NsV5VTTtLvuuuunP/1pC47vebfddlu7du0uXbokIunp6ddySGxsbGpq6jWef/Dgwe4PF/AIowBc0yNEWZio/GKQ+maFlVtqba2y3Vv8uava3lVtdmtvzu2nzhugxnbgDqQAAAAA0BZMmDChvLz8nXfeyc3NXb9+vWl+kTvPfCobFsumx2TwJLnjfokdKntfk8Ll8lnpFWfo2rXrvffeO2/evNjY2Jae3tM2bNjQVEVDQ0OvcdulO+6444477vDyXBAhjAJwT5AqqXFqapx6uNZ+8YiVW2qdbXTnPCcvSvYB6/EPrB/0UBYMVCfGqPRRAAAAAGjtVFVNTk5OTk4uKytbsWLFiy++ePbs2ebvGZdl7+uy93VRtX+/uP6OO+6YP3/+1KlTg4KCWnpo73jyySebHsyaNatTp06+HQZX4BJWANelfydlyXCtcqYjJ0kbHOFm1bRsKayyJxeY/dYZ2QesmkuenREAAAAA4Bt9+/b94x//WFVV9fzzzw8bNuxr3/tKFQ0LC5s/f/6HH364ffv2GTNmtJkq+u677+7atUtEVFX91a9+5etxcCXCKAAP6OCQ9Hh1/1R97xQ9PV5t7+5i9KPn7awis+erzrStZmEVGzQBAAAAQFvQvn37n/70p0VFRXv37k1PTw8JCfnyW/3791+yZElFRcVTTz2VkJDgwyE97syZM/fff3/T4ylTpsTHx/t2Hvw7LqUH4ElDI5WcJC37Vm3lEWv5QevjOnfiZqMpeeVWXrk1NFJJj1fv6qOG8lkFAAAAAK3f0KFDc3JyHnvssb/85S/Hjx+fOnVqG7uZpm3bDz74oIhUV1dv37793LlzIqLr+u9+9ztfj4arIDYA8LzwIMlMUB8eqL5zws4ttd6osAzLnfPsq7Ezdpr/8U9zZm/14YFqQmduQAoAAAAArV5ERERmZqavp/CW3NzcK55ZsmRJYmKiT4bBt+NSegDeoiqSHK2sG6dVzNSXDNd6hrqZNc87JbfUGvS6MWyDsarMcrrVWAEAAAAAaEnh4eG33377+vXrubuo32LFKACv6xGiLExUfjFIfbPCyi21tlbZ7t09dF+NPXe7ufA9c24/dd4ANbYDC0gBAAAAAH5EUZQzZ86IiK7rYWFhvh4H34EVowBaSJAqqXHqlhT9o1R9YaLaOdjN85y8KNkHrF5rjfFvGfmVFjs0AQAAAAD8R+fOnTt37kwVbRUIowBaWv9OypLh2onZjpVjtMERbq76tGwprLInF5j91hnZB6yaS56dEQAAAAAAtHGEUQC+0U6TOX3V/VP1vVP09Hi1vbs39jh63s4qMnu+6kzbahZWsX4UAAAAAABcE8IoAB8bGqnkJGknZjuWjtB6hbm5gLTRlLxya/xbxtANRm6p1WB4dkYAAAAAANDWEEYB+IXwIMlMUMvS9C0pemqcqrv74VRcY2fsNHu87MzYaZacZQEpAAAAAAC4OsIoAD+iKpIcrawbp1XM1JcM13qGurmA9LxTckutQa8bwzYYq8osp+XZMQEAAAAAQKtHGAXgj3qEKAsT1WMz9HXjtORoxc0+KrKvxp673Yx51ZlVZFbUs4AUAAAAAAA0I4wC8F9BqqTGqVtS9I9S9YWJapdgN89z8qJkH7B6rTXGv2XkV1r0UQAAAAAAQBgF0Ar076QsGa5VzXasHKMNjnBz/ahlS2GVPbnA7LfOyD5g1Vzy7IwAAAAAAKA1IYwCaDXaaTKnr7p/qr53ip4er4bobp7n6Hk7q8js+aozbatZWMX6UQAAAAAAAhFhFEDrMzRSyUnSqmY7lo7QeoW5uYC00ZS8cmv8W8bQDRsPyeoAACAASURBVEZuqdVgeHZGAAAAAADg1wijAFqr8CDJTFDL0vQtKXpqnKq7+3lWXGNn7DR7vOzM2GmWnGUBKQAAAAAAAYEwCqB1UxVJjlbWjdMqZupLhms9Q91cQHreKbml1qDXjWEbjFVlltPy7JgAAAAAAMC/EEYBtBE9QpSFieqxGfq6cVpytOJmHxXZV2PP3W7GvOrMKjIr6llACgAAAABA20QYBdCmBKmSGqduSdE/StUXJqpdgt08z8mLkn3A6rXWGP+WkV9p0UcBAAAAAGhjCKMA2qb+nZQlw7Wq2Y6VY7TBEW6uH7VsKayyJxeY/dYZ2QesmkuenREAAAAAAPiM7usBAMCL2mkyp686p6+6r8bOLbX+ctS64Nbu80fP21lF5qJic3KMmh6vJke7faU+AAAAALhpx44dXbp08fUUaN0aGxt9PYIfIYwCCAhDI5WcJC37Vm3lEWv5QevjOncujm80Ja/cyiu3hkQqGfHqXX3UUD5EAQAAAHiZrjf/w8MwjLNnz/p2GLQZmqb5egTf41J6AAEkPEgyE9SyNH1Lip4ap+rufgQW19gZO80eLzszdpofnuEGpAAAAAC8aOjQoYMGDfL1FGhTwsLCpk2b5uspfI/FTgACjqpIcrSSHK2duKCuLrP/fMj6tMGduHneKbmlVm6pNTRSWTBQndVbdfDLJgAAAACeFhIS8v7779fW1vp6ELQdISEhwcHu7lbchhBGAQSuHiHKwkTlF4PUNyus3FJra5Xt3uLPfTX23O3mwvfMuf3UeQPU2A7cgRQAAACAJ6mq2rlzZ19PAbQ1rG4CEOiCVEmNU7ek6B+l6gsT1S7u/s7s5EXJPmD1WmuMf8vIK7dMrrAHAAAAAMCPEUYBoFn/TsqS4VrVbMfKMdrgCDdXfVq2FFbZaVvN+Dwj+4BVc8mzMwIAAAAAAM8gjALA17TTZE5fdf9Ufe8UPT1eDXH3jiNHz9tZRWbPV51pW83CKneWj5aUlGRlZeXk5NTV1bk5BAAAAAAA+AaEUQC4uqGRSk6SVjXbkZOkDQh3cwFpoyl55db4t4yhG4zcUqvB+O5DLl++vGbNmjFjxgwaNCg7O/vBBx+Mjo7++c9/fvDgQfdmAAAAAAAA/44wCgDfJjxI0uPVkmn6lhQ9NU7V3f3ULK6xM3aaPV52Zuw0Pzxz9QWkn3zyyW9/+9vY2NhZs2b94x//EBHRg0Wkrq7u6aefTkhIGDt27Nq1a51Op5tDAAAAAACAL7ArPQB8N1WR5GglOVo7cUFdXWb/+ZD1aYM7V8efd0puqZVbag2NVBYMVGf1Vh2qiMjOnTuXL1/+xhtvGMYXa0q79pWke+X2n8n5z2V7rux8SRrrt2/fvn379q5du957773z5s2LjY313B8RAAAAAIDAotg2GyfDNZGRkadPnxaRmpqaiIgIX41RW1vb2NgYFRXlqwEQyC5b8maFlVtqba26rs/Qbu1lbj/14JLZm9ava35K1eWWyTI2Q/qPFeUr1+9frJV3V8u2HDl5uOmJoKCgzZs3jxs37jre31ts2z558mTHjh1DQ0N9PQuAK9XV1dXX13fv3t3XgwC4ipMnT4aEhHTs2NHXgwC40oULF2pra6OiojRN8/UsADyGMAqXEUaBLx2utV88Yj1bap1pdPcUn5XKokSxbQnvLrffL3fcL+HfXCtsWw5vk7+vkPfzxTLGjRtXWFjo7ht7EWEU8GeEUcCfEUYBv0UYBdok7jEKAO7r30lZMlyrmu1YOUa7JcKtDZq25YhtS1CIPPq+TP7tt1VREVEUif++zFsr0/4gIu+8887hw4fdGhwAAAAAgEBHGAWA69VOkzl91eKp+t4penq8GnLtd29urJfdfxERuW2mhHR24S2T7pOgENu2n3nmGVenBQAAAAAAQhgFAA8aGqnkJGlVsx05SdqA8GtYQLrnFblYKyIyJt21dwoJl+GpIvLSSy81NDS4MSoAAAAAAAGOMAoAHhYeJOnxask0/a0f6ZNjVe1bAuk/nhMR6XWbxA5x+W1+8HMRqa2tfeWVV9ydFAAAAACAwEUYBQCvUBX5UU/lzfFa5Sx9yXCtZ+i/9dGju6TyfRGRsRnuvEHMYLlpmIg89dRT1zkqAAAAAAABiDAKAN7VI0RZmKgem6GvG6clRyv/6qPbckREOkTIsOlunnpshogcOHBg9+7dHhgUAAAAAIBAQhgFgJYQpEpqnLolRS9N1Rcmqp0vn5J9b4iIJN0njnZunvTWNOkQISJswQQAAAAAgKsIowDQovp1UpYM1x7v8HcxGkWkaQ8lNznaS+JEEcnPz/fQdAAAAAAABArCKAD4wJhRt6mqKiJyqND9s1imlP5dRGK+N8K0PTQZAAAAAACBgTAKAD7Qp0+f8ePHi4hsyxHLdPMsH74lpytF5IPEjP55Rm6pZVieGxEAAAAAgDaNMAoAvjF//nwRkdOVUvK2m6do2r4pIkYSfnTsvJ2x0+yzzlhWYl00PDYkAAAAAABtFWEUAHxj4sSJN910k8gXfdNVpz6Wg1tERMZmiKo1PVdRbz+yx+y9zvnHD616p4cGBQAAAACgLSKMAoBvqKr6wAMPiIiU/E0+P+ry8dtyxLZED5bRc6/4zmcX5P/804x+xZlVZJ5p9MSsAAAAAAC0OYRRAPCZBx54IDg4WGxbdrzg2pHOi/LuKhGR4dMlLOqqLznvlOwDVuwaZ+Zus6qBvZkAAAAAAPgawigA+MwNN9wwbdo0EZGdL4nzkgtHFr0m9adFRMakf/sL652y/KDVa60xZ5tZVkseBQAAAACgGWEUAHxp3rx5IiL1NbJskux/87t3qK/9TDb9QV77/0VEbkyU3iOv5V0uW7L6qBX/mpG21Tx0jjwKAAAAAIDovh4AAAJaUlLSrbfe+t5778nh7XJ4u3TpKXfcL0k/lU7drnzpkX/I31fI/jfF/GJbpfGZLr2XZUteufX6cevHNyq/vUW79QbFE38CAAAAAABaJVaMAoCPFRQUPP7447179xYROfOpbFgsWX0k9245skNE5FKdbFshiwbL48my9zUxnZqmTZ48uaCgoPh/7k2NU12tm5Ytmyrt2940kvKN/ErL438cAAAAAABaBcW2uaYSromMjDx9+rSI1NTURERE+GqM2traxsbGqKirbzsDtDqWZb399ttPP/305s2bLeuLXtmtn5z7TC7VNX0VFRX1s5/9LCMjIzY29ssDS87a/3PAevVjy3Arco7uqixMVCfGuBxYv4Vt2ydPnuzYsWNoaKjnzgrAM+rq6urr67t37+7rQQBcxcmTJ0NCQjp27OjrQQBc6cKFC7W1tVFRUZqm+XoWAB7DilEA8AuqqqakpOTn5x87diwrK+uGG24QETl5pKmKjh49+uWXX66srHzssce+WkVFJKGzsmqsdiRVXzBQbef6/0nbVW1PLjAHrzdWlVkmvykDAAAAAAQMVozCZawYBVpAY2NjXl7es88+Gx8fP3/+/MTExGs5qvqiPFFi/vmg1WC486a9wpQFA9UHB6jB1/dbcFaMAv6MFaOAP2PFKOC3WDEKtEmEUbiMMAr4uZpL8udD5vKD1tlGdw6P6aD8MkF9IF4NcXd/PsIo4M8Io4A/I4wCfoswCrRJXEoPAG1NZDtZPESrmOlYOkLrHuLy4ZX19iN7zJvWOBcXm+cue2E+AAAAAAD8AGEUANqmMIdkJqjlMxw5SdqNoS5vrXTqkjxabMW86szcbZ686I0BAQAAAADwJcIoALRlwZqkx6vHZugrx2jx4S7n0TqnLD9o9VnrzNxtftrArVcAAAAAAG0HYRQA2j6HKnP6qgen6RsnaMMiXc6jDYYsP2j1XmvM2WYeqSWPAgAAAADaAsIoAAQKVZFJMWrRFH1Lij6qq8t59LIlq49aA14zJhUYxTXkUQAAAABA60YYBYCAkxyt7Jqk75ioT4xRXO2jli2bKu1hG4xJBcaez8mjAAAAAIDWijAKAAEqqZuSP0Evnqrf00fVXOyjtsimSnvkRiMp38ivtLwzIAAAAAAAXkQYBYCANjhCWTVWO3Cnfk8fVXf9Z8KuantygTnkDSOv3GL5KAAAAACgFSGMAgBkYGdl1VitLFVfMFBtr7t8+P7TdtpWM3G9sarMMlg/CgAAAABoDQijAIBmN4Upy0Zqx2c4Fg1ROwW5fPiHZ+y5281+ecayEqvRcnlzJwAAAAAAWhJhFADwNVHtZfEQ7dgMx6Ihapdglw8vr7N/8U/rtnc6/+mQdsHwwnwAAAAAAHgCYRQAcBURwbJ4iFYx07F0hNYjxOXln583qr87oMWucS4uNs82emNAAAAAAACuC2EUAPCNOjgkM0Etn6mvHKP16ehyHq25JI8WW7FrnJm7zc8ueGNAAAAAAADcRBgFAHyHIFXm9FUPTddXjtEGhLucR+ucsvygFbfWmbHT/KSBvesBAAAAAH6BMAoAuCYOVeb0VUum6RsnaLfe4HIebTQlt9TqvdaYs808XEseBQAAAAD4GGEUAOACVZFJMeo/f6LvmKgnR7ucR52WrD5q3fyaManA2FtDHgUAAAAA+AxhFADgjqRuypYUfcdEfWKM4moftWzZVGkP32CMf8vY/Tl5FAAAAADgA4RRAID7krop+RP0/Xfq9/RRNZfXj0phlT1qo5GUb+RXWl6YDgAAAACAb0QYBQBcr8Quyqqx2uFUPT1edbj+g2VXtT25wLzlDWNVmWWxfhQAAAAA0CIIowAAz+jdUclJ0srS9AUD1Xaay4Hz/dP23O1m4npjVZllsH4UAAAAAOBlhFEAgCfFdlCWjlDf+/7Z/xxkhge5fHjJWXvudrNvnrGsxLpkemE+AAAAAABEhDAKAPCGyGDrPxPMilmOJcO1iGCXDz9eZz+yx7xpjXNxsXne6YX5AAAAAAABjzAKAPCWjg5ZmKhWzHIsHaFFh7q8N1P1RXm02Oq91rm42DzT6I0BAQAAAACBizAKAPCuUF0yE9SPZ+grx2j9OrmcR2suyaPFVuwaZ+Zu88QF9mYCAAAAAHgGYRQA0BKCVJnTV/1our5unHZzuMt5tN4pyw9avdYac7aZR8+TRwEAAAAA14swCgBoOaoiqXFqyXR94wTttiiX82ijKauPWje/ZszZZn50jjwKAAAAAHAfYRQA0NIUkUkx6p7J+o6J+sQYl/Oo05LVR62E141JBUbRKfIoAAAAAMAdhFEAgM8kdVPyJ+i7JukTYxRX+6hly6ZK+9Y3jaR8Y+sJ8igAAAAAwDWEUQCAj43qquRP0A/cqd/TR9VcXj8qu6rt5M1GUr6RX2nRRwEAAAAA14gwCgDwC4O6KKvGakfS9AUD1Xaay4fvqrYnF5i3rDdWlVkmfRQAAAAA8F0IowAAP9IrTFk2Ujucqi8YqIboLh9+4Iw9d7vZP8/ILbUMywvzAQAAAADaCsIoAMDvxHRQlo3Ujs90LBqihge5fPix83bGTrPPOmNZiXXR8MJ8AAAAAIDWjzAKAPBTN7STxUO0ylmOpSO0bu1dPryi3n5kj3nTWufiYrP2shfmAwAAAAC0ZoRRAIBfC3NIZoJ6dIZj6QitZ6jLezN9flEeLbZiXnVmFZlnGr0xIAAAAACgVSKMAgBagVBdMhPUYzP0lWO0/p1czqPnnZJ9wIpd48zcbVY1sDcTAAAAAIAwCgBoPYJUmdNXPTRd3zhBGxrpch6td8ryg1avtcacbWZZLXkUAAAAAAIaYRQA0MqoikyKUYum6BsnaCOiXM6jly1ZfdSKf81I22oeOkceBQAAAIAARRgFALRKisikGHX3ZH3HRH1ijMt51LIlr9wa9LoxqcB47xR5FAAAAAACDmEUANC6JXVT8ifoxVP11DjV1T5q2bKp0r7tTSMp38ivtLwyHwAAAADALxFGAQBtwS0Ryrpx2gfT9Hv6qLrrP9x2VduTC8ymPMryUQAAAAAIBIRRAEDbkdBZWTVWO5KqLxiottNcPrwpjw5eb6wqs0z6KAAAAAC0aYRRAEBbExemLBupHZ/pWJiohuouH/7BGXvudrPfOmNZidVoemE+AAAAAIAfIIwCANqmru1lyXDt+EzHoiFq52CXD/+4zn5kj9kvz1hWYl0wvDAfAAAAAMCnCKMAgLYssp0sHqJVzHQsHaF1D3H58Mp6+5E95k1rnIuLzXOXvTAfAAAAAMBHCKMAgLYvzCGZCWr5DEdOknZjqKt718upS/JosRXzqjNzt3nyojcGBAAAAAC0NMIoACBQBGuSHq8em6GvHKPFh7ucR+ucsvyg1WetM3O3+WkDezMBAAAAQOtGGAUABBaHKnP6qgen6RsnaMMiXc6jDYYsP2j1XmvM2WYeqSWPAgAAAEBrRRgFAAQiVZFJMWrRFH1Lij6qq8t59LIlq49aA14zJhUYxTXkUQAAAABofQijAICAlhyt7Jqk75ioT4xRXO2jli2bKu1hG4xJBcaez8mjAAAAANCaEEYBAJCkbkr+BL14qn5PH1VzsY/aIpsq7ZEbjaR8I7/S8s6AAAAAAAAPI4wCANBscISyaqx24E79nj6q7vpPyF3V9uQCc8gbRl65xfJRAAAAAPBzhFEAAL5mYGdl1VitLFVfMFBtr7t8+P7TdtpWM3G9sarMMlg/CgAAAAD+ijAKAMBV3BSmLBupHZ/hWDRE7RTk8uEfnrHnbjf75RnLSqxLphfmAwAAAABcH8IoAADfKKq9LB6iHZvhWDRE7RLs8uHldfYje8y4Nc7sA9YFwwvzAQAAAADcRRgFAOA7RATL4iFaxUzH0hFajxBX966Xkxclq8iMXeNcXGyebfTGgAAAAAAAlxFGAQC4Jh0ckpmgls/UV47R+nR0OY/WXJJHi63YNc7M3eZnF7wxIAAAAADABYRRAABcEKTKnL7qoen6yjHagHCX82idU5YftOLWOjN2mp80sHc9AAAAAPgMYRQAAJc5VJnTVy2Zpm+coN16g8t5tNGU3FKr91pjzjbzcC15FAAAAAB8gDAKAICbVEUmxaj//Im+Y6KeHO1yHnVasvqodfNrxqQCY28NeRQAAAAAWhRhFACA65XUTdmSou+YqE+MUVzto5Ytmyrt4RuM8W8Zuz8njwIAAABACyGMAgDgGUndlPwJ+vt36vf0UTWX149KYZU9aqORlG/kV1pemA4AAAAA8DWEUQAAPOl7XZRVY7XDqXp6vOpw/cfsrmp7coF5yxvGqjLLYv0oAAAAAHgNYRQAAM/r3VHJSdLK0vQFA9X2usuHv3/anrvdTFxvrCqzDNaPAgAAAIAXEEYBAPCW2A7KspHa8RmORUPU8CCXDy85a8/dbvbNM5aVWJdML8wHAAAAAAGMMAoAgHdFtZfFQ7SKWY4lw7WIYJcPP15nP7LHvGmNc3Gxed7phfkAAAAAICARRgEAaAkdHbIwUa2Y5Vg6QosOdXlvpuqL8mix1Xutc3GxeabRGwMCAAAAQGAhjAIA0HJCdclMUD+eoa8co/Xr5HIerbkkjxZbsWucmbvNExfYmwkAAAAA3EcYBQCgpQWpMqev+tF0fd047eZwl/NovVOWH7R6rTXmbDOPniePAgAAAIA7CKMAAPiGqkhqnFoyXd84QbstyuU82mjK6qPWza8Zc7aZH50jjwIAAACAawijAAD4kiIyKUbdM1nfMVGfGONyHnVasvqolfC6ManAKDpFHgUAAACAa0UYBQDALyR1U/In6Lsm6RNjFFf7qGXLpkr71jeNpHxj6wnyKAAAAAB8N8IoAAB+ZFRXJX+CfuBO/Z4+quby+lHZVW0nbzaS8o38Sos+CgAAAADfgjAKAIDfGdRFWTVWO5KmLxiottNcPnxXtT25wLxlvbGqzDLpowAAAABwNYRRAAD8VK8wZdlI7XCqvmCgGqK7fPiBM/bc7Wb/PCO31DIsL8wHAAAAAK0ZYRQAAL8W00FZNlI7PtOxaIgaHuTy4cfO2xk7zT7rjGUl1kXDC/MBAAAAQOtEGAUAoBW4oZ0sHqJVznIsHaF1D3H58Ip6+5E95k1rnYuLzdrLXpgPAAAAAFobwigAAK1GmEMyE9SyNMfSEVrPUJf3Zvr8ojxabMW86swqMs80emNAAAAAAGg1CKMAALQyobpkJqjHZugrx2j9O7mcR887JfuAFbvGmbnbrGpgbyYAAAAAAYowCgBAqxSkypy+6qHp+sYJ2tBIl/NovVOWH7R6rTXmbDPLasmjAAAAAAIOYRQAgFZMVWRSjFo0Rd84QRsR5XIevWzJ6qNW/GtG2lbz0DnyKAAAAIAAQhgFAKDVU0Qmxai7J+s7JuoTY1zOo5YteeXWoNeNSQXGe6fIowAAAAACAmEUAIC2I6mbkj9BL56qp8aprvZRy5ZNlfZtbxpJ+UZ+peWV+QAAAADAbxBGAQBoa26JUNaN0z6Ypt/TR9Vd/1G/q9qeXGA25VGWjwIAAABoqwijAAC0TQmdlVVjtSOp+oKBajvN5cOb8ujg9caqMsukjwIAAABocwijAAC0ZXFhyrKR2vGZjoWJaqju8uEfnLHnbjf7rTOWlViNphfmAwAAAAAfIYwCAND2dW0vS4Zrx2c6Fg1ROwe7fPjHdfYje8x+ecayEuuC4YX5AAAAAKDFEUYBAAgUke1k8RCtYqZj6QitR4jLm9dX1tuP7DFvWuNcXGyeu+yNAQEAAACg5RBGAQAILGEOyUxQP56h5yRpN4a6nEdPXZJHi62YV52Zu82TF70xIAAAAAC0BMIoAACBKFiT9Hj12Ax95RgtPtzlPFrnlOUHrT5rnZm7zU8b2JsJAAAAQOtDGAUAIHA5VJnTVz04Td84QRsW6XIebTBk+UGr91pjzjbzSC15FAAAAEBrQhgFACDQqYpMilGLpuhbUvRRXV3Oo5ctWX3UGvCaManAKK5xLY+eP39+586djY2Nrr4pAAAAAFwnwigAAGiWHK3smqTvmKhPjFFc7aOWLZsq7WEbjEkFxp7PvzuPfvjhh/PmzevZs+ftt99+4403ZmVllZeXuzc2AAAAALiBMAoAAL4mqZuSP0Evnqrf00fVXOyjtsimSnvkRiMp38ivtP79BZcvX87Lyxs/fnxiYuKKFSvq6upE5NSpU9nZ2X369Bk/fnxeXp5pmh75gwAAAADAtyCMAgCAqxgcoawaqx24U7+nj6q7/v8XdlXbkwvMIW8YeeVW0/LRysrK3/zmNzExMWlpaYWFhbZtS3AHGfOAzM+T4WmiB1mWVVhYmJaW1q9fv8cff7ympsbTfyYAAAAA+BfFttkqAa6JjIw8ffq0iNTU1ERERPhqjNra2sbGxqioKF8NAOCb2LZ98uTJjh07hoaG+noWeMbxOvuJEuvZw9ZFw53DE8Iud1j9s6K/vfavpaDd42XsgzLybmnfsfmZ89Wy4wX5x7Ny5tOmJ9q1azdv3rw//elP1z8/vqqurq6+vr579+6+HgTAVZw8+f/Yu/O4qur8j+OfsyACiQhIoaaiuK9QmKhphpTmUmbgzK8m6zeFU03Zz5nUlilbbHCaabSaCpsm02ZRcqk0LSXXNMUlzAUVpVQUFdTLKt6z/P6gYRxzuZd74SK8nn997+F8z33z6I+Ob873fPMDAwODg4OvfCqA2lVWVuZwOCIiIjRN83UWAF5DMQq3UYwCuDyK0frqRLm8vcecsdNynHNz5vrZ8mGKiIjmJzGjZNB46TRILvoWU8uUrKWyJk12rxTbFpE1a9YMHDjQ4+z4D4pRoC6jGAXqLIpRoF5iKT0AAHBJRIBMjdUOjPV7IVYN9Xdn5up3RURa9ZDUHBn/T+l8y8VbURFRNYkZJU8ulVd2SZMIEXn77bc9Dg4AAAAAF0ExCgAA3BDmL1NjtR9+5jejr9YyyIW9mQ5ukh+2iYgkPC4hLj+lGBEtNz8oIgsXLjx69Gi10wIAAADApVCMAgAAt13jJxO6qwfH6h8O0qKDL1uPrk4TEQkMkT7J7n3HoBRRNafT+f7771c/KAAAAABcAsUoAACopkaq3N9B3X2PPnuQ1jnkYvVoSaFs+VhEpP8D0ijQvauHXi89horIu+++63Q6PU8LAAAAAOejGAUAAB7xU2VcB3XXGP3T27Q+zf+7Hl3/gTjPiqLIoIerc+lbxovI0aNHlyxZ4o2kAAAAAPAfFKMAAMALVEVGtlY33amvG6EPaamIiNi2rPubiEjXIXJth+pctNvtEhEtIu+8844XowIAAACAUIwCAADvGnCdsmKYvm6E3uf4F3IiR0Tkll9V81qKIgMfEpGVK1fu3bvXexkBAAAAgGIUAADUgAHXKW12zBURadZSeg6r/oX6jxO/xrZtf/jhh97KBgAAAABCMQoAAGpIcHCwiEhFmRjnqn+VihIxnf+5GgAAAAB4CcUoAACoESkpKSIiZadl07+qf5XVs8QyFd3v5tG/8FYwAAAAABAPi9GzZ89uPc+ZM2e8FQsAAFzt+vTpc+ONN4qIrKru1klGhXz9oYjYsXcP/jpi/Hozv9x7+QAAAAA0bB4Vo1u2bLnx3/r06VNcXOytWAAAoB545JFHREQOZ8nBTdWZn/mxFJ8QEbllvNOSWdlWh/nOF7dZJU5vhgQAAADQMHlUjObl5VWN+/Xrd/3113ucBwAA1B8///nPQ0NDRURWp1Vn/po0EZEWXSS6f+WBEqdM3WZGzXNOz7IqTG/FBAAAANAQeVSMOp3/eWCjffv2HocBAAD1SkBAwAMPPCAikpn+47Ofrju8Qw58IyIy+FFRlPN/UnBWpmSandKNOfst20tRAQAAADQ0HhWjISEhFx0DAABUevTRR1VVFaNCvp7j3szKN5M2biI3/fyiP/+hxB63xrzpE2PVMdpRAAAAAG7zqBjt0KFD1biwsNDjMAAAoL5p3779kCFDRERWvS17vhLbhRLTMmTbYtn8LxGRvvdKQPBlzs08ad+61EhcZnxbSD0KAAAAwA2eFqMRERGV4x07dngjm76JzAAAIABJREFUDwAAqG8effRREZFTR+T1ofJ8T8l4S8odFz/VcUyWTJMpHeSdZKkoFUWRW8a78hUr8+wbFhvJGWZuMfUoAAAAAJd4VIyqqjpmzJjK8Y4dO3JycrwRCQAA1CujRo2aNm1aZGSkiEj+XvnXRHmqrcx5RA5n/eekfWsl7X9kcrR88qKczhORa9tEN304TVp2c/FbLFvSc63O6caEjebpCu//FgAAAADqGY+KURGZOHGiv79/5fiZZ57xOA8AAKhvFEV55plnfvjhh3nz5g0aNEhEpKJU1r0vL8VJ6kD57BV5obe8NkS2fCymU9O0UaNGLVu27OjBvUf/8nBqnNa0kRvfdc6SN3ZZ7ec7p2dZ5UYN/UIAAAAA6gNPi9Ho6OgXX3yxcpyenv7aa695HAkAANRDfn5+ycnJq1ev3rlz56OPPhocHCwicuAb+fQlObpbRCIiIp5++ukDBw588sknQ4cOVVU1UJfJvdQDY/0m91L9NTe+63SFTMk0O6Ybs7Itk7X1AAAAAC7G02JURCZNmvTYY49VjR988EE2YgIAAJfSrVu3v/zlL0eOHElLS+vVq5eI3HDDDWlpad9///2rr77apk2bC84P85fUOG1fkp7SWVUVN77oSKk9fr3Zc4GRnmt5MT8AAACA+kGxXdkc1gXvvvvupEmTiouLRSQgIGDMmDGJiYm9e/e+/vrrmzZtqqpeaGBRR4SHh1d23wUFBWFhYb6K4XA4Kioqqrb/AlB32Ladn58fHBwcFBTk6yy4CuTl5bVs2dLFk7cU2FM2mxlH3b576Xet8oc+Wv9r3SlW66ni4uKSkpIfX/kKoI7Jz88PDAz88Zl6AHVJWVmZw+GIiIjQNHeWsQCo2zwtRhMTE1euXOmtNCJiWZai8I+WOo1iFMDlUYyipq3MsydtNrcXuncPo4jcE6W+GqdGBzfoOw2KUaAuoxgF6iyKUaBe4kFOAABwlRnSUtk6Wp+foLVr4kbFaYuk51pdPzbGrzfzy2suHQAAAICrA8UoAAC4+igiSVHqniQ9bYAWEeDGRKcls7Kt6HnOKZlmkbPG8gEAAACo8yhGAQDA1aqRKimd1QPJfi/EqgG6GxNLDZmeZbWf55yeZZ1jZyYAAACgQXLn3xAX89BDDw0ZMsQrUSrxglEAAOCWa/xkaqz2cCf1pe3W+3st0+VXjxaclSmZ5t/2Wa/cqN4T5daO9wAAAACuep4Wo2PHjvVKDgAAAE+0DFLSBmhPdldf2Gql57rxFOg+h52cYfZpbk3vo90SSTsKAAAANBQspQcAAPVHlxBlfoK2YZR+83XuVZybT9qDlxqJy4wdp9zb7B4AAADAVYpiFAAA1DfxEcraEfqKYXr3Zu7Voyvz7JhFRnKG+X0x9SgAAABQz1GMAgCA+mlIS2X7aD1tgBYZ6MYsy5b0XKvrAmNKpnnmXI2FAwAAAOBrFKMAAKDe0lVJ6azuT/ZLjdOaNnJjYvl529afNWssHwAAAADfoRgFAAD1XJAuk3upB8b6Te6l+mtuTDxVIVMyzY7zjVnZbmx2DwAAAOCq4Omu9JdRVlb27bffHj9+/MyZMw6HIzAwsFmzZmFhYd26dbv22mtr7nsBAAB+KsxfUuO0R7qov9tifZRjud5zHi61x68339hlvRCrJkXxR2UAAACgnvB+MXrkyJG0tLRly5ZlZWUZhnHRc9q1azdw4MCUlJT4+HivBwAAALiUNtcoc27RHu+mTt5srjrmxlOgu07byRlmQgtreh/thnD39nQCAAAAUAd586mHEydO3HvvvVFRUa+88srWrVsv1YqKyMGDB2fPnt2vX7+4uLgNGzZ4MQMAAMAVxTVXvhqurxim9w5zr+LMOGrHLTaSM8wDRSytBwAAAK5uXitGly1b1rNnz3/84x+X6UN/asuWLQMHDvzd735nmuxrAAAAatWQlsrWu/T5CVpUEzfqUVskPdfq8rExfr15vLzm0gEAAACoWd4pRpcsWTJq1Kjjx49XY65pmq+88sqjjz7qlSQAAACuUxVJilKzk/S0AVrzxm5MdFoyK9uKnu+ckmkWO2ssHwAAAIAa44V3jG7ZsiU5OfmCB0X9/f2HDBkSFxfXpUuX0NDQpk2blpaWFhcXHzx4cPv27V988UV+fv7558+aNatNmzbPPPOM53kAAADc0kiVlM5qUpQ6fYf5xi6r3OXVLyVOmZ5l/W2v9Wxv7bGuqs7OTAAAAMDVQ7Ftj96QZdt2fHz8pk2bqo40bdr0ueee++Uvf9msWbNLzTJNc/ny5c8888yOHTuqDjZu3HjPnj1t27b1JA9qQXh4eGFhoYgUFBSEhYX5KobD4aioqIiIiPBVAACXYtt2fn5+cHBwUFCQr7MAbjtSar+83Xp/r2W6eYvUqany8o3qPVFqHd+Yqbi4uKSkJDIy0tdBAFxEfn5+YGBgcHCwr4MAuFBZWZnD4YiIiNA0zddZAHiNpw82LFy48PxWtE+fPnv27Pntb397mVZURDRNGz58+NatWydPnlx18OzZs7/73e88zAMAAOCJVkFK2gDtuzF6UpR7t0l7HXZyhhn/qbHGnc3uAQAAAPiKp8Xo3//+96pxTEzMV1995foDCLqup6amTpkyperIwoULy8vZxQAAAPhYlxBlfoL29Ui9/7XuPQC66YR9y1IjcZmx4xT1KAAAAFCneVSMVlRUrFy58scLqers2bOrsWrypZde6tatW+W4rKxs9erVnkQCAADwln7XKutH6p/epnVo6l49ujLPjllk3L/aPFpGPQoAAADUUR4Vo9nZ2cXFxZXjQYMG9ezZsxoX8fPzS0lJqfqYmZnpSSQAAADvGtla3TVGTxugXRfgxizLlrk5Vof5xpRM88y5GgsHAAAAoLo8KkZPnDhRNU5ISKj2dc6fe/41AQAA6gI/VVI6qzlj/VLjtGA/NyaWGTI9y2o/zzk9yzpr1lg+AAAAAO7zqBgtKCioGnuyt2nLli2rxhSjAACgbgrSZXIv9cBYv8m9VH93NqQ9VSFTMs1O6casbMtibT0AAABQN3hUjPr7+1eNz549W+3rlJWVVY0DAtxZpQYAAFC7whtLapy24249KUp1682jh0rs8evNXguNJYcoRwEAAADf86gYbd68edX44MGD1b7O+XPPvyYAAEDd1LGpMj9B23Snfkuke/sy7Txtj/zSSFxmbCugHgUAAAB8yaNi9Pwl8IsWLbLtat7fL168+KLXBAAAqMvimiurhusrhum9Qt3etv7GxUZyhnmgiHoUAAAA8A2PitF27dq1b9++cnzw4MEPPvigGhc5evTo+++/X/XRk02cAAAAat+Qlsq20fr8BK1tEzfqUVskPdfq8rExfr15orzm0gEAAAC4OI+KUREZOnRo1XjixImbNm1ya3pJScnPfvazM2fOVH5s1apVjx49PIwEAABQy1RFkqLUvUn6jL5aSCM3JjotmZVttZ/vnJJpFjtrLB8AAACAn/C0GH3sscd0Xa8cOxyOIUOGzJkzx8U19bt377711lvXrVtXdWTChAmK4t5KNAAAgDqikSoTuv+4bX1jd7atL3HK9Cyry8fGrGzLsGosHwAAAIDzeFqMdunS5aGHHqr6WFJSMm7cuPj4+NmzZxcVFV10immaq1evfvDBB3v16pWZmVl1PCoq6vHHH/cwDwAAgG+F+ktqnLYvWU/prGru/ME3r9Qev97ssdBIz6UcBQAAAGqcUu0dk6o4HI5BgwZlZWVdcFzTtA4dOnTp0iU8PDw4OLikpKSoqCg3N3fHjh1lZWUXnBwYGLhy5cr4+HgPw6AWhIeHFxYWikhBQUFYWJivYjgcjoqKioiICF8FAHAptm3n5+cHBwcHBQX5OgvgY7vP2FO3WtUoOvtGKNP7aAOv8/5KmuLi4pKSksjISK9fGYDn8vPzAwMDg4ODfR0EwIXKysocDkdERISmubMqBEDdpnt+iaZNmy5btmzgwIE5OTnnHzdNMzs7Ozs7+4pXaNSo0bx582hFAQBAPdM1RJmfoH19XJ202dxw3I2/Rn9zwh60xBjSUnn9Jq2Hm1veAwAAAHCFp0vpK0VGRm7dujUlJaUac7t27bpx48YRI0Z4JQkAAEBd0/9aZf1IfX6CFh3sXsW5Ms+OXWyMX28eu3CxDQAAAABPeacYFZHg4OC0tLRly5bddtttLm6g1LFjx5kzZ27bti02NtZbMQAAAOogRSQpSt19j542QLs2wI2JhiWzsq3o+c4pmabjXI3lAwAAABoeL7xj9Kf27dv3xRdffPPNN1u2bDl+/LjD4ag8HhAQEBoa2rNnz759+w4cOHDQoEHsQX814h2jAC6Pd4wCl1dqyFu7rGnfmsVO9yaG+ctTPbUnu6v+HrzcjHeMAnUZ7xgF6izeMQrUSzVSjF7AsiyHwxEQENC4ceOa/i7UAopRAJdHMQq44uRZeWW7+fYey3BzZ6bW1yjP9lYf6qSq1fr7MsUoUJdRjAJ1FsUoUC95tPlSaWnpxo0bqz726tWrefPmPz1NVdVmzZp58kUAAAD1TPPGMjNee7Sr+rst1se5lut/qT5UYo9fb76XbU3vo93agsU3AAAAQDV5VIxu3bo1MTGxcuzn53f48GFvRAIAAGgoOjVV5idom0+qkzaba465sY5nS4Gd8LkxpKXyhz5aTBj1KAAAAOA2jzZfOnr0aNW4f//+1157rcd5AAAAGpw+zZXVw/UVw/SeoW5vW3/jYiM5wzxYXOMvRwIAAADqGY+KUdM0q8ZRUVEehwEAAGi4hrRUto/W5ydobZu4UY9atqTnWl3SjfHrzRPlNZcOAAAAqG88KkbPf3MoLwgHAADwkKpIUpS6a4yeGqeFNHJj4jlLZmVb0fOdU7eZ5UaN5QMAAADqEY+K0Q4dOlSNT5486XEYAAAASKAuk3upB8b6Te6lNnZn59tip7y4zeqQbszKtkzW1gMAAACX5VExGh0d3aJFi8rx9u3bvZEHAAAAIiKh/pIap+1L1lM6q5o7rx7NK7XHrzd7LDDSc60aSwcAAABc9TwqRhVFSUpKqhzv2bNn9+7d3ogEAACAH10fpKQN0LLu1pOi3Ltt23PGTs4w+31qrMvn2VEAAADgIjwqRkVk4sSJgYGBlePJkyd7nAcAAAAX6tZMmZ+grRimx4a7t239xhP2wCXGyC+N/Q7qUQAAAOC/eFqMtm7d+g9/+EPleMmSJc8++6zHkQAAAHARQ1oqW+7S5ydo7YPdq0eXHLK7LTDGrzePldVQNAAAAODq42kxKiKPPfZYVR/66quvjh49+vDhw55fFgAAABdQRJKi1D336GkDtGsD3JjotGRWttVhvvOFHXqx4V6vCgAAANRLim17tK6qpKTE6XSKyL/+9a/JkycXFxeLiKZpw4YNS0xMjImJadmyZUhIiKK4ev/drFkzT/KgFoSHhxcWFopIQUFBWFiYr2I4HI6KioqIiAhfBQBwKbZt5+fnBwcHBwUF+ToLUJ+VOOUvu61p35rFTvcmhjayJvXye7K76u/OlvcAakF+fn5gYGBwcLCvgwC4UFlZmcPhiIiI0DT+9wnUH54Wo4mJiStXrvRWGhGxLMv1FhU+QTEK4PIoRoHadLTMfnGb9bd9luHmFvRtrlFeukH9RQeVGy+g7qAYBeosilGgXvLCUnoAAAD4SotAJW2A9t3delKUexXnDyX2uDXmTZ8Yq46xLxMAAAAaIopRAACAq17nEGV+grZxlD7wOvceAM08ad+61EhcZnxbSD0KAACAhoViFAAAoJ64KUJZM0JfMUzvEepePboyz75hsZGcYeYWU48CAACgodA9nP/kk08mJSV5JUolXjAKAADgiSEtlW9H6x/lWE9nWkfLXC06LVvSc61PfrAe6Ki+cqPWvHGNZgQAAAB8z9NidPjw4V7JAQAAAG9RFbm/g3pPlPrmLuv3WabjnKsTz1kyK9tKz7Um99Se6KYGeHqrCAAAANRdLKUHAAConwJ1mdxLPTDWb3Iv1d+dHXRPV8iUTLNjujEr2zJZWw8AAIB6ygvF6Ol/O3fO5acRAAAAUCvC/CU1TtuXpKd0Vt3at/5IqT1+vdlzgZGea9VYOgAAAMBnPCpGN2/erChK6L/l5OR4KxYAAAC8qPU1StoALetu/fZI062Ju8/YyRlm/8+Mr4/z7CgAAADqFY+K0cOHD1eNY2Jiunbt6nEeAAAA1JTuzZT0gc55NxXFhLm33eWG4/bNnxnJGeZ+B/UoAAAA6gmPitHy8vKqcefOnT0OAwAAgBp3c/i5raP1+QlauyZu1KO2SHqu1W2BMX69mV9+5fMBAACAOs6jYvSaa66pGkdERHgcBgAAALVBEUmKUvck6WkDtIgANyY6LZmVbUXPc07JNIucNZYPAAAAqHkeFaNRUVFVY4fD4XEYAAAA1J5GqqR0Vg8k+70QqwbobkwsNWR6ltV+nnN6lnWOnZkAAABwdfKoGO3SpUuTJk0qx/v27fNGHgAAANSqa/xkaqy2P0lP6azq7twbFpyVKZlmjwVGeq7Fm0cBAABw1fGoGG3UqNEdd9xROd60adPJkye9EQkAAAC1rWWQkjZA++5uPSnKvfvDfQ47OcPs+4mx+hjtKAAAAK4mHhWjIjJx4kRFUUTENM1XX33VG5EAAADgG51DlPkJ2sZR+s3Xubdt/eaT9uClRuIyI+sU9SgAAACuDp4Wo3369ElJSakcv/XWW5988onHkQAAAOBLfSOUtSP0FcP07s3cq0dX5tmxi4zkDPP7YupRAAAA1HWeFqMiMnPmzCFDhoiIYRhjx459/fXXTdP0/LIAAADwoSEtle2j9bQBWmSgG7MsW9JzrU7pxoSN5plzNRYOAAAA8JgXilF/f/+lS5c++uijiqJUVFT85je/6dq16x/+8Idvv/3W6XR6fn0AAAD4hK5KSmd1f7JfapzWtJEbE89Z8sauH7etP8tfzAEAAFAnKbbt0UKnRx99dPPmzZXj/fv3FxUVnf9Tf3//5s2bN23atHHjxi5eMDMzs/KlpaizwsPDCwsLRaSgoCAsLMxXMRwOR0VFRUREhK8CALgU27bz8/ODg4ODgoJ8nQXAhYqLi0tKSiIjI92dWFghr+0wZ+y0KtwsOq8PUp6LUX/ZSdW4xQOuJD8/PzAwMDg42NdBAFyorKzM4XBERERomubrLAC8Rvdw/v79+7du3Xqpn1ZUVBw5cuTIkSMefgsAAAB8K8xfUuO0R7qor35r/XWvZbn8t/XDpfb49ebMndbUG1R3t7wHAAAAag73pgAAAHBVm2uUtAHapjv1W1u49/zn7jN2coY55HNjawH7MgEAAKBOoBgFAACAe24MVzLu0FcM03uHuVePZhy14xYbyRlmThH1KAAAAHzM06X0w4cPb9eunVeiAAAA4CoypKWy9S59wffW5M1WbrGrRactkp5rLf7BerCj+tIN2rUBNZoRAAAAuCRPi9Enn3zSKzkAAABw1VEVSYpS72yjzt5nPbfFPHnW1YlOS2ZlW/84YD3WVX22t9bEryZTAgAAABfDUnoAAAB4pJEqKZ3VvUl+k3upAe782b3EKdOzrPbznDN3WoZVY/kAAACAi6EYBQAAgBc085fUOG1fkp7SWdXcefXoybPy5Ddm9wVGeq7re90DAAAAnqIYBQAAgNe0ClLSBmjfjdGToty7z9zrsJMzzPhPjTXHaEcBAABQGyhGAQAA4GVdQpT5CdqGUfqA69zbtn7TCfuWpUbiMmPHKepRAAAA1CyKUQAAANSI+Ahl3Qj909u0Dk3dq0dX5tkxi4zkDPOHEupRAAAA1BRPd6W/jGPHjh0+fPj06dNFRUUi0rJly379+tXc1wEAAKAOGtlaHdpK/WCf9cJWM7/c1VmWLem51tLD1uPd1Cm9tJBGNRkRAAAADZL3i9FVq1bNnj173bp1ubm55x8fPXr0woULLzh53759WVlZleMWLVr079/f63kAAADgW36qpHRW741W39plvfqtWeR0dWKZIdOzrPeyrUk9tQnd1cZaTaYEAABAA+PNYnT9+vVPPPHE9u3bXZ+iKMrPf/5z0zRFJDw8PC8vr1EjngcAAACoh4J0mdxL/WUn9Y/fmTN2WhWmqxNPVciUTPPtPdazvdVfdnJvy3sAAADgUrzzjlHbtqdNmzZ48GC3WlER6dChw1133VU5Ligo+Pzzz72SBwAAAHVTeGNJjdP2Jum/iFbdajgPldjj15u9FhpLDvHiUQAAAHiBd4rR55577rnnnjMMoxpzU1JSqsYLFizwSh4AAADUZW2uUebcom26Ux8c6d7zn7tO2yO/NBKXGdsKqEcBAADgES8Uo7Nnz3711VfPPxITE/OnP/1p8+bNeXl5V3xt6ODBg0NDQyvHX331lW1zjwsAANAgxDVXvhqurxim9wp1e9v6GxcbyRnmgSJuHQEAAFBNnhajxcXFkydPrvoYEhIyb968bdu2TZw4MS4urkWLFn5+fpe/gp+f37BhwyrHR48e3bdvn4eRAAAAcBUZ0lLZNlqfn6BFNXGjHrVF0nOtLh8b49ebx13e7B4AAACo4mkx+uabb544caJyHBISsnbt2uTkZHcvcuONN1aNd+3a5WEkAAAAXF1URZKi1OwkfUZfLcSdnTidlszKtqLnO6dkmsUub3YPAAAAiOfF6MKFC6vGb7/9do8ePapxkZiYmKpxdna2h5EAAABwNWqkyoTu6oGxfpN7qY01NyaWOGV6ltXlY2NWtmVYNZYPAAAA9YtHxeiJEye2bdtWOe7UqdPPfvazn56jKFdeEtWyZcuqcV5enieRAAAAcFUL9ZfUOG1fsp7SWdXcefVoXqk9fr3ZY6GRnmvx5lEAAABckUfFaE5OTtVeSSNGjHClA72okJCQqnFRUZEnkQAAAFAPXB+kpA3QdozRk6Lcu1/NPmMnZ5j9PjXW5tOOAgAA4HI8KkZPnjxZNW7fvv1Fz3GlLW3cuHHVuKyszJNIAAAAqDe6hijzE7SvR+r9r3XvD/DfnLAHLTESlxnfnaIeBQAAwMV5VIyWlJRUjYOCgqp9nVOnTlWNg4ODPYkEAACAeqbftcq6kfr8BC062L16dGWe3XuRcf9q8xh/eQcAAMBPeFSMhoWFVY3PLzfP58oTo+e/VzQ8PNyTSAAAAKh/FJGkKHX3PXraAO26ADcmWrbMzflx23rHuRrLBwAAgKuQR8VoRERE1diT3eS//vrrqvF1113nSSQAAADUV36qpHRWc8b6pcZpwX5uTCwzZHqW1X6ec3qWVWHWWD4AAABcVTwqRtu3b6/reuU4IyOjaiOm87nyxOiiRYuqxv369fMkEgAAAOq3IF0m91IPjPV7opuqu3MzW1ghUzLNjunGrGyLfesBAADgUTHatGnT+Pj4ynFOTs6yZcuqcZE1a9Zs2LChctykSZO4uDhPIgEAAKAhCG8sM+O1nWP0pCjVrTePHiqxx683b/rE+Ooo5SgAAECD5lExKiLDhw+vGk+YMKGoqMit6Q6H46GHHqr6OGLEiKpHUAEAAIDL69RUmZ+gfXOnPijSvX2ZthTYCZ8bicuM7YXUowAAAA2Up8Xo+PHjQ0NDK8c5OTl33XXXmTNnzj/hMkvpjx8/Pnz48JycnB+jqOozzzzjYR4AAAA0NH2aK6uH6yuG6T1D3d62/oZFRnKGebCYehQAAKDB8bQYDQkJefrpp6s+rlq16oYbbvj4448ty7rMLKfT+d5778XGxp6/7VJSUlL37t09zAMAAICGaUhLZftofX6C1raJG/WoLZKea3VJN8avN0+U11w6AAAA1DleWLf+5JNPZmRkLF++vPLjwYMHk5KSIiMjR4wY0bt37xMnTlQedzgcX3311cGDB9euXbt8+fKTJ0+ef5H27du/8847nocBAABAg6UqkhSlDr9efXOXlZplnjnn6sRzlszKtv5xwPpND3VyTy2AdzsBAAA0AMpFt5J3V3Fx8aBBg7Zv31696SEhIWvWrOnZs6fnSVALwsPDCwsLRaSgoCAsLMxXMRwOR0VFRUREhK8CALgU27bz8/ODg4ODgoJ8nQXAhYqLi0tKSiIjI30dpMadqpA/7DBn7rTOmu5NbBmkPB+j/rKTqrm3Lh/wgvz8/MDAwODgYF8HAXChsrIyh8MRERGhaZqvswDwGk+X0ldq0qTJmjVr7rvvvmrM7dix44YNG2hFAQAA4EWh/pIap+1L1lM6u1dx5pXa49ebPRYY6bmXezcUAAAArnbeKUZFpEmTJnPnzv3oo486duzo4pTAwMCJEydu2bKlS5cu3ooBAAAAVLk+SEkboGXdrSdFuXffu+eMnZxh9vvUWJfPvkwAAAD1k9eK0Ur33nvvnj17Fi9ePHbs2Est0dJ1vW/fvi+88EJubu6f/vSnJk2aeDcDAAAAcL5uzZT5CdqKYXpsuHvL4zeesAcuMRKXGTtPU48CAADUN95/sbyqqnfeeeedd94pIgcPHvzhhx8KCwtPnTrl5+cXFhYWHh7evXt3XpoDAACAWjakpbKlpf5xrvV0pnWgyI2ic2WeHbPI+N+O6tRYLTKw5gICAACgVtXsjpvt2rVr165djX4FAAAA4CJFJClKvauN+sE+6/mt5vFyVycalszKtv6eY/26m/pMby3YryZTAgAAoFZ4eSk9AAAAUMf5qZLSWc1J9kuN05q4U3GWGjI9y2o/zzk9y6pwebN727ZN0+WzAQAAUFsoRgEAANAQXeMnk3up2Ul6SmdVd+emuOCsTMk0O6Ubc/Zbl1+Qf+zYsenTp7dp0yY0NHT8+PE7d+70LDIAAAC8iWIUAAAADVeLQCVtgLZzjJ4Upbq1MdMPJfa4NeZNnxirjl3Yjtq2vXLlyjFjxrRu3XrKlCmHDx8uKiqaNWtWz549hwwZsmDBAsMwvPgrAAAAoHooRgEAANDQdWqqzE/QNo7SB17n3rb1mSftW5caicu8ICUuAAAgAElEQVSMbwttETlz5syMGTO6dOmSmJi4cOFCwzBE1SX2Lul3v/gF2LadkZFxzz33tG3b9qWXXjp27FjN/DYAAABwiWLbbuzICYhIeHh4YWGhiBQUFISFhfkqhsPhqKioiIiI8FUAAJdi23Z+fn5wcHBQUJCvswC4UHFxcUlJSWRkpK+D1F0r8+yJm8zvTrl3k6yWnGiz4oX8Vf8sLy/78VDTSBn4Sxn4kIS0EBEpPSUb5sjqWXIip/Lnfn5+d91117Rp0zp06ODNXwBXs/z8/MDAwODgYF8HAXChsrIyh8MRERGhaZqvswDwmprdlR4AAAC4ugxpqXw7Wv8ox3o60zpa5mo9av3rqdxN//zxQ6dBcsuvJGaUaOdt7RQUKolPypAJsnulrH5XdnzudDrT09MPHTr0zTffePuXAAAAwJWxlB4AAAD4L6oi93dQ9yfrqXFa00YuTCg6LlsXiIj0HC4vZslvV8iNY/6rFa2iKNItUR5bIL/fJzf/r4hs2rRpy5YtXo0PAAAAl1CMAgAAABcRqMvkXuqBsX6Te6mNL79uct3fxDgniio//7O06OLS1UOvl5+9LoHNROTtt9/2QlwAAAC4iWIUAAAAuKQwf0mN0/Ym6Smd1YvvW2+Zsu59EZEewyS8rRuXbhQo8feJyL/+9a/KF7gDAACgNlGMAgAAAFfQ+holbYCWdbc+ovVPytGspVJ4SETklhS3r3vrI6Io5eXls2fP9jwkAAAA3EIxCgAAALikezPls9v05UP13mHn1aNr0kREwlpLt9vcvmJEtHQeLCLvvPOOZVneygkAAABXUIwCAAAAbri9lbJttD4/QWvXRJGTB2V3hojILb8S9fIvIr2EW8aLyIEDB1asWOHVmAAAALgCilEAAADAPYpIUpS6J0kfsi9NbEt0f+l/fzWv1XukNGspIu+88443IwIAAOBKKEYBAACAajHObfv0QxGRuHukSUQ1L6LqcvMvRWTJkiV5eXneCwcAAIAroBgFAAAAquPs2bPFxcUiIiEtPbpQs5YiYprmqVOnvJELAAAALqEYBQAAAKojODj4rrvuEhFZ/4EYFdW/0JpZItK7d+8ePXp4KRoAAACujGIUAAAAqKZHHnlERKT4pGxbXM1L5GbK91tFJGzoI6WG95IBAADgSihGAQAAgGoaPHhw9+7dRURWp1XzEpUTA0MyWiX3WmgsP2J7LRwAAAAui2IUAAAAqL7x48eLiOxfL0e+c3ty2WnZ8rGISL/7xT/oQJE9bLmRlGHmlVKPAgAA1Di9Ji5aVla2efPmDRs2HD58+PTp06dOnbJtu3///lOnTq2JrwMAAAB8Zdy4cc8++2xRUZGsmSX3vune5HUfyLkyURQZlFJ17ONc6/PD1lM91Wd6a414jAEAAKDGeLkY/fbbb19//fV58+adO3fugh81adLkp+dnZGSkpqZWjrt37/7nP//Zu3kAAACAGtWkSZP/+Z//effdd2Xj3+XuVySgqaszbVvWvS8i0iVBrut4/k/KDHlxm7Xoe/ud/lq/axVvRwYAAICIF5fSl5eXjx8/PiYmZu7cuT9tRS8lPj4+Kytr5cqVK1eufPPNN48dO+atPAAAAEDt+HELpooSWfmG2Jar0775hxzfLyLnPy56vh2n7AGfGfevNgvOeiUmAAAA/ot3itH8/Pw+ffrMmjXL3YmBgYE/3keKmKb5z3/+0yt5AAAAgFrTs2fPAQMGiIh8+rI83UmWvybFJy959tliWTNLpsbK3x4UEWnWUnqPuNS5tsjcHKtTunNWtsVrRwEAALzLC8VoUVHRHXfcsXPnzv+6rqp27dr19ttvb968+eWn33vvvVXjzz//3PM8AAAAQC177bXX2rRpIyJS+IMseFYmtZP3H5AD3/zXSUd3yz8myKQo+ejXkrdTRKRJc/n5DFGv8HqrUxUyfr05aImx8zTtKAAAgNd4oRh94okntm/fXvWxVatWb7zxxokTJ3bt2rV8+fKuXbtefnrHjh179uxZOf7666/Ly8s9jwQAAADUpr59+x44cOCTTz4ZOnSoqqpiVMg3/5DUgfJSnKx7XzLT5bUh8kJvWfWOlBeJSHx8fNoHcx9b8r0We6eLX7Eu345dZEzYaJY4a/I3AQAAaDA8LUazsrLmzp1b9XH48OE7dux4/PHHw8LCKo8oypXfFp+QkFA5OHv27PkdKwAAAHC10DRt1KhRy5Yt27dv3+TJk8PDw0VEDmfJnEdk1r2yb62ING7c+Be/+MW2bds2bNiQ8sB9bw0M3HynHtfc1e2VnJa8scvq/LHxca7LbzIFAADAJXhajM6cOdOyfrwtGzhw4IIFC5o1a+buRWJiYqrGe/fu9TASAAAA4EPt27dPTU09dOjQBx98EBcXV3mwU6dOM2bMOHbs2Jw5c86/+40NV74ZpacN0IL9XL1+XqmdlGGO/NL4vpiV9QAAANV3hfcZXZ5t28uXL//xQro+a9Ysf3//C85x5YnR7t27V4337dvnSSQAAACgLggICHjggQceeOCBLVu2FBUVDR48+FI3xqoiKZ3Vka3VyZvNuTmuPgq65JD91VHjqZ7qM721Rt7ZURUAAKBh8egeau/evceOHascJyQkdOrUqXrXqVp3LyKFhYWeRAIAAADqlBtvvPHWW2+94uMCkYEy5xbtq+F65xBXV9aXGfLiNqvHAiPjKI+OAgAAuM2jYvTo0aNV44EDB1b7OiEhIVXjoqIiTyIBAAAAV6/Bkcr20foLsWpjzdUp+xx24ufG/avNE2xiCgAA4A6PitGTJ09WjSMjIy96jitL6Q3DqBpXvbEUAAAAaIAaazI1VvtujH57K1cfHbVF5uZYnT92ztxpWTw8CgAA4BqPilFV/c900zSrfZ3zl8//uH0nAAAA0IBFByvLh+qf3qa1CnK1Hj1dIU9+Y/b5xNhSQDkKAABwZR4VoxEREVXjEydOXPQcV54Y3bNnT9X4/PeNAgAAAA3ZyNbqzjH6E91UzdV2VLYW2PGfGhM2msXOmkwGAABw9fNaMbp58+ZqX2fNmjVV43bt2nkSCQAAAKhPmjaSmfHalrv0myJcLUcNS97YZXVON+bs5y1VAAAAl+RRMdqxY8eqBzy/+uorh8Px03Ou+MRoeXn53//+96qPgwcP9iQSAAAAUP/0DlM2jNQ/HKSF+bs65WiZPW6NmfC5sdfBynoAAICL8KgY1TQtMTGxclxcXDxz5sxqXGTmzJnHjx+vHLdr165t27aeRAIAAADqJVWR+zuoO+/x+0W06vLCevnqqB2zyJi6zayo/o4AAAAA9ZNHxaiIjB07tmr8yiuvbNiw4YITLv/E6Nq1a59//vmqjw8//LCHeQAAAIB67LoAmXOLtmq43jXE1Xa03JAXt1k9Fhor8nh0FAAA4D88LUbvvPPOm266qXLsdDpvv/32xYsXuzh3zpw5Q4cOdTp/fC18aGjoY4895mEeAAAAoN4bFKl8e7c+o68WpLs6Zb/Dvm2ZkZxhHi+vyWQAAABXD0+LUUVR/vjHP+r6j3dkJSUlo0ePvuOOOz7//PNz587JxZ4YLS0tXbRoUb9+/caNG1de/p/7smnTpjVp0sTDPAAAAEBD4KfKhO7qjjH6sOtdX1gv6blW53TnzJ2WycOjAACgwVNs2wv3RLNmzRo/fvwFBwMDAzt37nz48OGTJ0+KSHR09E033XTgwIHt27dXVFRccPK4ceNmz57teRLUgvDw8MLCQhEpKCio2n2r9jkcjoqKioiICF8FAHAptm3n5+cHBwcHBQX5OguACxUXF5eUlERGRvo6CLzps0PWrzdYh0rcuLGPDVfe6a/1ae5GqYpakJ+fHxgYGBwc7OsgAC5UVlbmcDgiIiI0TfN1FgBe4/Lam8tKSUkpLCx87rnnLMuqOlhWVrZt27aqjzk5OTk5ORedPnLkyHfffdcrSQAAAICGZmRr9dYW6ms7zFe/tZzWlc8XkW0FdvynxkOd1Ndu0oL9ajgfAABAneTpUvoqTz/99PLly6+99lq3ZimK8vzzzy9evLhx48beSgIAAAA0NEG6TI3VMu/S4yNcfQjUsmVWttU53Tlnv2tlKgAAQP3itWJURBITE/fs2fPqq6+6sjhLVdWkpKSsrKwXX3xRVb0ZAwAAAGiYeoUqX4/SPxykhbv81MGxMhm3xrx1qZF9hteOAgCAhsU77xi9QEVFxerVq9evX79u3brvv//+1KlTxcXFiqKEh4eHhYX16tUrISEhMTGxbdu2Xv9q1ALeMQrg8njHKFCX8Y7RBuJUhTydab6Xbbl+r++nysQe6tRYrTFvz/Md3jEK1Fm8YxSol7zzjtEL+Pv733777bfffnvVEafTqev6T3eoBwAAAOB1of6SNkC7L1p95Gtz12mX2lGnJdOzrI9z7bf6aUNbcd8OAADqv1paw+7n50crCgAAANSmm69Tto/WZ/TVrnF5e6UDRfaw5cbIL43DpaysBwAA9Rwv9wQAAADqLT9VJnRXs+/R74ly485/ySG7S7oxPcsyaUcBAED95WkxWlJScvr06dOnT5eUlFT7IqWlpaf/zcM8AAAAAC7QMkhJT9A+vU1rc42rq7hKDZmSad642PjmBOUoAAConzwtRkePHh0aGhoaGjpu3LhqX+SBBx4I/bea2AwKAAAAwMjW6u579Bdi1UYu/yPg20K736fG/avNwoqaTAYAAOALLKUHAAAAGopAXabGat+N0RNauProqC0yN8fq9rFzzn439rgHAACo+yhGAQAAgIalY1NlxR36h4O05o1dnXK8XMatMW9ZYuw+QzsKAADqCYpRAAAAoMFRRO7voO5N8nuim6q6+vCorM23ey80Jmw0S5w1GQ4AAKBW1Ili1On88cZKVVVFcfm+DAAAAIAHmvnLzHht0536jeGu3oQ7LXljl9VrofH5YR4dBQAAV7c6UYzm5+dXDq655hrfJgEAAAAamhvDlY2j9Bl9tSZ+rk45WGwP/8IY+aVxqIR6FAAAXK3qRDF65MiRykFwcLBvkwAAAAANkK7KhO5qdpL+i2g3/oGw5JDd5WNj6jbznFVz0QAAAGqK74vRdevW5eXlVY6jo6N9GwYAAABosFoEKnNu0Zbcrkc1cXVlfZkhL26z4hYbG47z6CgAALjK6C6ed+7cudLS0p8er3o96Llz506fPu3i1WzbPnnyZEFBwddff/3HP/6x6nhMTIyLVwAAAABQE4Zfr9w6Rp++w0zNsipMl6bsOGUP+My4L1r9U183droHAADwLVeL0c8+++yee+65zAlLliwJDQ31MM3lvwIAAABALQjQZWqsdm979bEN5oo8lx4FtUXm5lhLD1vPx2iPu7PTPQAAgK/4fil9lQEDBsTHx/s6BQAAAAARkQ5NlS+H6fMTtGsDXJ1yqkKe/MYctNTYeZqV9QAAoK6rK8Vop06d5s6dqyj8ZRkAAACoQ5Ki1Owkvye6qZrLt+rr8+2YRcaEjWaxsyaTAQAAeMb3xWjnzp1TU1O3bNnStm1bX2cBAAAAcKGQRjIzXtt8p96nuavlqGHJG7usLh8bc/azYz0AAKijXH3HaGxsbFpa2k+Pz5gxY8+ePSISExPzq1/9ysWrBQYGNmnSJDQ0tHv37s2aNXNxFgAAAABfiQ1XNo7S/7rXemqTWeTao6B5pfa4NWZ6rvVmvNbW5Z3uAQAAaoerxWhUVFRKSspPj6enp1cWo5c6AQAAAED9oCqS0lkd2VqdvNmcm+Pqo6BLDtkZR41JPdWne2n+Wo0GBAAAcIPvl9IDAAAAuIpEBsqcW7SvhuudQ1x9CLTckBe3WT0XGitd2+MeAACgFrj6xOilDB8+vF27diISExPjjTwAAAAArgKDI5Udd+uvf2dN3WaeNV2ass9h37bMuC9a/eNNWoTLO90DAADUEE+L0SeffNIrOQAAAABcXfxUmdxLvSdK+fUGc/kRlx4FtUXm5lifHbKmxmqPd1NV3jsKAAB8h6X0AAAAAKqvfbCybKj+6W3a9UGu1pxnzsmT35h9PjEyT7KyHgAA+AzFKAAAAABPjWyt7knSJ/dSNZcfAt1aYPf7zJiw0dU97gEAALyLYhQAAACAFwTpkhqnbblL7xvhajlqWPLGLqtzunPOflf3uAcAAPAWitF65fTp00ePHi0tLfV1EAAAADRQvcOUDaP0DwdpYf6uTjlWJuPWmAmfG3sdrKwHAAC1x9PNl15++eXvvvvOK1EqzZs3T1F4B7sb8vLyFi1a9Mknn2zZsuXMmTOVB9u2bTt06NDHH3+8a9euvo0HAACAhkYRub+Densr9alN5kc5lotl51dH7ZhFxqSe6tO9NH+tZhMCAACIiGLbHv1VNjExceXKld5KIyKWZVGMuu63v/3tn//8Z8u6+MojPz+/1NTUiRMnevdLw8PDCwsLRaSgoCAsLMy7F3edw+GoqKiIiIjwVQAAl2Lbdn5+fnBwcFBQkK+zALhQcXFxSUlJZGSkr4OgoVibbz+y3tx9xo1/dEQHK3/pr93WsiH+oyA/Pz8wMDA4ONjXQQBcqKyszOFwREREaBp/ugHqD0+fGIVvHTlypLJK7tevX0JCQqdOnQICAnJycpYuXbpmzRqn0/mb3/wmODj4oYce8nVSAAAANEQDr1O+vVt/e7f13FazxLVNlnKK7NuXGSNaK+/011q5vNM9AACAuyhGr27+/v5PPPHEhAkT2rVrd/7xp556KjU19emnnxaRSZMm3XvvvQEBAT7KCAAAgAbNT5UJ3dWRbZTHN5ifH3b10dElh+x1+caLsdqvu7mx0z0AAIDrPC1GY2NjXT/Z6XSePn36yJEjp06dqjqoKMqgQYN0nYq2Ot57771GjRpd9EdTpkxZtmzZ2rVrT58+vWrVqjvuuKOWswEAAABV2jVRlt6uf3bI+vUG61CJS/Wo45w8+Y354X7rnf7aTS7vdA8AAOAiT+vI6dOnuzvFtu3s7OyPPvro3XffPXXqlG3biqL885//DA8P9zBMA3SpVrTSHXfcsXbtWhE5ePBgbSUCAAAALmlkazWhhfqHHebvv7XOXfw9+RfaXmj3+8y4t706I14LdXmnewAAgCtSa/8rFUXp0qXLtGnTdu3adeutt4rIqlWr+vTpk5ubW/th6jdV/fG/7+X7UwAAAKDWBOoyNVbLvEvvd62rD4FatszNsbp97Jyz39U97gEAAK7IB8Voleuuu27p0qU333yziOTm5o4YMaK8vNyHeeqf9evXVw66d+/u2yQAAADA+XqGKutH6h8O0po3dnVKfrmMW2PeutTY484e9wAAAJfiy2JURBo3bvzhhx/6+/uLyO7du6dNm+bbPPXJd9999/nnn4tI+/bt+/bt6+s4AAAAwH9RRO7voGYn+T3RTVVdfoPo6mN2r4XGlEzzrFmT4QAAQAPg42JURKKiosaOHVs5fvPNN0tLS32bp344e/bsgw8+aBiGiPz+97+vWlMPAAAA1Cmh/jIzXlszXO/ezNVy1GnJ9Cyr+wJjmct73AMAAPxUnejLhg4dWjkoKir64osvfBumHrBtOyUlZevWrSJy3333JSUl+ToRAAAAcDkDrlO2j9Zn9NWa+Lk65UCRfccXxsgvjcOl1KMAAKA6PN2V3iuio6OrxpmZmXfffbcPw9SO4uLiNm3aVGPi8ePH/fyucLc4ceLEuXPnikh8fPy7775bnXwAAABA7dJVmdBdvSdKeTrTmpvj2o71IksO2auOGr+L0X7TQ9XrxFMfAADgqlEnitGmTZtWjQ8fPuzDJLXGsqzTp09XY6JtX+Hv4c8+++yMGTNEpGfPnkuWLAkKCqpOPgAAAMAXWgYpc27RktopT2y0vi926VHQUkOmZJr/PGC9M0CLj3D5ZaUAAKDBqxPFaGFhYdX47NmzPkxSawICAlJTU6sxUdcv95/s5ZdffvXVV0WkS5cuK1asCA0NrWY+AAAAwHdGtlaHtFCn7zBTs6wK1zZZyjpl9//UuC9afb2vFu7yTvcAAKAhqxPF6IYNG6rGzZs392GSWtOoUaPJkyd795qvvfba888/LyIdO3bMyMiIiIjw7vUBAACAWhOgy9RY7X/aq49tMFfmufToqC0yN8daetj6fZz2cGfXN7oHAAANlO+L0XPnzqWlpVV9bNGihQ/DVHE4HJZliUijRo2qsRp9//79mzZtys/PVxTluuuu69evX1RUVA3E/I+ZM2dOmjRJRNq0afPll19GRkbW6NcBAAAAtaBjU+XLYfrc/dZTm80T5S5NOVUh49ebf8+x3u6vdXN5p3sAANAA+bgYNQzjoYce2r9/f9WRwYMH+yTJ6dOnt27dun79+q1bt27duvXYsWOVx5OSkubPn+/6db755puJEydu3Ljx/IOKogwYMGDmzJkxMTHeDP1v77333v/93/+JyPXXX79q1arqbesEAAAA1EGKyP0d1FFt1Be2mm/ttizXtqBfm2/HLDIe6aJOu1G7xuWd7gEAQIPis2K0vLz8s88+mzZt2o4dO6oOtmrVqm/fvrWcpKKiol27dkePHvX8Um+99db//d//GYZxwXHbttetW9e3b9933333wQcf9PyLzvf+++//6le/sm27VatWq1atqulHUwEAAIDaF9JIZsZr93dQH/nazDzpUjnqtOSNXdbC7+0ZfdUxUexYDwAALuRpMfryyy9/9913bk0pLS3Ny8vbvXu30+m84EfTpk27/OZCNcGyLK+0oosXL54wYULlAvyQkJCUlJS4uDjLsjZt2vTXv/61qKjo3LlzKSkprVq1SkxM9PzrKv3tb397+OGHbdsOCwtbsGBBaGjoRTe79/f3DwwM9NaXAgAAAD5xQ7iyYaT+l93W81vNogv/MXFxR0rtezLMEa2tt/ppba5hZT0AAPgPT1vItWvXrly50itR7rvvvvvuu88rl6qeFi1a3PBvkyZN2rNnj+tzi4uLH3744cpWNDo6esWKFW3btq38UXJy8q9+9avExMQffvjBMIz//d//3b9/f+PG3tkp8+2337ZtW0QKCwtvuummS532+OOPv/HGG175RgAAAMCHdFUmdFeT26mTN5tzcywXZy05ZH911Hiqp/pMb60RD48CAAAREakTNwWqqj7xxBMffPCBqvog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aWUb9N7xwqeREOJf//qXU4oEAMCJ9AajQoiQkJB169Y1adKkxLtt27Zdu3ZtgwYNSnu8+KqKyMhI/fUAAAAAAMpncKAhcZw8J1RyKz4rLmG+EEJ4BYh7x5VtOLmeCH9SCLFixYpr1645rUoAAJzBCcGoEKJ///4nT56MiYnp06ePdW21j49Pv3795s6de/To0c6dO5f24NGjR+Pj420fhw8f7pR6AAAAAADlU88oZnYzJo6TI5oYhBAi+6Y4skoIIfpPES5uZR5u4FRhlIqKir766isnFwoAgD569xjV6caNG1euXLF97N69O7t1VH/sMQrg7thjFKjO2GMUqM6qdo/REq25ZJn053fMS98UBqP4f6dEQMvyjPLpWJG4Nigo6MKFCy4udz/jCaim2GMUqJXkqv36Ro0aNWrUqGprAAAAAACUaEQTzWff12YhxD3Dy5mKCiEGTROJa69duxYXFzd27FgnlgcAgB7OWUoPAAAAAKh91q1bd/nSRSGEGDS1/KMEDxENWwsh5s+f76S6AABwAoJRAAAAAEDJ/ntiUsPW5R/FYLTONr169aoTagIAwEkIRgEAAAAAJYuKivLw8BBCiO1fln+Um+fEqQQhxOTJk51TFgAAzlCBe4zm5uYeO3bs6tWrZrM5MzPT09PT19fX39//nnvuady4ccV9LwAAAADAKfz8/KKior799lux6zsxerZwLdfJilv/LTSLq6vrk08+6eT6AADQwfnB6IULF7766qs1a9acOHFCUZQS+zRv3nzw4MFTpkwZMGCA0wsAAAAAADjL9OnTv/32W5GXKQ78JMKfKvPzRfli90IhRO9RDzds2ND59QEAUF7OXEp/5cqV8ePHt2nT5p133klMTCwtFRVCXLp06bvvvhs4cGCXLl02b97sxBoAAAAAAE4UFhYWEhIihBBbPi/P8/t+FLnpQohtHaZO26kWWZxaHAAAOjgtGP3222+Dg4NXrFhhsZThB92JEyciIyOfeeaZgoICZ1UCAAAAAHCi6dOnCyHE5URxbl+ZH962QAghmnUTrcIWnLLcv065nufk8gAAKB/nBKPvv//+lClTsrKyyvGspmlfffXV8OHDc3JynFIMAAAAAMCJHnnkkQYNGgghRML8sj15fr+4cEgIIe57znphR7LWfWXR1uuacysEAKAcnBCMfvPNN6+++qqm/c8PtubN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7588edLcXgI27ezZs2PGjGnXrl2TJk0CAgI6deo0derUnTt3yreFpqmoqJC/JmQABWrRpk2bpIKTk9Prr79eK23u379/2LBhrVq18vLyCgoK6t69+9y5cw8fPmzCNDfgSSd/OhVChIeHV3r3zp07paWlUln/6NayZUu5bOzolpCQIJcNjKLRaBITE42KAsAEuudvAxaRlpYm71zWokULPTW9vLxcXV2lbe/v3r1rVBT5m7oaowQEBMhlY6MA9ikmJua3336TyhMnTjS/wZ07d8rlnJycP/7448SJEytXruzRo8eGDRvat29vfgjA9pw+ffr06dNS+eHDhykpKZcvX96wYUNgYOAXX3wxevRo05rNyMgoKiqSyvoHUFdXVy8vr4cPHwoGUKAmBQUFctZm9OjR3t7etdLs/v375XJOTs7du3fPnj27evXq5557bt26dfKUNMDmPXr06PPPP5fKYWFh8sPlZSkpKXK5efPmepoy5/bQtJvQ5OTkTp06GRUIgLGYMQorov18T3d3d/2V5QraZxkiPz/fwCjOzs7ys3eNjQLYoUePHk2bNk2aiuLr67tgwYK6i3X69OmuXbv+/PPPdRcCsD1379595ZVXPvroI9NOr59hGrA3kZGR8qfTenjs0tWrV1966aXNmzfXdSDASixYsEBe9r5ixYqqFbRvDz08PPQ0pf2u9lmGMC0KYyhQD0iMwopo/993dnbWX7lhw4ZVz7KeKIC9qaioGDdunLQbhkKhWL9+vZubmzkNhoWFLV++/MyZM5mZmWq1+tGjR9euXfvyyy/lfTaKiopef/31uLi4Wug9YCv8/f3nz59/5MiR+/fvl5aWFhcX3717d8eOHX369JHrLF26dP369SY0zgAK1AV5Hb2/v3/VRb4maNeu3ccff3zixAmVSlVWVlZQUJCYmPjNN9/IE+XKysqmTp0aHR1tfizAym3evHnjxo1Sefr06REREVXrGD66yUObqMubUHOiADABS+lhRcrLy+Vydc/pk8kPFpRX39dpFHnfGQA6zZkzR56/+d577w0fPtyc1s6cOaO9jEgI4ebm1r59+/bt20+bNm3WrFn/+te/hBCFhYVz5syRF+8Ddm758uXNmzdXKv/0tXdAQMDYsWPHjh27YcOGd955R61WCyHef//9V1991cvLy6j262eYBuxKYmLimTNnpPLkyZMd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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -557,11 +557,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/convergence_study/343a7380.svg b/dev/examples/convergence_study/343a7380.svg new file mode 100644 index 0000000000..adfc008830 --- /dev/null +++ b/dev/examples/convergence_study/343a7380.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/convergence_study/73e993bc.svg b/dev/examples/convergence_study/73e993bc.svg deleted file mode 100644 index 78d817b37f..0000000000 --- a/dev/examples/convergence_study/73e993bc.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev/examples/convergence_study/90c4acb3.svg b/dev/examples/convergence_study/90c4acb3.svg new file mode 100644 index 0000000000..21a751614a --- /dev/null +++ b/dev/examples/convergence_study/90c4acb3.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/convergence_study/965a88e4.svg b/dev/examples/convergence_study/965a88e4.svg deleted file mode 100644 index 349a8a01ba..0000000000 --- a/dev/examples/convergence_study/965a88e4.svg +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev/examples/convergence_study/index.html b/dev/examples/convergence_study/index.html index 7511d9b4a0..ccab5c36b6 100644 --- a/dev/examples/convergence_study/index.html +++ b/dev/examples/convergence_study/index.html @@ -1,5 +1,5 @@ -Performing a convergence study · DFTK.jl

Performing a convergence study

This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.

Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.

This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of $k$-points in each dimension of the Brillouin zone.

As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:

using DFTK
+Performing a convergence study · DFTK.jl

Performing a convergence study

This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.

Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.

This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of $k$-points in each dimension of the Brillouin zone.

As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:

using DFTK
 using LinearAlgebra
 using Statistics
 
@@ -11,7 +11,7 @@
     model  = model_LDA(lattice, atoms, position; temperature=1e-2)
     basis  = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))
     println("nkpt = $nkpt Ecut = $Ecut")
-    self_consistent_field(basis; is_converged=DFTK.ScfConvergenceEnergy(tol))
+    self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))
 end;

Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.

tol   = 1e-2      # Tolerance to which we target to converge
 nkpts = 1:7       # K-point range checked for convergence
 Ecuts = 10:2:24;  # Energy cutoff range checked for convergence

As the first step we converge in the number of $k$-points employed in each dimension of the Brillouin zone …

function converge_kgrid(nkpts; Ecut, tol)
@@ -23,7 +23,7 @@
 result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)
 nkpt_conv = result.nkpt_conv
5

… and plot the obtained convergence:

using Plots
 plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,
-     xlabel="k-grid", ylabel="energy absolute error")
Example block output

We continue to do the convergence in Ecut using the suggested $k$-point grid.

function converge_Ecut(Ecuts; nkpt, tol)
+     xlabel="k-grid", ylabel="energy absolute error")
Example block output

We continue to do the convergence in Ecut using the suggested $k$-point grid.

function converge_Ecut(Ecuts; nkpt, tol)
     energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]
     errors = abs.(energies[1:end-1] .- energies[end])
     iconv = findfirst(errors .< tol)
@@ -31,7 +31,7 @@
 end
 result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)
 Ecut_conv = result.Ecut_conv
18

… and plot it:

plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,
-     xlabel="Ecut", ylabel="energy absolute error")
Example block output

A more realistic example.

Repeating the above exercise for more realistic settings, namely …

tol   = 1e-4  # Tolerance to which we target to converge
+     xlabel="Ecut", ylabel="energy absolute error")
Example block output

A more realistic example.

Repeating the above exercise for more realistic settings, namely …

tol   = 1e-4  # Tolerance to which we target to converge
 nkpts = 1:20  # K-point range checked for convergence
 Ecuts = 20:1:50;

…one obtains the following two plots for the convergence in kpoints and Ecut.

-
+
diff --git a/dev/examples/custom_potential.ipynb b/dev/examples/custom_potential.ipynb index 0a1be91ada..34b06fa7ab 100644 --- a/dev/examples/custom_potential.ipynb +++ b/dev/examples/custom_potential.ipynb @@ -80,9 +80,9 @@ "function DFTK.local_potential_real(el::CustomPotential, r::Real)\n", " -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\n", "end\n", - "function DFTK.local_potential_fourier(el::CustomPotential, q::Real)\n", - " # = ∫ V(r) exp(-ix⋅q) dx\n", - " -el.α * exp(- (q * el.L)^2 / 2)\n", + "function DFTK.local_potential_fourier(el::CustomPotential, p::Real)\n", + " # = ∫ V(r) exp(-ix⋅p) dx\n", + " -el.α * exp(- (p * el.L)^2 / 2)\n", "end" ], "metadata": {}, @@ -177,20 +177,24 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -0.143552386855 -0.42 8.0 \n", - " 2 -0.156032480939 -1.90 -1.10 1.0 1.13ms\n", - " 3 -0.156769338721 -3.13 -1.56 1.0 814μs\n", - " 4 -0.157046217004 -3.56 -2.33 1.0 777μs\n", - " 5 -0.157055865572 -5.02 -3.08 1.0 807μs\n", - " 6 -0.157056359508 -6.31 -3.55 1.0 816μs\n", - " 7 -0.157056405240 -7.34 -4.15 1.0 820μs\n", - " 8 -0.157056406893 -8.78 -5.26 1.0 801μs\n" + " 1 -0.143664226223 -0.42 8.0 212ms\n", + " 2 -0.156043130019 -1.91 -1.10 1.0 71.6ms\n", + " 3 -0.156737452222 -3.16 -1.55 2.0 1.23ms\n", + " 4 -0.156781307404 -4.36 -1.73 1.0 862μs\n", + " 5 -0.156890309854 -3.96 -1.84 1.0 843μs\n", + " 6 -0.157056316153 -3.78 -3.52 1.0 768μs\n", + " 7 -0.157056397582 -7.09 -3.74 1.0 752μs\n", + " 8 -0.157056400109 -8.60 -3.83 1.0 753μs\n", + " 9 -0.157056406625 -8.19 -4.41 1.0 797μs\n", + " 10 -0.157056406825 -9.70 -4.73 1.0 763μs\n", + " 11 -0.157056406895 -10.16 -4.96 1.0 764μs\n", + " 12 -0.157056406907 -10.92 -5.11 1.0 779μs\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.0380302 \n AtomicLocal -0.3163478\n LocalNonlinearity 0.1212611 \n\n total -0.157056406893" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.0380289 \n AtomicLocal -0.3163457\n LocalNonlinearity 0.1212604 \n\n total -0.157056406907" }, "metadata": {}, "execution_count": 8 @@ -218,7 +222,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-0.055685413761324756, -0.0, -0.0]\n [0.0556855044912149, -0.0, -0.0]" + "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-0.055678197378791955, -0.0, -0.0]\n [0.05568476767300656, -0.0, -0.0]" }, "metadata": {}, "execution_count": 9 @@ -259,7 +263,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "101-element Vector{ComplexF64}:\n -0.2715054450945543 - 0.9340190964284184im\n -0.027904558168437437 - 0.09599262779193538im\n 0.033061868702614614 + 0.11373543250414633im\n 0.014362217584183004 + 0.049408976152639734im\n -0.0025062045515467195 - 0.008623223737086783im\n -0.003813785641703323 - 0.013120498652299226im\n -0.0005500780972454794 - 0.0018925277363155235im\n 0.0006120760144623291 + 0.0021061809898717827im\n 0.00026358798117479497 + 0.0009070029487703708im\n -4.013409653000503e-5 - 0.00013817728980774593im\n ⋮\n -4.0157110445499475e-5 - 0.0001381441155806706im\n 0.0002637067747691917 + 0.0009069915333201117im\n 0.0006122902300310882 + 0.00210604188527811im\n -0.0005500759609066012 - 0.0018924598008525067im\n -0.003814149387291354 - 0.013120353480171494im\n -0.0025067105867988943 - 0.008622838831402148im\n 0.014362743942543724 + 0.04940859717394782im\n 0.03306060295204654 + 0.11373572647515078im\n -0.02790283322539751 - 0.09599312294743619im" + "text/plain": "101-element Vector{ComplexF64}:\n 0.9173954796780652 + 0.3232558900986459im\n 0.09428127713634026 + 0.03322187324383205im\n -0.11171089241730497 - 0.0393614076742952im\n -0.04852771676684775 - 0.017099595080445104im\n 0.008468791550932154 + 0.0029835509394295565im\n 0.012886563402724305 + 0.004540855217273232im\n 0.0018592181499283743 + 0.0006553228774776786im\n -0.002068336396149828 - 0.0007288634835526432im\n -0.0008908720681959406 - 0.0003139525055974607im\n 0.00013560700584946668 + 4.7791865300495526e-5im\n ⋮\n 0.00013561264227944086 + 4.777582635910549e-5im\n -0.0008908985764338612 - 0.0003138768996382145im\n -0.002068373428365523 - 0.0007287585312374101im\n 0.0018593457760019173 + 0.0006549600002521732im\n 0.01288663362669622 + 0.004540656380836485im\n 0.008468456582136569 + 0.0029845025358368254im\n -0.048527867315212685 - 0.01709916707705043im\n -0.11171005319006182 - 0.039363785773872687im\n 0.09428169943314105 + 0.033220674342752186im" }, "metadata": {}, "execution_count": 11 @@ -286,114 +290,114 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=4}", - "image/png": "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77333sqVK+/evUs0rq2t/eijj1599dUPP/ywqanJupEbN26sWrVqzZo1EomEGGsbIbR///60tLSAgACE0E8//URku4KCArVaXV9ff/DgQYQQjUbLzc3dvn27i181AIAgiOCpapyVCNV1OkE4XBd1JEiETnHixInPPvsMISSRSJYsWfLKK69ERUUVFRU98cQTc+fO9fX1lcvlEydONBqNCKGjR48qFIrExMSmpqbk5GRivLTS0tIJEyZwudzAwMAnn3ySGGsbIVRYWDhx4kRieceOHadOnUIIvfTSSwqFory8fPXq1cSfJk6cWFhY6PoXDgBACAkieao6LW5xynDHqjodHxKhQ3nsybV8/0aTrNE1+6Kx2MHzVyL6/X9VqFSqPXv2hISETJs2TSQS/fe//01PT8dx/JtvviktLU1MTFy4cCHRMjc3t6KiorCw8KmnntqwYcOCBQtee+01hJBQKLSWj5aWltrS+xgbG1tVVaXVank8OGAAcDUml8H2YWqbDZjQ8TPIq2u1wpFOvEnRC3lsIhSMn2FRumi6WhqX/6AsiBASiUTEWKBCoZBGow0dOhQhRKPRhEJha2srQuj06dMvvfSSTqcTCAR3794dO3YsQqi8vDwzM5PYQlJSknVrarUaw7AeQyJG61YqlZAIASCFIAJT1WidkQhVtdoBT/TruR2wmccmQpY4GomjyY4CIYSIOSi6PqTRaDiOI4SeffbZTz75ZPLkyQihnJwcYkgaf3//trZ79+QqFArr00NCQmQyGbHM5XJ1ut8r0zqe/7W0tDCZzMDAQCe9KABA93wieUqJJnSEv2M3q1cYEY44ASzHbtbLQR8h+VpaWogpJiQSyY8//kisfOyxx3bs2KFSqXAc37Rpk7VxamrqtWvXiOWkpKTCwkKioxEh9O233yYmJhLL169fT05OZjI99ocOABTnpHoZ5V2tT1TP14RAr0AiJN/y5csfeeSRqVOnTp8+feTIkcTK5557LiEhYcCAAQMHDoyIiLCe6uXk5FirYBYtWhQQEDBw4ECtVpuWlnb79u233nqL+NPRo0dh0BkASCQI46ob9BaTg+tlVDUaQST0dzgaTjFhYWG1tbU2NtZoNCaTCcdxoVDY0NDgzLh6R6/XazQaHMdNJpNCobCul8lkFouFWG5razMYDMRyTU3N1atXDQaDWq3WarXW9gaDwWKxfPfdd0lJScQai8WSkJBQUlJibdPa2oph2LVr16xr2traYmJiZDKZ014fjuP4xo0bFy9e7NRdgO61t7eTHYJX6/H9v7yuUinROHan17fellcoHbtNN+XAzz9cOnMK6yjYDAbDz8/Pup64/4/g6+trXY6IiIiIiEAIsVj3Lv0bDIb58+ePHTtWJpNt3bp1w4YNxHoajbZt27YbN24QRTcIocDAQDqdHhQUZN1aSUnJe++913FfAADXI66OOvCeP9yCq2oduUFAgERIUSwWa+bMmWVlZRiGFRYWWqfhRQiNHj169OjRHRsvXbrUx8fH+jAtLc11gQIAHsAnkqes0Yoct0FNg57jz2LyYPYlB4NESFE0Gi07Ozs7O9uWxm+//baz4wEA9JYgEqs/0+rADSprtNBB6AxQLAMAAE7BF3P0CqNJbe65qW2UdzVQMuoMkAgBAMApaHSaTyTWfkfjqA2qarQ+cEboBHAajTDjAAAVGUlEQVRp1Fn0ev2uXbvKy8vj4uIWLlxorYIBAHgP3xisvVoTOMSn56Y9MestulYDXwyzLzkenBE6BY7jU6dOvXjx4vjx448dO5abm0t2RAAAEvj257ffVjtkU8oaLT+MS2M4bdp7L+axZ4Rv/7KuVil1zb44TM6mR/5Fp/3+q+KXX36pqan58ccf6XT6lClTwsPDKyoq4uLiXBMPAIAifKN4aqnOYsLpTHsTWHuV2m8A3yFRgU48NhH+NWGu0qByzb44DE7HLIgQunHjRmJiIp1ORwj5+PjExcXdunULEiEA3obOpmNCjqpG4xtjbw5rq1JHPBLikKhAJx6bCPsJHHj3Tq9pNBqV6vc0rFKpOt7nBwDwHr79+e3V9iZCiwlX1Wp9oqFk1Cmgj9BZfv755+rqaoTQ2bNniRl3yY4IAEAC3/5Y2217C0eVdzWYiMPgwDe2U3jsGSHpxowZk5OTw+Pxbt68uWPHjo4DqgEAvIdvDFa5vw634DR637sJ26CD0JkgETpLRETE999/X1VVFRUVxeVCxTMAXoolYLJ8mRqpnh/W9++B9ipN2ISgntuBPoETbSdiMpmDBg2CLAiAlwsYJJCX9712DzfjyhqNT3/oIHQWSIRO8fDDD+fk5JAdBQCAEgLiBYpyZZ+frqzR8kI5TC6Mte0scGnUKUaMGGHP0y0Wi9lsdshgNHq9nsPh2L8dAECf+Q7g3/pUYtZb+lbt0lal9rP77gvQDTgjdJYLFy5UVVV13+bnn3+ur6/vuv7gwYOPPfaY/TGYzWYul9ve3t7nLcjl8sLCQvsjAcCbMdh0nwisraqPQ8zIy5T+gwSODQl05JhEaLFYzp8/f/ToUYVC0U0zvV5fXFzc2urIeUkoa8OGDcePH+++zYoVK3799VfXxNM31dXVS5YsITsKANyef7xAfqsv3YQmtVnToPcbCGeETuSAS6NmszkrK0sikcTExMyfP//48eMPPfTQfVuuWLHigw8+yM/Pf+aZZ+zfL5WdOXPm+vXrbW1td+7cSU1Nzc7OVqvV27Ztu3nz5qBBg5YsWSIQCAoLC+/cubN3795z585Nnjx50qRJ992UUqncunVrZWXlkCFDFi9ezOPdG3v+u+++O378uE6nS09PnzNnjkql2rt375UrV1gs1tSpU6dOndpNeK+//npeXt7u3bsNBsMzzzxjvZB76dKl/fv3a7XaadOmZWRkIIS2bdsml8tfe+01hNCKFSswDLrrAeiLgEGCW/+uQUjc2yfKbir94vj2j9AGuuGAM8IjR4789ttvFy9e/M9//rNgwYKVK1fet9mVK1d++eWXxMRE+/dIfUKhMCAgIDIyMjk5OSoqymKxTJo06dq1a9nZ2Tdu3JgwYYLZbA4PDxcIBAMGDEhOThaL7394mEymsWPH/vbbb9nZ2RcvXpwyZQqO4wihFStW/POf/0xLS8vKyqqsrEQI1dfXNzU1zZgxY/z48cuWLdu/f3834a1du3b+/PljxowZOnRoZmbm9evXEUKnT5/OzMwcNGjQuHHjFi5cmJ+fjxCKj49ns9nJycnJyclMJvQoA9BHfDGXmD6it0+U3Wh3yOQVoBsO+Go7dOjQzJkziTOV3Nzchx56yGQydfrSNBgM8+bNKygoWLhwof17tEXZ7ruaBr1r9sXkMYa/EtPxbtm4uLiIiIikpCSidvTHH39saGg4e/Ysg8HIzMyMjY394YcfHnvsseDg4LS0tGnTpj1oy4cPHyamc6LRaFOmTImOjj516lRCQsL7779fVlY2YMAAhBDx9Li4uFWrVmm12sbGxiVLluzfv/+pp57qJuY33ngjKysLIVRTU7N58+Zdu3atW7fu1VdfXbBgAUKIy+UuX7583rx56enpH330EVTAAmAvGgoY5CO/pRKnBdr+JNyMKyrUA7L7OS8ugBySCGtra1NSUojlyMhIk8nU0NAQHh7esc0777yTlZWVkJDQ49b0ev13330XGHjvsxIeHj5q1KgHNTabzWbz/Wd/jp0dZjZYbH0N9qExaN2PGVFZWTl8+HAGg4EQYjAYiYmJFRUVtpTDVFZWJiUl0Wg0hBCbzR42bFh5eTmfz/f39yeyoJVUKp09e3Zzc3NERIRMJiP21Q3r/yIxMXHz5s0IoYqKipdffplYmZKSUl1dbTD08OuVqG7t8VUAJ+nm8w9coLfvv/9gvvQXWegoP9uf0lap5oaw6RgN/tFd2fj+0+l04iu0GzYlwmvXri1btqzr+vz8/KioKIPBYC30Jxb0+j+cil2/fv3QoUOXLl2yZV86ne7w4cPWnrCkpKRurqbq9XocxxkMBnHBsCOWD5M6M+H6+fl1LCOSy+X+/v62PNHf37/TEwMCAgIDA9vb2zuddr///vupqakffvghQmjfvn3r16/vfsvWUlKFQkEE03FfCoWCz+ez2ezuP0AWi6XT/xq4ksFggPefRL19/7EYluaATtmkZvvZegbSUtLmO4gH/+X7svH9Z7PZPXbr2PT/iI6OXrFiRdf1ISEhCCGRSNTS0kKsaW5uRgh16vH617/+FRYWtmrVKoSQRCI5cOCAj49Pdnb2fffl5+e3c+fOsLAwWwKj0WhsNpvBYPSY8F0vODhYIpEQyxMmTFi0aNHly5eTkpKuXr168eLFgoKCTm3uKz09/W9/+1tZWdngwYMvXLhw8+bNhx9+WCgUxsfHf/jhh//4xz8QQi0tLcHBwWq1Ojg4GCGk1Wq3b9/eY3jbt2/fsmWLXq8vKCgg5g3OyMjYsWPH9OnTmUzm1q1biWKZoKCg1tZWjUZz3zIZJpMJ5TMkMpvN8P6TqA/vf9BDfupbBv+Jto08jKP28to/zY/EMBid6j4c+Pm3qVjGz89v/P0QQaSlpZ04cYJo+fPPPycmJnYKbt68ednZ2TExMTExMRwOJyQkhPjK9mwLFiw4fPiwSCRaunRpeHj4zp07H3/88YSEhMzMzE8++SQqKgoh9PLLL2/ZskUoFK5du7bjc+l0OvETZuDAgVu3bk1PT09ISMjOzi4oKBCLxXQ6fd++fQcPHhw4cGBCQsKsWbOITX366acpKSmJiYnDhw8ntkOj0ZhM5n1/JTAYjGHDhg0YMCAyMvK5555DCL366qvEFde4uLiysrINGzYghCIjI/Py8gYNGhQYGCiXy538ngHg4UKS/JuvtNnYuK1KzeDQ+WLIgs6H200mk4lEomXLlu3atUskEu3bt49YP2bMmHXr1nVqnJqaumfPnm62FhYWVltba+OuNRqNyWTCcVwoFDY0NPQ+dpcym8319fVms7lvT7RYLJ3Wy2Syjq/aaDTevXuXuFzcPTqd3tzcrFAoZDJZpz8plcquK+9r48aNixcvtqUlcJL29nayQ/BqfXn/LXjRqlvqBp0tbW99Kqk73dLrXXgNB37+HXD7REBAQFFREZvN/vXXX/Pz863FiosWLRo3blynxkuWLPHamfnodDpxPte3J3Y9sQsICBAKhdaHTCYzMjKSzWbbuFk/P7+AgIBOKwUCQdeVAADHoKGQBN8WG04KTWqz/KYyNMWmYgJgJ8fcGRYZGblmzZpOK/Py8rq2/POf/+yQPQJ7rFmzhs+HgSoAIEFIsv+tPZKIKSHdl5o3FSsCh/gweTDQtivAWKPe6O9//7u1LhcA4EqCcB4nkNV8uYeTwoYLMtEouDbjIpAIAQDApSIfDZUcb8ItnW/6smr7TY1bkG9/uGzjIpAIAQDApfwG8Nl+DzwpxC347f9IozJCEeVuCvNYkAgBAMDVojKFNT/e/6RQ+ouMxWcGJ/RiABpgJ0iEAADgar79MV4w++7Rxk7rDUqT5KfmAdm9nqQC2MND5hPgcDgjR47scYBNr4WbcYsZZ7Do1ostuAW3GHEGm97nyy9tbW1z5851VIQAeJtBeRHXt9xm+TLDxt8bYMSkNld8JhGODOCFcsiNzdt4SCIsLi62Zx52b9B4SSH9pTVySgjbl6WW6qVnW2OfDOP36/ugFTQazc8Prt4A0EdMjDFkYfT1LbdNWovfAAzhqPLLuuDhflEZoWSH5nU8JBEGBwd7w7Bt9oiJQao0beX+OpxJCwkLGPK3eN9oe4fpUyqVDokNAO/E8WcNXRgtPSuT/NisbzMOeKJf4GCYepAEHpIIgS0E4bzE5QPJjgIA8DteKCdmJvQIkgyKZQAAAHg1SIQAAAC8GiRCAAAAXs29E+F3331XVlZGdhTeq6CgoKmpiewovNeGDRuMRiPZUXgpk8m0fv16sqPwXi0tLbt373bU1tw7ER49evTSpUtkR+G99u3bV1lZSXYU3mvLli0KhYLsKLyUUqncuHEj2VF4r6qqqs8//9xRW3PvRAgAAADYCRIhAAAArwaJEAAAgFej4fgD58QihUAgCA4OtnHU0ObmZh6PJxAInB0VuC+pVBoYGMjhwLiI5KipqQkPD6fT4ecsCSwWi0QiiYqKIjsQL2UwGFpaWvr169djy9zc3NWrV3ffhnKJsL6+XqfT2djYaDQyGAz4IiCLXq+HLEgieP/JBe8/uWx8/8ViMY/H674N5RIhAAAA4EpwLgUAAMCrQSIEAADg1SARAgAA8GqQCAEAAHg1t5mPsLm5effu3c3NzVOnTk1PT+/awGw27927t6SkJD4+/i9/+QuLxXJ9kJ6qubn58OHDN2/e9Pf3nz17dmxsbKcGFotl165d1odDhw4dM2aMa2P0ZCdPnqyoqCCWmUzmvHnzurapr6/Pz89XKBQzZswYO3asawP0cDt37uxYVNj1411RUXHy5EnrwxkzZoSGwizzdmlqaiouLpZIJBMmTIiLi7Our62tLSgoaG9vf+KJJ0aNGtX1iQaDYffu3ZWVlQkJCXl5eTbeU+AeZ4QajWb06NHl5eVRUVG5ublffvll1zZLlizZtm1bbGzsZ5999uyzz7o8Rk/2wgsv/PDDD2KxuKmpKSEh4dy5c50amEymhQsX3rp16/bt27dv325tbSUlTk+1Z8+eL7/8knhvq6uruzZQKBSpqal1dXXh4eHTp08/evSo64P0YNXV1bf/Z+nSpSUlJZ0anD9/ft26ddY2er2elDg9yaRJk95+++3XX3/9/Pnz1pUtLS0jRoxobm4Wi8WZmZnHjx/v+sQ5c+Z8+eWXsbGxmzZtWrZsma37w91Bfn7+iBEjLBYLjuNffPHFsGHDOjWQSqUcDkcikeA4LpPJuFxuVVUVCYF6KK1Wa11euHDhvHnzOjUgjnylUunauLzFM888s379+m4abNy4MT09nVjevn17WlqaS+LyOr/++iuPx5PL5Z3W79mzJysri5SQPJXZbMZxfOTIkXv27LGufP/99zMzM4nlTZs2WT/zVjdv3sQwrK2tDcfx6upqHo/X0tJiy+7c44zw9OnTkydPptFoCKHJkydfv35dLpd3bHD+/PmBAweGh4cjhAICApKSks6cOUNOrJ6Iy+Val3U63YOG8vnkk082b958+fJlV8XlRS5cuLBu3boDBw7cd96l06dPT5kyhViePHny+fPnYXomZ9i9e3dOTo6/v3/XP9XW1q5bty4/P7+5udn1gXme+17S7PQ5P3PmjMVi6dQgNTXV19cXIRQdHR0REVFUVGTT7uwO2BWkUmlISAixHBQUxGQypVLpgxoghIRCYX19vUtD9A7nz58/dOjQiy++2PVPkyZNam1tvXnzZnp6+rp161wfmweLjIwMCQmRyWRr1qxJTU3VaDSdGnT8/IeGhlosloaGBpeH6eG0Wu3+/fvv20Hr5+c3dOjQtra2Q4cOxcfHd712Chyi0+fcaDS2tLR0bNDQ0NAxEYSGhtqYCNyjWIbJZJpMJmLZbDabzWY2m92pgdlstj40Go2dGgD7lZeX5+Tk7Ny5c+DAgZ3+xGazf/rpJ2J5zpw5jzzyyOLFi/l8vstj9Exvv/22dSEpKSk/P/+FF17o2KDjAUIswOff4b7++uuAgIBx48Z1/dOMGTNmzJhBLC9atOitt946ePCga6PzCj1+zvucCNzjjDAsLMya2IkFsVjcqUFdXZ31YV1dnS2DsQLbVVRUTJo06b333ps9e3b3LUePHm0ymWpra10TmFdhsVipqald62U6HiB1dXUsFis4ONjl0Xm4/Pz8+fPnEx003RgzZszt27ddE5K36fQ5xzCs02XqPicC90iEWVlZhw8fJgbjPnjwYHp6OnG2cfXq1bt37yKExo8f39LSUlxcjBCqrKy8deuW9VIysN/du3cfffTRFStW5OXldVx/6dIl4mOn1WqtK48cOYJhWHR0tIuD9GDWt1epVJ48eXLIkCEIIYPBcOLECaJMKSsr69ChQ0S/4IEDB6ZOnWrj/C3ARtXV1WfOnJk7d651jUajOXHiBHFeYv0H4Th+9OjRoUOHkhOlp8vKyvrmm2+Ic74DBw5kZWUR6y9dukQkyEcfffTatWvEL8ULFy5oNJq0tDSbNu2QCh9nM5lMU6ZMSU5Onjt3blBQ0Llz54j16enpq1evJpY3btwoFovnzZsXERFhXQkcIiMjg8/nJ//P888/T6xPTEzcunUrjuM7d+4cMmTI008/nZGR4evr++mnn5Iar6cJDAzMysrKzc0Vi8WPP/640WjEcZw48u/cuYPjuE6nGzt27OjRo3Nzc4ODg69cuUJ2yJ7mjTfemDp1asc1t27dQgi1trbiOJ6RkTFp0qS8vLyHHnooNjb27t27JIXpOZYuXZqcnMzn86Ojo5OTk4nvfI1GM3LkyLFjxz711FOhoaGlpaVE42HDhm3fvp1YfvPNN6OioubNmycSiT7++GMbd+c2s0+YzeaTJ0+2tLSMHz9eJBIRK8vLy318fKwnv6WlpcQN9YmJieRF6oEqKiqUSqX1oY+PD3GL640bN0JCQohe6+Li4urqaj8/v5SUFLib2LHu3Llz9epVg8EQFxeXkJBArDQajVeuXElISCB6QYxG488//6xQKCZOnNixXgA4REVFha+vr/WbByGk0+muX7+enJzMYDBkMtnFixflcnlYWNjo0aNhNA/7VVVVKRQK68PY2FiiFpS4ENLe3j5p0qSgoCDir6WlpUKh0PqxLy4urqioGD58+ODBg23cndskQgAAAMAZ3KOPEAAAAHASSIQAAAC8GiRCAAAAXg0SIQAAAK8GiRAAAIBXg0QIAADAq0EiBAAA4NUgEQIAAPBqkAgBAAB4NUiEAAAAvBokQgAAAF7t/wEClnVXJFbieQAAAABJRU5ErkJggg==", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -422,11 +426,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/custom_potential/fc3355aa.svg b/dev/examples/custom_potential/fc3355aa.svg new file mode 100644 index 0000000000..1ae8b16b74 --- /dev/null +++ b/dev/examples/custom_potential/fc3355aa.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/custom_potential/index.html b/dev/examples/custom_potential/index.html index 9a70f4a401..be0087b126 100644 --- a/dev/examples/custom_potential/index.html +++ b/dev/examples/custom_potential/index.html @@ -1,14 +1,14 @@ -Custom potential · DFTK.jl

Custom potential

We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.

using DFTK
+Custom potential · DFTK.jl

Custom potential

We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.

using DFTK
 using LinearAlgebra

First, we define a new element which represents a nucleus generating a Gaussian potential.

struct CustomPotential <: DFTK.Element
     α  # Prefactor
     L  # Width of the Gaussian nucleus
 end

Some default values

CustomPotential() = CustomPotential(1.0, 0.5);

We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.

function DFTK.local_potential_real(el::CustomPotential, r::Real)
     -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)
 end
-function DFTK.local_potential_fourier(el::CustomPotential, q::Real)
-    # = ∫ V(r) exp(-ix⋅q) dx
-    -el.α * exp(- (q * el.L)^2 / 2)
+function DFTK.local_potential_fourier(el::CustomPotential, p::Real)
+    # = ∫ V(r) exp(-ix⋅p) dx
+    -el.α * exp(- (p * el.L)^2 / 2)
 end
Gaussian potentials and DFTK

DFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.

We set up the lattice. For a 1D case we supply two zero lattice vectors

a = 10
 lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];

In this example, we want to generate two Gaussian potentials generated by two "nuclei" localized at positions $x_1$ and $x_2$, that are expressed in $[0,1)$ in fractional coordinates. $|x_1 - x_2|$ should be different from $0.5$ to break symmetry and get nonzero forces.

x1 = 0.2
 x2 = 0.8
@@ -26,33 +26,33 @@
 scfres = self_consistent_field(basis; tol=1e-5, ρ)
 scfres.energies
Energy breakdown (in Ha):
     Kinetic             0.0380295 
-    AtomicLocal         -0.3163465
-    LocalNonlinearity   0.1212606 
+    AtomicLocal         -0.3163466
+    LocalNonlinearity   0.1212607 
 
-    total               -0.157056406910

Computing the forces can then be done as usual:

compute_forces(scfres)
2-element Vector{StaticArraysCore.SVector{3, Float64}}:
- [-0.05567774906005728, -0.0, -0.0]
- [0.05568676507176101, -0.0, -0.0]

Extract the converged total local potential

tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1

Extract other quantities before plotting them

ρ = scfres.ρ[:, 1, 1, 1]        # converged density, first spin component
+    total               -0.157056406916

Computing the forces can then be done as usual:

compute_forces(scfres)
2-element Vector{StaticArraysCore.SVector{3, Float64}}:
+ [-0.05568174199801616, -0.0, -0.0]
+ [0.055683221814483, -0.0, -0.0]

Extract the converged total local potential

tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1

Extract other quantities before plotting them

ρ = scfres.ρ[:, 1, 1, 1]        # converged density, first spin component
 ψ_fourier = scfres.ψ[1][:, 1]   # first k-point, all G components, first eigenvector
101-element Vector{ComplexF64}:
-     -0.7505011473651568 - 0.6187537738725746im
-    -0.07713008490485088 - 0.06359034653151338im
-     0.09138835127927053 + 0.07534537458188914im
-     0.03970017264242477 + 0.03273058831600237im
-   -0.006928684173844048 - 0.005711333838998635im
-   -0.010542705925360597 - 0.008691570437363282im
-   -0.001520868185380661 - 0.0012541162203521183im
-   0.0016922232482978348 + 0.0013949868766508534im
-    0.000728830672660929 + 0.0006008717428343278im
- -0.00011094859725738215 - 9.143915675141666e-5im
+     0.10854717354124252 - 0.9666050778974895im
+    0.011155577049440962 - 0.09934025500274779im
+    -0.01321794582462655 + 0.11770331580680768im
+   -0.005741670532463188 + 0.05113140763473955im
+   0.0010019503580979948 - 0.00892332488644396im
+   0.0015247536212640042 - 0.01357798050375622im
+  0.00022001160517829313 - 0.00195890583702417im
+ -0.00024473156714001435 + 0.0021793916755961764im
+ -0.00010542078549130856 + 0.0009387003084346184im
+   1.6038491080058943e-5 - 0.00014287600774792278im
                          ⋮
- -0.00011091502976567116 - 9.14786997242125e-5im
-   0.0007288154518923435 + 0.0006008894888289531im
-   0.0016920547266073686 + 0.0013951927131121615im
-   -0.001521094010875248 - 0.0012538437141994588im
-   -0.010542306086462377 - 0.008692056165523558im
-   -0.006927652694119295 - 0.005712583194007473im
-     0.03969979627011099 + 0.03273104495449157im
-     0.09138822650590092 + 0.07534553052901814im
-    -0.07713021195661415 - 0.06359019300164749im

Transform the wave function to real space and fix the phase:

ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]
+    1.605035088108768e-5 - 0.00014287816288208533im
+ -0.00010540937004438789 + 0.0009387039922727615im
+  -0.0002447515949492007 + 0.002179388801276833im
+   0.0002199475584484752 - 0.0019589102594607727im
+   0.0015247815676698551 - 0.013577970158872181im
+   0.0010021820775499794 - 0.00892329583701968im
+   -0.005742163186998725 + 0.0511313568978482im
+   -0.013217596034629206 + 0.1177033560869267im
+    0.011155713001394294 - 0.09934023946812827im

Transform the wave function to real space and fix the phase:

ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]
 ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));
 
 using Plots
@@ -60,4 +60,4 @@
 p = plot(x, real.(ψ), label="real(ψ)")
 plot!(p, x, imag.(ψ), label="imag(ψ)")
 plot!(p, x, ρ, label="ρ")
-plot!(p, x, tot_local_pot, label="tot local pot")
Example block output
+plot!(p, x, tot_local_pot, label="tot local pot")
Example block output
diff --git a/dev/examples/custom_solvers.ipynb b/dev/examples/custom_solvers.ipynb index ebbcb1e640..ab4f3ffece 100644 --- a/dev/examples/custom_solvers.ipynb +++ b/dev/examples/custom_solvers.ipynb @@ -131,20 +131,20 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.136730769250 -0.42 0.0 \n", - " 2 -7.234507523075 -1.01 -0.71 0.0 187ms\n", - " 3 -7.250155356676 -1.81 -1.20 0.0 47.9ms\n", - " 4 -7.251066644663 -3.04 -1.51 0.0 48.5ms\n", - " 5 -7.251276232104 -3.68 -1.82 0.0 49.1ms\n", - " 6 -7.251323976978 -4.32 -2.11 0.0 51.6ms\n", - " 7 -7.251335118065 -4.95 -2.39 0.0 137ms\n", - " 8 -7.251337831814 -5.57 -2.66 0.0 48.5ms\n", - " 9 -7.251338529334 -6.16 -2.92 0.0 48.0ms\n", - " 10 -7.251338719368 -6.72 -3.18 0.0 48.5ms\n", - " 11 -7.251338774177 -7.26 -3.44 0.0 49.8ms\n", - " 12 -7.251338790816 -7.78 -3.68 0.0 51.9ms\n", - " 13 -7.251338796088 -8.28 -3.93 0.0 140ms\n", - " 14 -7.251338797816 -8.76 -4.17 0.0 48.2ms\n" + " 1 -7.090073978406 -0.39 0.0 2.38s\n", + " 2 -7.226157343674 -0.87 -0.65 0.0 916ms\n", + " 3 -7.249782177445 -1.63 -1.17 0.0 54.1ms\n", + " 4 -7.250986294028 -2.92 -1.48 0.0 53.7ms\n", + " 5 -7.251258312426 -3.57 -1.78 0.0 97.3ms\n", + " 6 -7.251319808416 -4.21 -2.07 0.0 40.4ms\n", + " 7 -7.251334099764 -4.84 -2.35 0.0 50.3ms\n", + " 8 -7.251337569219 -5.46 -2.62 0.0 53.8ms\n", + " 9 -7.251338457710 -6.05 -2.88 0.0 53.7ms\n", + " 10 -7.251338698748 -6.62 -3.14 0.0 53.5ms\n", + " 11 -7.251338767946 -7.16 -3.39 0.0 111ms\n", + " 12 -7.251338788853 -7.68 -3.64 0.0 39.7ms\n", + " 13 -7.251338795449 -8.18 -3.88 0.0 48.6ms\n", + " 14 -7.251338797603 -8.67 -4.12 0.0 52.2ms\n" ] } ], @@ -178,11 +178,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/custom_solvers/index.html b/dev/examples/custom_solvers/index.html index 82c8c40729..e232c19c4e 100644 --- a/dev/examples/custom_solvers/index.html +++ b/dev/examples/custom_solvers/index.html @@ -1,5 +1,5 @@ -Custom solvers · DFTK.jl

Custom solvers

In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative

using DFTK, LinearAlgebra
+Custom solvers · DFTK.jl

Custom solvers

In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative

using DFTK, LinearAlgebra
 
 a = 10.26
 lattice = a / 2 * [[0 1 1.];
@@ -49,17 +49,17 @@
                                eigensolver=my_eig_solver,
                                mixing=MyMixing());
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.136730769250                   -0.42    0.0
-  2   -7.234507523075       -1.01       -0.71    0.0    150ms
-  3   -7.250155356676       -1.81       -1.20    0.0   50.2ms
-  4   -7.251066644663       -3.04       -1.51    0.0    152ms
-  5   -7.251276232104       -3.68       -1.82    0.0   49.8ms
-  6   -7.251323976978       -4.32       -2.11    0.0   48.8ms
-  7   -7.251335118065       -4.95       -2.39    0.0   48.5ms
-  8   -7.251337831814       -5.57       -2.66    0.0   48.9ms
-  9   -7.251338529334       -6.16       -2.92    0.0   52.2ms
- 10   -7.251338719368       -6.72       -3.18    0.0    155ms
- 11   -7.251338774177       -7.26       -3.44    0.0   50.0ms
- 12   -7.251338790816       -7.78       -3.68    0.0   48.0ms
- 13   -7.251338796088       -8.28       -3.93    0.0   47.9ms
- 14   -7.251338797816       -8.76       -4.17    0.0   48.8ms

Note that the default convergence criterion is the difference in density. When this gets below tol, the "driver" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.

+ 1 -7.090073978406 -0.39 0.0 191ms + 2 -7.226157343674 -0.87 -0.65 0.0 186ms + 3 -7.249782177445 -1.63 -1.17 0.0 41.3ms + 4 -7.250986294028 -2.92 -1.48 0.0 79.6ms + 5 -7.251258312426 -3.57 -1.78 0.0 40.1ms + 6 -7.251319808416 -4.21 -2.07 0.0 48.4ms + 7 -7.251334099764 -4.84 -2.35 0.0 50.1ms + 8 -7.251337569219 -5.46 -2.62 0.0 52.9ms + 9 -7.251338457710 -6.05 -2.88 0.0 52.3ms + 10 -7.251338698748 -6.62 -3.14 0.0 115ms + 11 -7.251338767946 -7.16 -3.39 0.0 38.4ms + 12 -7.251338788853 -7.68 -3.64 0.0 74.3ms + 13 -7.251338795449 -8.18 -3.88 0.0 49.6ms + 14 -7.251338797603 -8.67 -4.12 0.0 51.6ms

Note that the default convergence criterion is the difference in density. When this gets below tol, the "driver" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.

diff --git a/dev/examples/dielectric.ipynb b/dev/examples/dielectric.ipynb index a590be40c2..bd8b8a131f 100644 --- a/dev/examples/dielectric.ipynb +++ b/dev/examples/dielectric.ipynb @@ -17,23 +17,27 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.235414409175 -0.50 8.0 \n", - " 2 -7.250284763576 -1.83 -1.40 1.0 5.15ms\n", - " 3 -7.251127389681 -3.07 -2.07 1.0 5.15ms\n", - " 4 -7.251186418911 -4.23 -2.03 2.0 6.39ms\n", - " 5 -7.251329896738 -3.84 -2.63 1.0 5.22ms\n", - " 6 -7.251337973313 -5.09 -3.12 1.0 5.32ms\n", - " 7 -7.251338709813 -6.13 -3.73 1.0 5.60ms\n", - " 8 -7.251338795792 -7.07 -4.13 2.0 6.63ms\n", - " 9 -7.251338798133 -8.63 -4.85 1.0 5.53ms\n", - " 10 -7.251338798685 -9.26 -5.27 3.0 7.45ms\n", - " 11 -7.251338798701 -10.80 -5.74 1.0 5.67ms\n", - " 12 -7.251338798703 -11.74 -5.91 2.0 6.68ms\n", - " 13 -7.251338798704 -11.83 -6.53 1.0 5.75ms\n", - " 14 -7.251338798705 -13.05 -6.83 2.0 6.78ms\n", - " 15 -7.251338798705 -13.80 -7.36 2.0 6.76ms\n", - " 16 -7.251338798705 -14.75 -7.66 2.0 45.5ms\n", - " 17 -7.251338798705 -15.05 -8.05 1.0 5.69ms\n" + " 1 -7.235521187770 -0.50 8.0 11.3ms\n", + " 2 -7.250496643999 -1.82 -1.41 1.0 5.49ms\n", + " 3 -7.251201876722 -3.15 -2.17 1.0 5.28ms\n", + " 4 -7.251191608052 + -4.99 -2.07 2.0 6.34ms\n", + " 5 -7.251335328474 -3.84 -2.77 1.0 5.29ms\n", + " 6 -7.251338431007 -5.51 -3.33 1.0 5.30ms\n", + " 7 -7.251338731919 -6.52 -3.55 2.0 6.36ms\n", + " 8 -7.251338788595 -7.25 -4.00 1.0 5.45ms\n", + " 9 -7.251338795766 -8.14 -4.34 1.0 5.49ms\n", + " 10 -7.251338798001 -8.65 -4.56 2.0 6.55ms\n", + " 11 -7.251338798556 -9.26 -4.93 1.0 5.69ms\n", + " 12 -7.251338798616 -10.23 -5.03 2.0 6.92ms\n", + " 13 -7.251338798695 -10.10 -5.82 1.0 5.78ms\n", + " 14 -7.251338798703 -11.12 -5.86 3.0 7.44ms\n", + " 15 -7.251338798704 -11.85 -6.31 1.0 5.77ms\n", + " 16 -7.251338798704 -12.43 -6.68 2.0 6.58ms\n", + " 17 -7.251338798705 -13.06 -6.78 3.0 7.66ms\n", + " 18 -7.251338798705 -13.60 -7.24 1.0 5.76ms\n", + " 19 -7.251338798705 -15.05 -7.95 2.0 6.69ms\n", + " 20 -7.251338798705 -14.75 -7.88 1.0 5.71ms\n", + " 21 -7.251338798705 -14.75 -8.19 1.0 5.71ms\n" ] } ], @@ -96,70 +100,72 @@ "name": "stdout", "output_type": "stream", "text": [ - "[ Info: Arnoldi iteration step 1: normres = 0.07383263154415157\n", - "[ Info: Arnoldi iteration step 2: normres = 0.6222518012864504\n", - "[ Info: Arnoldi iteration step 3: normres = 0.7518371544180092\n", - "[ Info: Arnoldi iteration step 4: normres = 0.2216870716952142\n", - "[ Info: Arnoldi iteration step 5: normres = 0.591454011691182\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (2.04e-02, 8.37e-02, 5.19e-01, 2.69e-01, 1.43e-02)\n", - "[ Info: Arnoldi iteration step 6: normres = 0.25459341321689466\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (4.31e-03, 1.38e-01, 1.62e-01, 9.34e-02, 3.87e-02)\n", - "[ Info: Arnoldi iteration step 7: normres = 0.09923096620018791\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (2.12e-04, 1.37e-02, 1.33e-02, 7.08e-02, 5.99e-02)\n", - "[ Info: Arnoldi iteration step 8: normres = 0.11840249136390532\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (1.07e-05, 1.12e-03, 1.21e-03, 2.42e-02, 3.24e-02)\n", - "[ Info: Arnoldi iteration step 9: normres = 0.06579268796938892\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (3.12e-07, 5.52e-05, 6.64e-05, 7.10e-03, 3.57e-02)\n", - "[ Info: Arnoldi iteration step 10: normres = 0.0711715016501276\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (9.71e-09, 2.85e-06, 3.82e-06, 1.86e-03, 1.96e-02)\n", - "[ Info: Arnoldi iteration step 11: normres = 0.06482436953321913\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (2.65e-10, 1.26e-07, 1.87e-07, 3.28e-04, 6.37e-03)\n", - "[ Info: Arnoldi iteration step 12: normres = 0.06974214634226661\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (7.93e-12, 6.17e-09, 1.01e-08, 6.94e-05, 2.49e-03)\n", - "[ Info: Arnoldi iteration step 13: normres = 0.0566074412849664\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (1.92e-13, 2.45e-10, 4.46e-10, 1.21e-05, 8.60e-04)\n", - "[ Info: Arnoldi iteration step 14: normres = 0.7213668562288817\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (8.49e-14, 2.43e-10, 5.47e-10, 7.13e-01, 3.62e-02)\n", - "[ Info: Arnoldi iteration step 15: normres = 0.049372695424214026\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (2.71e-15, 4.21e-11, 3.24e-02, 6.95e-03, 1.36e-05)\n", - "[ Info: Arnoldi iteration step 16: normres = 0.7473061103205819\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (1.22e-15, 4.29e-11, 3.99e-02, 5.80e-03, 7.45e-01)\n", - "[ Info: Arnoldi iteration step 17: normres = 0.04433687947771563\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (4.09e-17, 8.72e-10, 3.06e-02, 9.05e-06, 5.92e-03)\n", - "[ Info: Arnoldi iteration step 18: normres = 0.02127263270292299\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (3.59e-19, 1.10e-04, 4.15e-04, 4.74e-05, 7.69e-05)\n", - "[ Info: Arnoldi iteration step 19: normres = 0.15779163229986543\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (2.38e-20, 9.07e-09, 4.60e-05, 3.46e-08, 1.07e-05)\n", - "[ Info: Arnoldi iteration step 20: normres = 0.056432645662828775\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (6.54e-22, 2.11e-09, 2.27e-06, 3.73e-08, 6.02e-07)\n", - "[ Info: Arnoldi iteration step 21: normres = 0.0357410289563413\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (9.73e-24, 3.83e-09, 5.42e-08, 1.64e-09, 1.58e-08)\n", - "[ Info: Arnoldi iteration step 22: normres = 0.016114649355971556\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (6.50e-26, 1.39e-11, 5.82e-10, 1.76e-11, 1.87e-10)\n", - "[ Info: Arnoldi iteration step 23: normres = 0.35858998263223923\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (1.01e-26, 3.55e-12, 1.49e-10, 5.02e-12, 5.31e-11)\n", - "[ Info: Arnoldi iteration step 24: normres = 0.073031421306694\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (6.69e-28, 1.65e-12, 6.93e-11, 8.33e-11, 8.72e-10)\n", - "[ Info: Arnoldi iteration step 25: normres = 0.1264222917253866\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 2 values converged, normres = (3.60e-29, 1.50e-13, 6.28e-12, 5.57e-10, 6.31e-09)\n", - "[ Info: Arnoldi iteration step 26: normres = 0.020773228217058737\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (3.27e-31, 2.26e-15, 9.48e-14, 9.78e-05, 5.29e-05)\n", - "[ Info: Arnoldi iteration step 27: normres = 0.022841898187433526\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (3.07e-33, 3.37e-17, 1.41e-15, 1.53e-10, 1.70e-09)\n", - "[ Info: Arnoldi iteration step 28: normres = 0.10236910123685475\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (1.35e-34, 2.43e-18, 1.02e-16, 1.86e-08, 1.43e-07)\n", - "[ Info: Arnoldi iteration step 29: normres = 0.018402651778983148\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (1.06e-36, 3.11e-20, 1.30e-18, 4.36e-12, 2.04e-09)\n", - "[ Info: Arnoldi iteration step 30: normres = 0.18788752931505345\n", - "[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 4 values converged, normres = (8.49e-38, 4.07e-21, 1.71e-19, 6.15e-13, 2.97e-10)\n", - "[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 4 values converged, normres = (8.49e-38, 4.07e-21, 1.71e-19, 6.15e-13, 2.97e-10)\n", - "[ Info: Arnoldi iteration step 20: normres = 0.055862146095625086\n", - "[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (2.29e-39, 1.95e-22, 8.20e-21, 3.36e-14, 1.62e-11)\n", - "[ Info: Arnoldi iteration step 21: normres = 0.0701897359137976\n", + "[ Info: Arnoldi iteration step 1: normres = 0.051680148138428396\n", + "[ Info: Arnoldi iteration step 2: normres = 0.5142200856637898\n", + "[ Info: Arnoldi iteration step 3: normres = 0.7945881756606609\n", + "[ Info: Arnoldi iteration step 4: normres = 0.43595085817965035\n", + "[ Info: Arnoldi iteration step 5: normres = 0.40039457490847696\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (7.04e-02, 6.16e-02, 2.97e-01, 2.51e-01, 2.10e-02)\n", + "[ Info: Arnoldi iteration step 6: normres = 0.39533157382225054\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (2.30e-02, 9.98e-02, 3.49e-01, 1.21e-01, 9.50e-02)\n", + "[ Info: Arnoldi iteration step 7: normres = 0.06387486155693355\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (7.27e-04, 8.16e-03, 1.83e-02, 2.65e-02, 4.40e-02)\n", + "[ Info: Arnoldi iteration step 8: normres = 0.1160015893603685\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (3.63e-05, 6.70e-04, 1.66e-03, 9.45e-03, 4.43e-02)\n", + "[ Info: Arnoldi iteration step 9: normres = 0.07479049776570124\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (1.18e-06, 3.59e-05, 9.91e-05, 2.54e-03, 3.97e-02)\n", + "[ Info: Arnoldi iteration step 10: normres = 0.08982185654438087\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (4.64e-08, 2.35e-06, 7.24e-06, 8.57e-04, 3.84e-02)\n", + "[ Info: Arnoldi iteration step 11: normres = 0.09869496946746865\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (1.99e-09, 1.67e-07, 5.70e-07, 3.05e-04, 3.35e-02)\n", + "[ Info: Arnoldi iteration step 12: normres = 0.07085806339450922\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (6.12e-11, 8.48e-09, 3.22e-08, 7.58e-05, 1.89e-02)\n", + "[ Info: Arnoldi iteration step 13: normres = 0.029951118126434154\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (7.73e-13, 1.73e-10, 7.29e-10, 6.30e-06, 2.89e-03)\n", + "[ Info: Arnoldi iteration step 14: normres = 0.4193328407534506\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (1.42e-13, 5.28e-11, 2.47e-10, 9.15e-06, 8.48e-03)\n", + "[ Info: Arnoldi iteration step 15: normres = 0.07747839031472199\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (9.90e-15, 2.74e-11, 7.10e-02, 1.54e-02, 3.30e-05)\n", + "[ Info: Arnoldi iteration step 16: normres = 0.5278992717074832\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (2.43e-15, 1.17e-11, 3.42e-02, 1.22e-03, 4.25e-07)\n", + "[ Info: Arnoldi iteration step 17: normres = 0.0770897352953018\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (1.83e-16, 6.62e-10, 6.71e-02, 4.90e-04, 1.70e-02)\n", + "[ Info: Arnoldi iteration step 18: normres = 0.019130681789681\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (1.45e-18, 8.35e-04, 1.65e-04, 7.55e-05, 2.08e-04)\n", + "[ Info: Arnoldi iteration step 19: normres = 0.09073454864528077\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (5.47e-20, 4.32e-10, 5.15e-05, 1.41e-08, 1.48e-05)\n", + "[ Info: Arnoldi iteration step 20: normres = 0.12229104385285058\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (3.23e-21, 4.60e-06, 2.89e-06, 4.33e-07, 1.72e-06)\n", + "[ Info: Arnoldi iteration step 21: normres = 0.031085292347539584\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (4.29e-23, 4.97e-10, 1.18e-07, 5.01e-09, 4.24e-08)\n", + "[ Info: Arnoldi iteration step 22: normres = 0.017607272116622642\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (3.10e-25, 9.75e-12, 1.36e-09, 4.45e-10, 3.08e-10)\n", + "[ Info: Arnoldi iteration step 23: normres = 0.2878126123985643\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (3.73e-26, 1.97e-12, 2.64e-10, 1.10e-10, 3.55e-11)\n", + "[ Info: Arnoldi iteration step 24: normres = 0.06494157480390068\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 2 values converged, normres = (2.27e-27, 8.86e-13, 1.19e-10, 9.20e-03, 4.34e-02)\n", + "[ Info: Arnoldi iteration step 25: normres = 0.03152844982463055\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 2 values converged, normres = (2.93e-29, 1.82e-14, 2.44e-12, 6.31e-04, 5.97e-04)\n", + "[ Info: Arnoldi iteration step 26: normres = 0.08739403940657277\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (1.12e-30, 1.15e-15, 1.55e-13, 5.77e-05, 6.93e-05)\n", + "[ Info: Arnoldi iteration step 27: normres = 0.026183202960224135\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (1.23e-32, 2.04e-17, 2.73e-15, 4.02e-07, 2.61e-07)\n", + "[ Info: Arnoldi iteration step 28: normres = 0.1283844401151755\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (6.83e-34, 1.87e-18, 2.50e-16, 2.75e-09, 4.50e-09)\n", + "[ Info: Arnoldi iteration step 29: normres = 0.020619607075679027\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (6.07e-36, 2.73e-20, 3.66e-18, 1.73e-09, 2.76e-09)\n", + "[ Info: Arnoldi iteration step 30: normres = 0.11474807118487632\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (2.99e-37, 2.21e-21, 2.95e-19, 6.55e-11, 2.65e-10)\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (2.99e-37, 2.21e-21, 2.95e-19, 2.65e-10, 6.55e-11)\n", + "[ Info: Arnoldi iteration step 20: normres = 0.1964658753057132\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 3 values converged, normres = (2.69e-38, 3.40e-22, 4.54e-20, 4.45e-11, 1.68e-11)\n", + "[ Info: Arnoldi iteration step 21: normres = 0.036573075340858074\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 3 values converged, normres = (4.49e-40, 9.75e-24, 1.31e-21, 1.45e-12, 5.24e-13)\n", + "[ Info: Arnoldi iteration step 22: normres = 0.014336485824332851\n", "┌ Info: Arnoldi eigsolve finished after 2 iterations:\n", "│ * 6 eigenvalues converged\n", - "│ * norm of residuals = (6.680818195833259e-41, 9.208115978656482e-24, 3.7975765420957637e-22, 1.7484554090489014e-15, 8.409222226466822e-13, 3.550496840820154e-14)\n", - "└ * number of operations = 32\n" + "│ * norm of residuals = (2.643950274901847e-42, 9.158421636204732e-26, 1.2069684149516564e-23, 9.949142644036274e-15, 9.949142644036274e-15, 1.0308203600048678e-14)\n", + "└ * number of operations = 33\n" ] } ], @@ -177,11 +183,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/dielectric/index.html b/dev/examples/dielectric/index.html index 6545636a2c..bf6a42ad43 100644 --- a/dev/examples/dielectric/index.html +++ b/dev/examples/dielectric/index.html @@ -1,5 +1,5 @@ -Eigenvalues of the dielectric matrix · DFTK.jl

Eigenvalues of the dielectric matrix

We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively.

using DFTK
+Eigenvalues of the dielectric matrix · DFTK.jl

Eigenvalues of the dielectric matrix

We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively.

using DFTK
 using Plots
 using KrylovKit
 using Printf
@@ -20,92 +20,88 @@
 basis  = PlaneWaveBasis(model; Ecut, kgrid)
 scfres = self_consistent_field(basis, tol=1e-8);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.235256116256                   -0.50    7.0
-  2   -7.250379996912       -1.82       -1.40    1.0   5.00ms
-  3   -7.251096566932       -3.14       -2.06    1.0   5.10ms
-  4   -7.251034124858   +   -4.20       -1.92    2.0   6.27ms
-  5   -7.251335861513       -3.52       -2.76    1.0   5.18ms
-  6   -7.251338201238       -5.63       -3.25    1.0   5.28ms
-  7   -7.251338696818       -6.30       -3.51    2.0   6.51ms
-  8   -7.251338793434       -7.01       -4.17    1.0   5.42ms
-  9   -7.251338798132       -8.33       -4.73    2.0   6.37ms
- 10   -7.251338798604       -9.33       -4.96    3.0   7.52ms
- 11   -7.251338798688      -10.08       -5.33    1.0   5.84ms
- 12   -7.251338798701      -10.88       -5.64    2.0   6.77ms
- 13   -7.251338798704      -11.52       -6.13    1.0   5.80ms
- 14   -7.251338798704      -12.39       -6.39    2.0   6.82ms
- 15   -7.251338798705      -13.16       -6.70    1.0    102ms
- 16   -7.251338798705      -13.62       -7.20    1.0   9.09ms
- 17   -7.251338798705      -14.57       -7.22    3.0   9.35ms
- 18   -7.251338798705      -14.27       -7.56    1.0   5.82ms
- 19   -7.251338798705   +  -14.35       -7.90    2.0   6.87ms
- 20   -7.251338798705      -14.27       -8.82    1.0   5.81ms

Applying $ε^† ≔ (1- χ_0 K)$

function eps_fun(δρ)
+  1   -7.233473425766                   -0.50    7.0   9.93ms
+  2   -7.249423083844       -1.80       -1.40    1.0   5.19ms
+  3   -7.250874424150       -2.84       -1.70    3.0   6.49ms
+  4   -7.251219980328       -3.46       -2.04    1.0   5.14ms
+  5   -7.251303210408       -4.08       -2.39    1.0   5.20ms
+  6   -7.251326812013       -4.63       -2.60    1.0   5.24ms
+  7   -7.251337941173       -4.95       -3.15    1.0   5.35ms
+  8   -7.251338757164       -6.09       -3.70    2.0   6.45ms
+  9   -7.251338787967       -7.51       -4.23    1.0   5.47ms
+ 10   -7.251338797965       -8.00       -4.63    2.0   6.70ms
+ 11   -7.251338798608       -9.19       -5.09    1.0   5.65ms
+ 12   -7.251338798697      -10.05       -5.51    2.0   6.74ms
+ 13   -7.251338798702      -11.22       -5.99    1.0   5.75ms
+ 14   -7.251338798704      -11.73       -6.43    2.0   6.78ms
+ 15   -7.251338798705      -12.80       -6.82    1.0   5.74ms
+ 16   -7.251338798705      -13.60       -7.11    2.0   41.4ms
+ 17   -7.251338798705      -14.45       -7.78    1.0   6.04ms
+ 18   -7.251338798705      -15.05       -8.09    2.0   6.79ms

Applying $ε^† ≔ (1- χ_0 K)$

function eps_fun(δρ)
     δV = apply_kernel(basis, δρ; ρ=scfres.ρ)
     χ0δV = apply_χ0(scfres, δV)
     δρ - χ0δV
-end;

… eagerly diagonalizes the subspace matrix at each iteration

eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);
[ Info: Arnoldi iteration step 1: normres = 0.0740378766942747
-[ Info: Arnoldi iteration step 2: normres = 0.3149908674896345
-[ Info: Arnoldi iteration step 3: normres = 0.30541311644181585
-[ Info: Arnoldi iteration step 4: normres = 0.7968041536863614
-[ Info: Arnoldi iteration step 5: normres = 0.7637984211450456
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (5.35e-01, 9.92e-02, 4.51e-01, 2.89e-01, 1.60e-02)
-[ Info: Arnoldi iteration step 6: normres = 0.34286913927931545
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (1.95e-01, 8.94e-02, 2.18e-01, 1.01e-01, 1.08e-01)
-[ Info: Arnoldi iteration step 7: normres = 0.056893545955297165
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (5.21e-03, 4.93e-03, 1.01e-02, 2.35e-02, 4.41e-02)
-[ Info: Arnoldi iteration step 8: normres = 0.1245698104601121
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (2.87e-04, 4.55e-04, 1.03e-03, 1.13e-02, 6.80e-02)
-[ Info: Arnoldi iteration step 9: normres = 0.0714362363701114
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (8.84e-06, 2.30e-05, 5.82e-05, 2.90e-03, 3.58e-02)
-[ Info: Arnoldi iteration step 10: normres = 0.0851545348720763
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (3.26e-07, 1.40e-06, 3.93e-06, 8.20e-04, 2.01e-02)
-[ Info: Arnoldi iteration step 11: normres = 0.08752763071430592
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (1.24e-08, 8.76e-08, 2.73e-07, 2.49e-04, 1.41e-02)
-[ Info: Arnoldi iteration step 12: normres = 0.07571433196730928
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (4.00e-10, 4.62e-09, 1.60e-08, 5.72e-05, 6.73e-03)
-[ Info: Arnoldi iteration step 13: normres = 0.14681513131084215
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 0 values converged, normres = (2.50e-11, 4.73e-10, 1.81e-09, 2.52e-05, 5.85e-03)
-[ Info: Arnoldi iteration step 14: normres = 0.30676411261768544
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 0 values converged, normres = (7.82e-12, 2.03e-09, 3.04e-01, 1.62e-02, 1.18e-03)
-[ Info: Arnoldi iteration step 15: normres = 0.1863000992480595
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (6.45e-13, 1.49e-09, 3.90e-02, 2.04e-05, 4.77e-06)
-[ Info: Arnoldi iteration step 16: normres = 0.13324304278189686
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (8.12e-14, 1.30e-02, 3.18e-02, 2.91e-05, 1.26e-01)
-[ Info: Arnoldi iteration step 17: normres = 0.03215584668397387
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (1.09e-15, 1.38e-08, 8.11e-04, 2.61e-03, 1.37e-03)
-[ Info: Arnoldi iteration step 18: normres = 0.04303895227254848
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (1.96e-17, 6.17e-08, 2.34e-05, 3.55e-07, 9.38e-05)
-[ Info: Arnoldi iteration step 19: normres = 0.16741287843307678
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (1.58e-18, 3.31e-06, 3.32e-07, 4.91e-08, 1.51e-05)
-[ Info: Arnoldi iteration step 20: normres = 0.026146174746399336
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (1.77e-20, 1.08e-08, 6.05e-08, 2.15e-07, 2.25e-07)
-[ Info: Arnoldi iteration step 21: normres = 0.02935788244063304
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (2.15e-22, 7.26e-10, 9.52e-10, 4.90e-09, 4.54e-09)
-[ Info: Arnoldi iteration step 22: normres = 0.01923506247950577
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (1.71e-24, 9.53e-12, 1.18e-11, 6.37e-11, 6.83e-11)
-[ Info: Arnoldi iteration step 23: normres = 0.3243437511788357
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (2.34e-25, 2.11e-12, 2.62e-12, 1.57e-11, 1.67e-11)
-[ Info: Arnoldi iteration step 24: normres = 0.06702024887455767
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 2 values converged, normres = (1.46e-26, 9.77e-13, 1.21e-12, 3.46e-02, 4.25e-02)
-[ Info: Arnoldi iteration step 25: normres = 0.03891600649717259
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 3 values converged, normres = (2.32e-28, 2.46e-14, 3.06e-14, 7.87e-10, 9.19e-10)
-[ Info: Arnoldi iteration step 26: normres = 0.07136125879728031
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (7.42e-30, 1.32e-15, 1.65e-15, 5.69e-05, 1.35e-05)
-[ Info: Arnoldi iteration step 27: normres = 0.07178256417320701
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (2.23e-31, 6.42e-17, 7.98e-17, 1.71e-06, 1.16e-06)
-[ Info: Arnoldi iteration step 28: normres = 0.12081386489407676
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (1.21e-32, 5.93e-18, 7.36e-18, 5.06e-10, 5.79e-10)
-[ Info: Arnoldi iteration step 29: normres = 0.18411222773324842
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (1.04e-33, 8.79e-19, 1.09e-18, 6.32e-08, 4.87e-08)
-[ Info: Arnoldi iteration step 30: normres = 0.015715264087353062
-[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (7.08e-36, 9.96e-21, 1.24e-20, 3.73e-11, 1.26e-09)
-[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (7.44e-36, 9.96e-21, 1.24e-20, 3.73e-11, 1.26e-09)
-[ Info: Arnoldi iteration step 20: normres = 0.029693590391854263
-[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (8.63e-38, 1.93e-22, 2.40e-22, 7.75e-13, 2.65e-11)
-[ Info: Arnoldi iteration step 21: normres = 0.06463043484597203
-[ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 4 values converged, normres = (2.31e-39, 8.28e-24, 1.03e-23, 3.66e-14, 1.26e-12)
-[ Info: Arnoldi iteration step 22: normres = 0.024889587419923594
+end;

… eagerly diagonalizes the subspace matrix at each iteration

eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);
[ Info: Arnoldi iteration step 1: normres = 0.08460366605796583
+[ Info: Arnoldi iteration step 2: normres = 0.5712132665426439
+[ Info: Arnoldi iteration step 3: normres = 0.8231865870380266
+[ Info: Arnoldi iteration step 4: normres = 0.23371863346797622
+[ Info: Arnoldi iteration step 5: normres = 0.4805646119876313
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (2.40e-02, 5.45e-02, 3.66e-01, 3.05e-01, 1.63e-02)
+[ Info: Arnoldi iteration step 6: normres = 0.37309196960003377
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (7.96e-03, 2.40e-01, 2.38e-01, 1.01e-01, 1.16e-01)
+[ Info: Arnoldi iteration step 7: normres = 0.08971825696741921
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (3.60e-04, 2.30e-02, 1.02e-02, 4.40e-02, 6.31e-02)
+[ Info: Arnoldi iteration step 8: normres = 0.1086736739421467
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (1.71e-05, 1.81e-03, 8.93e-04, 1.71e-02, 4.43e-02)
+[ Info: Arnoldi iteration step 9: normres = 0.0751605311254685
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (5.52e-07, 9.63e-05, 5.25e-05, 4.34e-03, 2.30e-02)
+[ Info: Arnoldi iteration step 10: normres = 0.07730883097210133
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (1.87e-08, 5.39e-06, 3.27e-06, 1.20e-03, 1.43e-02)
+[ Info: Arnoldi iteration step 11: normres = 0.07007187395592472
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (5.62e-10, 2.67e-07, 1.80e-07, 2.69e-04, 6.93e-03)
+[ Info: Arnoldi iteration step 12: normres = 0.08387739902527223
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (2.02e-11, 1.57e-08, 1.17e-08, 6.85e-05, 3.46e-03)
+[ Info: Arnoldi iteration step 13: normres = 0.03679829560313212
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (3.16e-13, 3.99e-10, 3.30e-10, 7.38e-06, 7.24e-04)
+[ Info: Arnoldi iteration step 14: normres = 0.6902792790297403
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (1.40e-13, 4.25e-10, 4.48e-10, 6.87e-01, 4.89e-02)
+[ Info: Arnoldi iteration step 15: normres = 0.11384192342110311
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (1.05e-14, 2.99e-10, 7.06e-02, 4.80e-04, 1.24e-05)
+[ Info: Arnoldi iteration step 16: normres = 0.3224783479771546
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (3.28e-15, 2.40e-09, 1.70e-01, 6.56e-03, 2.71e-01)
+[ Info: Arnoldi iteration step 17: normres = 0.032064815431104336
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (4.58e-17, 4.69e-09, 4.79e-03, 3.06e-03, 4.44e-03)
+[ Info: Arnoldi iteration step 18: normres = 0.025372737100591753
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (4.82e-19, 8.24e-09, 8.07e-05, 9.02e-09, 1.00e-04)
+[ Info: Arnoldi iteration step 19: normres = 0.21350006713022193
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (4.58e-20, 7.89e-06, 1.01e-05, 1.72e-05, 4.58e-06)
+[ Info: Arnoldi iteration step 20: normres = 0.03462320758239955
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (7.31e-22, 4.42e-09, 3.57e-07, 5.45e-07, 1.26e-07)
+[ Info: Arnoldi iteration step 21: normres = 0.036189346346601245
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (1.10e-23, 3.96e-09, 7.62e-09, 1.92e-09, 1.47e-08)
+[ Info: Arnoldi iteration step 22: normres = 0.018795108017879324
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (8.54e-26, 2.94e-11, 1.03e-10, 3.57e-11, 2.00e-10)
+[ Info: Arnoldi iteration step 23: normres = 0.47778920586707313
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (1.82e-26, 1.05e-11, 3.68e-11, 1.42e-11, 7.99e-11)
+[ Info: Arnoldi iteration step 24: normres = 0.03460085975234672
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (5.54e-28, 2.28e-12, 8.00e-12, 1.41e-02, 1.63e-02)
+[ Info: Arnoldi iteration step 25: normres = 0.03016744851750771
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 3 values converged, normres = (6.84e-30, 4.47e-14, 1.57e-13, 5.50e-10, 2.80e-09)
+[ Info: Arnoldi iteration step 26: normres = 0.09256304829249964
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (2.83e-31, 3.11e-15, 1.09e-14, 5.52e-06, 8.29e-06)
+[ Info: Arnoldi iteration step 27: normres = 0.025233058547708406
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (2.98e-33, 5.28e-17, 1.85e-16, 8.93e-07, 2.36e-07)
+[ Info: Arnoldi iteration step 28: normres = 0.10599564330576551
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (1.35e-34, 3.88e-18, 1.36e-17, 3.64e-08, 1.04e-08)
+[ Info: Arnoldi iteration step 29: normres = 0.03541821793627925
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (2.05e-36, 9.70e-20, 3.40e-19, 6.91e-11, 2.21e-09)
+[ Info: Arnoldi iteration step 30: normres = 0.20451537898943645
+[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (2.02e-37, 1.70e-20, 5.95e-20, 1.49e-11, 4.42e-10)
+[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (2.02e-37, 1.70e-20, 5.95e-20, 1.49e-11, 4.42e-10)
+[ Info: Arnoldi iteration step 20: normres = 0.023572605829395334
+[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (2.03e-39, 2.80e-22, 9.82e-22, 2.76e-13, 8.10e-12)
+[ Info: Arnoldi iteration step 21: normres = 0.061778987222746336
 ┌ Info: Arnoldi eigsolve finished after 2 iterations:
 *  6 eigenvalues converged
-*  norm of residuals = (2.478554828995346e-41, 1.4587795793039285e-25, 2.3104086300394105e-25, 7.149826288779616e-16, 2.4527024931960195e-14, 1.8990487659355364e-15)
-*  number of operations = 33
+* norm of residuals = (5.195200151528892e-41, 1.1476103712908524e-23, 4.179394949269089e-23, 1.2460606830847064e-14, 3.268519505275726e-13, 4.1304708554653204e-14) +* number of operations = 32
diff --git a/dev/examples/energy_cutoff_smearing.ipynb b/dev/examples/energy_cutoff_smearing.ipynb index c5a7693dd8..ed926abbb8 100644 --- a/dev/examples/energy_cutoff_smearing.ipynb +++ b/dev/examples/energy_cutoff_smearing.ipynb @@ -78,105 +78,105 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -270,125 +270,125 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -444,11 +444,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/energy_cutoff_smearing/6d245c30.svg b/dev/examples/energy_cutoff_smearing/6d245c30.svg new file mode 100644 index 0000000000..cd075b786a --- /dev/null +++ b/dev/examples/energy_cutoff_smearing/6d245c30.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/energy_cutoff_smearing/e118f994.svg b/dev/examples/energy_cutoff_smearing/e118f994.svg new file mode 100644 index 0000000000..ef41dff577 --- /dev/null +++ b/dev/examples/energy_cutoff_smearing/e118f994.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/energy_cutoff_smearing/index.html b/dev/examples/energy_cutoff_smearing/index.html index 4474427810..c527d94fc3 100644 --- a/dev/examples/energy_cutoff_smearing/index.html +++ b/dev/examples/energy_cutoff_smearing/index.html @@ -1,5 +1,5 @@ -Energy cutoff smearing · DFTK.jl

Energy cutoff smearing

A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.

As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form

\[H_k u_k = ε_k u_k,\]

for each $k$-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis $\mathcal{B}_k^{E_c}=\{x ↦ e^{iG · x} \;\;|\;G ∈ \mathcal{R}^*,\;\; |k+G|^2 ≤ 2E_c\}$ whose size highly depends on the choice of $k$-point, cell size or cutoff energy $\rm E_c$ (the Ecut parameter of DFTK). As a result, energy bands computed along a $k$-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.

Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.

using DFTK
+Energy cutoff smearing · DFTK.jl

Energy cutoff smearing

A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.

As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form

\[H_k u_k = ε_k u_k,\]

for each $k$-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis $\mathcal{B}_k^{E_c}=\{x ↦ e^{iG · x} \;\;|\;G ∈ \mathcal{R}^*,\;\; |k+G|^2 ≤ 2E_c\}$ whose size highly depends on the choice of $k$-point, cell size or cutoff energy $\rm E_c$ (the Ecut parameter of DFTK). As a result, energy bands computed along a $k$-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.

Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.

using DFTK
 using Statistics
 
 a0 = 10.26  # Experimental lattice constant of silicon in bohr
@@ -31,7 +31,7 @@
 shift = mean(abs.(E0_naive .- E0_ref))
 p = plot(a_list, E0_naive .- shift, label="Ecut=5", xlabel="lattice parameter a (bohr)",
          ylabel="Ground state energy (Ha)", color=1)
-plot!(p, a_list, E0_ref, label="Ecut=100", color=2)
Example block output

The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as "energy cutoff smearing". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide $C^2$ regularity of the energy bands.

Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.

Let us lauch the computation again with the modified kinetic term.

E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);
Abinit energy cutoff smearing option

For the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring $C^1$ regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.

We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.

estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]
+plot!(p, a_list, E0_ref, label="Ecut=100", color=2)
Example block output

The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as "energy cutoff smearing". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide $C^2$ regularity of the energy bands.

Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.

Let us lauch the computation again with the modified kinetic term.

E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);
Abinit energy cutoff smearing option

For the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring $C^1$ regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.

We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.

estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]
 a0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])
 
 shift = mean(abs.(E0_modified .- E0_ref))  # Shift for legibility of the plot
@@ -39,5 +39,5 @@
 vline!(p, [a0], label="experimental a0", linestyle=:dash, linecolor=:black)
 vline!(p, [a0_naive], label="a0 Ecut=5", linestyle=:dash, color=1)
 vline!(p, [a0_ref], label="a0 Ecut=100", linestyle=:dash, color=2)
-vline!(p, [a0_modified], label="a0 Ecut=5 + BlowupCHV", linestyle=:dash, color=3)
Example block output

The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter $a$, even with the low Ecut=5 Ha.

println("Error of approximation of the reference a0 with modified kinetic term:"*
-        " $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%")
Error of approximation of the reference a0 with modified kinetic term: 0.50393%
+vline!(p, [a0_modified], label="a0 Ecut=5 + BlowupCHV", linestyle=:dash, color=3)
Example block output

The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter $a$, even with the low Ecut=5 Ha.

println("Error of approximation of the reference a0 with modified kinetic term:"*
+        " $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%")
Error of approximation of the reference a0 with modified kinetic term: 0.50393%
diff --git a/dev/examples/error_estimates_forces.ipynb b/dev/examples/error_estimates_forces.ipynb index 31013c8b28..a889308b68 100644 --- a/dev/examples/error_estimates_forces.ipynb +++ b/dev/examples/error_estimates_forces.ipynb @@ -498,10 +498,10 @@ "name": "stdout", "output_type": "stream", "text": [ - " F(P_*) = [1.47896, -1.25374, 0.81012] (rel. error: 0.00000)\n", - " F(P) = [1.13542, -1.01526, 0.40017] (rel. error: 0.20483)\n", - " F(P) - df(P)⋅Rschur(P) = [1.29125, -1.10183, 0.69055] (rel. error: 0.07832)\n", - " F(P) - df(P)⋅(P-P_*) = [1.50901, -1.28634, 0.86147] (rel. error: 0.08072)\n" + " F(P_*) = [1.47900, -1.25385, 0.81010] (rel. error: 0.00000)\n", + " F(P) = [1.13550, -1.01528, 0.40016] (rel. error: 0.20483)\n", + " F(P) - df(P)⋅Rschur(P) = [1.29124, -1.10179, 0.69055] (rel. error: 0.07832)\n", + " F(P) - df(P)⋅(P-P_*) = [1.50906, -1.28644, 0.86145] (rel. error: 0.08072)\n" ] } ], @@ -530,11 +530,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/error_estimates_forces/index.html b/dev/examples/error_estimates_forces/index.html index 467e29a683..fd85645cf1 100644 --- a/dev/examples/error_estimates_forces/index.html +++ b/dev/examples/error_estimates_forces/index.html @@ -1,5 +1,5 @@ -Practical error bounds for the forces · DFTK.jl

Practical error bounds for the forces

This is a simple example showing how to compute error estimates for the forces on a ${\rm TiO}_2$ molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.

The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.

using DFTK
+Practical error bounds for the forces · DFTK.jl

Practical error bounds for the forces

This is a simple example showing how to compute error estimates for the forces on a ${\rm TiO}_2$ molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.

The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.

using DFTK
 using Printf
 using LinearAlgebra
 using ForwardDiff
@@ -107,7 +107,7 @@
 relerror["F(P) - df(P)⋅Rschur(P)"] = compute_relerror(f - df_schur);

Summary of all forces on the first atom (Ti)

for (key, value) in pairs(forces)
     @printf("%30s = [%7.5f, %7.5f, %7.5f]   (rel. error: %7.5f)\n",
             key, (value[1])..., relerror[key])
-end
                        F(P_*) = [1.47900, -1.25379, 0.81011]   (rel. error: 0.00000)
-                          F(P) = [1.13543, -1.01525, 0.40015]   (rel. error: 0.20485)
-        F(P) - df(P)⋅Rschur(P) = [1.29128, -1.10186, 0.69055]   (rel. error: 0.07833)
-          F(P) - df(P)⋅(P-P_*) = [1.50904, -1.28636, 0.86146]   (rel. error: 0.08072)

Notice how close the computable expression $F(P) - {\rm d}F(P)⋅R_{\rm Schur}(P)$ is to the best linearization ansatz $F(P) - {\rm d}F(P)⋅(P-P_*)$.

  • CDKL2021E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv
+end
                        F(P_*) = [1.47893, -1.25371, 0.81010]   (rel. error: 0.00000)
+                          F(P) = [1.13551, -1.01529, 0.40016]   (rel. error: 0.20482)
+        F(P) - df(P)⋅Rschur(P) = [1.29124, -1.10181, 0.69055]   (rel. error: 0.07831)
+          F(P) - df(P)⋅(P-P_*) = [1.50900, -1.28631, 0.86146]   (rel. error: 0.08072)

Notice how close the computable expression $F(P) - {\rm d}F(P)⋅R_{\rm Schur}(P)$ is to the best linearization ansatz $F(P) - {\rm d}F(P)⋅(P-P_*)$.

  • CDKL2021E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv
diff --git a/dev/examples/forwarddiff.ipynb b/dev/examples/forwarddiff.ipynb index 75a94861aa..1fd5ebc3e6 100644 --- a/dev/examples/forwarddiff.ipynb +++ b/dev/examples/forwarddiff.ipynb @@ -67,36 +67,39 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -2.770843674480 -0.53 8.0 \n", - " 2 -2.772140529948 -2.89 -1.31 1.0 107ms\n", - " 3 -2.772170122022 -4.53 -2.56 1.0 137ms\n", - " 4 -2.772170706859 -6.23 -3.52 2.0 122ms\n", - " 5 -2.772170721237 -7.84 -3.92 1.0 138ms\n", - " 6 -2.772170722856 -8.79 -4.75 1.0 110ms\n", - " 7 -2.772170723006 -9.82 -5.01 2.0 127ms\n", - " 8 -2.772170723015 -11.05 -5.75 1.0 121ms\n", - " 9 -2.772170723015 -12.29 -6.46 2.0 130ms\n", - " 10 -2.772170723015 -13.83 -7.61 1.0 143ms\n", - " 11 -2.772170723015 -14.24 -8.72 2.0 131ms\n", + " 1 -2.770800675752 -0.53 8.0 141ms\n", + " 2 -2.772142657551 -2.87 -1.31 1.0 147ms\n", + " 3 -2.772170446606 -4.56 -2.57 1.0 107ms\n", + " 4 -2.772170696559 -6.60 -3.52 1.0 405ms\n", + " 5 -2.772170722003 -7.59 -4.01 2.0 121ms\n", + " 6 -2.772170722993 -9.00 -5.51 1.0 111ms\n", + " 7 -2.772170723014 -10.68 -5.46 3.0 140ms\n", + " 8 -2.772170723015 -11.87 -6.01 1.0 116ms\n", + " 9 -2.772170723015 -13.10 -7.29 1.0 123ms\n", + " 10 -2.772170723015 -14.27 -7.35 2.0 137ms\n", + " 11 -2.772170723015 -14.51 -7.50 1.0 116ms\n", + " 12 -2.772170723015 + -14.75 -7.83 1.0 126ms\n", + " 13 -2.772170723015 -13.78 -8.05 1.0 126ms\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -2.770600288348 -0.53 8.0 \n", - " 2 -2.772050327685 -2.84 -1.30 1.0 104ms\n", - " 3 -2.772082783499 -4.49 -2.66 1.0 106ms\n", - " 4 -2.772083414495 -6.20 -3.80 2.0 143ms\n", - " 5 -2.772083417406 -8.54 -4.20 2.0 123ms\n", - " 6 -2.772083417798 -9.41 -5.44 1.0 123ms\n", - " 7 -2.772083417810 -10.91 -5.73 2.0 127ms\n", - " 8 -2.772083417811 -12.41 -6.63 1.0 115ms\n", - " 9 -2.772083417811 -13.67 -7.18 2.0 147ms\n", - " 10 -2.772083417811 + -13.97 -7.62 1.0 124ms\n", - " 11 -2.772083417811 + -14.35 -8.41 1.0 123ms\n" + " 1 -2.770822094175 -0.52 9.0 202ms\n", + " 2 -2.772062288975 -2.91 -1.32 1.0 106ms\n", + " 3 -2.772083041144 -4.68 -2.45 1.0 107ms\n", + " 4 -2.772083349491 -6.51 -3.16 1.0 109ms\n", + " 5 -2.772083417680 -7.17 -4.35 2.0 124ms\n", + " 6 -2.772083417751 -10.15 -4.50 1.0 111ms\n", + " 7 -2.772083417808 -10.24 -5.56 1.0 113ms\n", + " 8 -2.772083417811 -11.65 -6.16 2.0 132ms\n", + " 9 -2.772083417811 -13.14 -6.51 1.0 128ms\n", + " 10 -2.772083417811 -14.40 -7.34 1.0 125ms\n", + " 11 -2.772083417811 + -Inf -7.75 1.0 156ms\n", + " 12 -2.772083417811 -15.35 -8.25 1.0 133ms\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "1.773558059530367" + "text/plain": "1.7735579900466054" }, "metadata": {}, "execution_count": 2 @@ -129,20 +132,20 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -2.770617423478 -0.53 8.0 \n", - " 2 -2.772046993410 -2.84 -1.30 1.0 152ms\n", - " 3 -2.772082375154 -4.45 -2.65 1.0 106ms\n", - " 4 -2.772083414597 -5.98 -3.95 2.0 166ms\n", - " 5 -2.772083417657 -8.51 -4.45 2.0 123ms\n", - " 6 -2.772083417804 -9.83 -5.35 1.0 111ms\n", - " 7 -2.772083417810 -11.19 -5.95 2.0 145ms\n", - " 8 -2.772083417811 -12.94 -6.85 1.0 116ms\n", - " 9 -2.772083417811 -13.78 -7.60 2.0 148ms\n", - " 10 -2.772083417811 + -14.21 -7.85 2.0 137ms\n", - " 11 -2.772083417811 + -14.45 -9.40 1.0 122ms\n", + " 1 -2.770753830370 -0.52 8.0 140ms\n", + " 2 -2.772058885177 -2.88 -1.32 1.0 116ms\n", + " 3 -2.772083156712 -4.61 -2.50 1.0 107ms\n", + " 4 -2.772083362881 -6.69 -3.28 1.0 119ms\n", + " 5 -2.772083414680 -7.29 -3.79 2.0 130ms\n", + " 6 -2.772083417710 -8.52 -4.82 1.0 112ms\n", + " 7 -2.772083417804 -10.03 -5.10 2.0 139ms\n", + " 8 -2.772083417810 -11.20 -6.16 1.0 117ms\n", + " 9 -2.772083417811 -12.66 -6.96 2.0 144ms\n", + " 10 -2.772083417811 + -14.57 -7.31 1.0 120ms\n", + " 11 -2.772083417811 -13.91 -8.35 1.0 139ms\n", "\n", - "Polarizability via ForwardDiff: 1.7725349704777307\n", - "Polarizability via finite difference: 1.773558059530367\n" + "Polarizability via ForwardDiff: 1.772534980188114\n", + "Polarizability via finite difference: 1.7735579900466054\n" ] } ], @@ -163,11 +166,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/forwarddiff/index.html b/dev/examples/forwarddiff/index.html index df6dce9428..6459a1a881 100644 --- a/dev/examples/forwarddiff/index.html +++ b/dev/examples/forwarddiff/index.html @@ -1,5 +1,5 @@ -Polarizability using automatic differentiation · DFTK.jl

Polarizability using automatic differentiation

Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.

using DFTK
+Polarizability using automatic differentiation · DFTK.jl

Polarizability using automatic differentiation

Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.

using DFTK
 using LinearAlgebra
 using ForwardDiff
 
@@ -32,21 +32,22 @@
 end;

With this in place we can compute the polarizability from finite differences (just like in the previous example):

polarizability_fd = let
     ε = 0.01
     (compute_dipole(ε) - compute_dipole(0.0)) / ε
-end
1.7735579880537946

We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.

polarizability = ForwardDiff.derivative(compute_dipole, 0.0)
+end
1.7735580285895214

We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.

polarizability = ForwardDiff.derivative(compute_dipole, 0.0)
 println()
 println("Polarizability via ForwardDiff:       $polarizability")
 println("Polarizability via finite difference: $polarizability_fd")
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -2.770711477065                   -0.53    9.0
-  2   -2.772047913108       -2.87       -1.31    1.0    106ms
-  3   -2.772082662342       -4.46       -2.62    1.0    159ms
-  4   -2.772083416523       -6.12       -4.10    2.0    127ms
-  5   -2.772083417794       -8.90       -4.92    2.0    180ms
-  6   -2.772083417810      -10.81       -5.83    1.0    153ms
-  7   -2.772083417811      -12.00       -6.59    2.0    127ms
-  8   -2.772083417811      -13.85       -7.41    1.0    138ms
-  9   -2.772083417811      -15.35       -7.90    2.0    136ms
- 10   -2.772083417811      -14.10       -8.92    1.0    146ms
+  1   -2.770760028390                   -0.53    8.0    145ms
+  2   -2.772056799273       -2.89       -1.31    1.0    104ms
+  3   -2.772082925881       -4.58       -2.52    1.0    141ms
+  4   -2.772083350544       -6.37       -3.36    1.0    107ms
+  5   -2.772083415577       -7.19       -3.86    2.0    136ms
+  6   -2.772083417761       -8.66       -5.20    1.0    140ms
+  7   -2.772083417804      -10.36       -5.14    2.0    126ms
+  8   -2.772083417810      -11.26       -5.78    1.0    115ms
+  9   -2.772083417811      -12.13       -6.77    2.0    146ms
+ 10   -2.772083417811      -13.91       -7.68    1.0    131ms
+ 11   -2.772083417811      -14.15       -8.11    2.0    130ms
 
-Polarizability via ForwardDiff:       1.7725349706812945
-Polarizability via finite difference: 1.7735579880537946
+Polarizability via ForwardDiff: 1.7725349688702776 +Polarizability via finite difference: 1.7735580285895214
diff --git a/dev/examples/gaas_surface.ipynb b/dev/examples/gaas_surface.ipynb index 08c6a422e6..d2e6669e8d 100644 --- a/dev/examples/gaas_surface.ipynb +++ b/dev/examples/gaas_surface.ipynb @@ -161,17 +161,20 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -16.58792271566 -0.58 5.3 \n", - " 2 -16.72525567874 -0.86 -1.01 1.0 270ms\n", - " 3 -16.73056348859 -2.28 -1.57 2.1 288ms\n", - " 4 -16.73127849891 -3.15 -2.17 2.0 307ms\n", - " 5 -16.73133376026 -4.26 -2.61 2.1 301ms\n", - " 6 -16.73133600171 -5.65 -2.95 1.3 251ms\n", - " 7 -16.73106751356 + -3.57 -2.59 2.2 315ms\n", - " 8 -16.73132552447 -3.59 -3.11 2.4 309ms\n", - " 9 -16.73133248345 -5.16 -3.31 2.4 315ms\n", - " 10 -16.73133965661 -5.14 -3.92 2.1 312ms\n", - " 11 -16.73134013460 -6.32 -4.30 2.1 313ms\n" + " 1 -16.58950442989 -0.58 5.4 1.22s\n", + " 2 -16.72534331083 -0.87 -1.01 1.0 311ms\n", + " 3 -16.73065148166 -2.28 -1.57 2.6 370ms\n", + " 4 -16.73125762135 -3.22 -2.16 1.0 272ms\n", + " 5 -16.73132528844 -4.17 -2.59 1.8 293ms\n", + " 6 -16.73133373671 -5.07 -2.88 2.0 331ms\n", + " 7 -16.73105008208 + -3.55 -2.58 2.0 338ms\n", + " 8 -16.73113537806 -4.07 -2.61 2.2 341ms\n", + " 9 -16.73113989393 -5.35 -2.64 2.0 322ms\n", + " 10 -16.73131550725 -3.76 -3.07 1.0 243ms\n", + " 11 -16.73133684404 -4.67 -3.45 1.3 263ms\n", + " 12 -16.73133906284 -5.65 -3.71 1.6 279ms\n", + " 13 -16.73133970272 -6.19 -3.91 1.8 298ms\n", + " 14 -16.73134019384 -6.31 -4.63 1.0 241ms\n" ] } ], @@ -191,7 +194,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 5.8594432 \n AtomicLocal -105.6106836\n AtomicNonlocal 2.3495015 \n Ewald 35.5044300\n PspCorrection 0.2016043 \n Hartree 49.5620543\n Xc -4.5976863\n Entropy -0.0000035\n\n total -16.731340134599" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 5.8594328 \n AtomicLocal -105.6105089\n AtomicNonlocal 2.3494920 \n Ewald 35.5044300\n PspCorrection 0.2016043 \n Hartree 49.5618907\n Xc -4.5976776\n Entropy -0.0000035\n\n total -16.731340193842" }, "metadata": {}, "execution_count": 7 @@ -211,11 +214,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/gaas_surface/index.html b/dev/examples/gaas_surface/index.html index d33a763ce7..e260a62717 100644 --- a/dev/examples/gaas_surface/index.html +++ b/dev/examples/gaas_surface/index.html @@ -1,5 +1,5 @@ -Modelling a gallium arsenide surface · DFTK.jl

Modelling a gallium arsenide surface

This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.

In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.

Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.

miller = (1, 1, 0)   # Surface Miller indices
+Modelling a gallium arsenide surface · DFTK.jl

Modelling a gallium arsenide surface

This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.

In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.

Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.

miller = (1, 1, 0)   # Surface Miller indices
 n_GaAs = 2           # Number of GaAs layers
 n_vacuum = 4         # Number of vacuum layers
 Ecut = 5             # Hartree
@@ -56,23 +56,26 @@
 
 scfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -16.58680593160                   -0.58    5.2
-  2   -16.72524268470       -0.86       -1.01    1.0    363ms
-  3   -16.73060687202       -2.27       -1.57    2.2    342ms
-  4   -16.73127224107       -3.18       -2.16    2.0    361ms
-  5   -16.73133303355       -4.22       -2.61    2.0    394ms
-  6   -16.73133606346       -5.52       -2.94    1.4    298ms
-  7   -16.73104615746   +   -3.54       -2.58    2.2    364ms
-  8   -16.73131617286       -3.57       -3.03    2.6    435ms
-  9   -16.73132378866       -5.12       -3.16    2.2    364ms
- 10   -16.73133994593       -4.79       -4.04    2.2    373ms
scfres.energies
Energy breakdown (in Ha):
-    Kinetic             5.8593328 
-    AtomicLocal         -105.6091610
-    AtomicNonlocal      2.3494589 
+  1   -16.58963077208                   -0.58    5.6    477ms
+  2   -16.72528124713       -0.87       -1.01    1.0    242ms
+  3   -16.73067395005       -2.27       -1.57    2.4    333ms
+  4   -16.73125634152       -3.23       -2.16    1.0    244ms
+  5   -16.73132501659       -4.16       -2.59    1.9    268ms
+  6   -16.73133478900       -5.01       -2.87    2.0    284ms
+  7   -16.73111218552   +   -3.65       -2.64    2.0    302ms
+  8   -16.73110917905   +   -5.52       -2.59    2.2    291ms
+  9   -16.73112949408       -4.69       -2.63    2.0    268ms
+ 10   -16.73130012744       -3.77       -2.97    1.0    247ms
+ 11   -16.73133565112       -4.45       -3.39    1.3    233ms
+ 12   -16.73133839231       -5.56       -3.63    1.2    232ms
+ 13   -16.73133999834       -5.79       -4.07    1.8    258ms
scfres.energies
Energy breakdown (in Ha):
+    Kinetic             5.8593800 
+    AtomicLocal         -105.6100454
+    AtomicNonlocal      2.3494736 
     Ewald               35.5044300
     PspCorrection       0.2016043 
-    Hartree             49.5606294
-    Xc                  -4.5976309
+    Hartree             49.5614700
+    Xc                  -4.5976491
     Entropy             -0.0000035
 
-    total               -16.731339945929
+ total -16.731339998341
diff --git a/dev/examples/geometry_optimization.ipynb b/dev/examples/geometry_optimization.ipynb index ec581b1674..4f050c307a 100644 --- a/dev/examples/geometry_optimization.ipynb +++ b/dev/examples/geometry_optimization.ipynb @@ -74,7 +74,7 @@ " if isnothing(ρ)\n", " ρ = guess_density(basis)\n", " end\n", - " is_converged = DFTK.ScfConvergenceForce(tol / 10)\n", + " is_converged = ScfConvergenceForce(tol / 10)\n", " scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n", " ψ = scfres.ψ\n", " ρ = scfres.ρ\n", @@ -130,15 +130,15 @@ "text": [ "Iter Function value Gradient norm \n", " 0 -1.061651e+00 6.219313e-01\n", - " * time: 4.9114227294921875e-5\n", - " 1 -1.064073e+00 2.919812e-01\n", - " * time: 2.4559569358825684\n", - " 2 -1.066008e+00 4.821031e-02\n", - " * time: 3.127929925918579\n", - " 3 -1.066049e+00 4.314809e-04\n", - " * time: 3.5139811038970947\n", - " 4 -1.066049e+00 6.644528e-09\n", - " * time: 3.771976947784424\n", + " * time: 5.1975250244140625e-5\n", + " 1 -1.064073e+00 2.919809e-01\n", + " * time: 5.049631834030151\n", + " 2 -1.066008e+00 4.821020e-02\n", + " * time: 5.723237037658691\n", + " 3 -1.066049e+00 4.314823e-04\n", + " * time: 6.147169828414917\n", + " 4 -1.066049e+00 6.954635e-09\n", + " * time: 6.4336278438568115\n", "\n", "Optimal bond length for Ecut=5.00: 1.556 Bohr\n" ] @@ -179,11 +179,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/geometry_optimization/index.html b/dev/examples/geometry_optimization/index.html index 45778024e8..4bf02dbffe 100644 --- a/dev/examples/geometry_optimization/index.html +++ b/dev/examples/geometry_optimization/index.html @@ -1,5 +1,5 @@ -Geometry optimization · DFTK.jl

Geometry optimization

We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the $H_2$ molecule. We setup $H_2$ in an LDA model just like in the Tutorial for silicon.

using DFTK
+Geometry optimization · DFTK.jl

Geometry optimization

We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the $H_2$ molecule. We setup $H_2$ in an LDA model just like in the Tutorial for silicon.

using DFTK
 using Optim
 using LinearAlgebra
 using Printf
@@ -18,7 +18,7 @@
     if isnothing(ρ)
         ρ = guess_density(basis)
     end
-    is_converged = DFTK.ScfConvergenceForce(tol / 10)
+    is_converged = ScfConvergenceForce(tol / 10)
     scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)
     ψ = scfres.ψ
     ρ = scfres.ρ
@@ -37,14 +37,14 @@
 dmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])
 @printf "\nOptimal bond length for Ecut=%.2f: %.3f Bohr\n" Ecut dmin
Iter     Function value   Gradient norm
      0    -1.061651e+00     6.219313e-01
- * time: 5.221366882324219e-5
-     1    -1.064073e+00     2.919806e-01
- * time: 1.2110631465911865
-     2    -1.066008e+00     4.821012e-02
- * time: 1.894124984741211
-     3    -1.066049e+00     4.314762e-04
- * time: 2.318270206451416
-     4    -1.066049e+00     6.644431e-09
- * time: 2.6028940677642822
+ * time: 5.602836608886719e-5
+     1    -1.064073e+00     2.919810e-01
+ * time: 0.8917829990386963
+     2    -1.066008e+00     4.821024e-02
+ * time: 1.5752720832824707
+     3    -1.066049e+00     4.314832e-04
+ * time: 2.04148006439209
+     4    -1.066049e+00     6.954653e-09
+ * time: 2.338930130004883
 
-Optimal bond length for Ecut=5.00: 1.556 Bohr

We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.

Degrees of freedom

We used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as $H_2O$). In the particular case of $H_2$, we could use only the internal degree of freedom which, in this case, is just the bond length.

+Optimal bond length for Ecut=5.00: 1.556 Bohr

We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.

Degrees of freedom

We used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as $H_2O$). In the particular case of $H_2$, we could use only the internal degree of freedom which, in this case, is just the bond length.

diff --git a/dev/examples/graphene.ipynb b/dev/examples/graphene.ipynb index db7b7fca31..fde53abe50 100644 --- a/dev/examples/graphene.ipynb +++ b/dev/examples/graphene.ipynb @@ -24,297 +24,297 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -11.15658405711 -0.60 5.9 \n", - " 2 -11.16018940108 -2.44 -1.30 1.0 144ms\n", - " 3 -11.16039415038 -3.69 -2.34 2.1 143ms\n", - " 4 -11.16041686534 -4.64 -3.21 2.7 178ms\n", - " 5 -11.16041703644 -6.77 -3.34 3.0 169ms\n", - " 6 -11.16041704235 -8.23 -3.48 1.1 113ms\n", - " 7 -11.16041704742 -8.30 -3.76 1.3 131ms\n", - " 8 -11.16041705023 -8.55 -4.07 2.1 139ms\n", - " 9 -11.16041705130 -8.97 -4.64 2.1 145ms\n", - " 10 -11.16041705141 -9.94 -5.04 2.3 153ms\n", - " 11 -11.16041705144 -10.54 -5.36 2.9 157ms\n", - " 12 -11.16041705145 -11.11 -5.76 2.1 152ms\n", - " 13 -11.16041705145 -11.91 -6.41 2.7 160ms\n" + " 1 -11.15667862277 -0.60 6.1 305ms\n", + " 2 -11.16021444267 -2.45 -1.30 1.0 139ms\n", + " 3 -11.16039737706 -3.74 -2.34 2.0 158ms\n", + " 4 -11.16041648429 -4.72 -3.24 2.3 186ms\n", + " 5 -11.16041703869 -6.26 -3.38 2.4 212ms\n", + " 6 -11.16041704589 -8.14 -3.52 1.0 150ms\n", + " 7 -11.16041704810 -8.66 -3.68 1.0 122ms\n", + " 8 -11.16041705026 -8.67 -4.05 1.0 121ms\n", + " 9 -11.16041705113 -9.06 -4.52 1.3 128ms\n", + " 10 -11.16041705138 -9.61 -4.96 1.6 138ms\n", + " 11 -11.16041705144 -10.21 -5.47 1.9 149ms\n", + " 12 -11.16041705145 -11.04 -5.88 2.1 173ms\n", + " 13 -11.16041705145 -12.04 -6.46 2.0 167ms\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=25}", - "image/png": "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", + "image/png": "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QkNDmzVrtm/fvsaNGxfn3EZGRk2aNPneT5s0abJ69WqxWMzhcC5cuFCpUiVra2tJYgBcLrd+/frx8fFxcXEODg48Hu/GjRurVq366iCPHz+W7EUI+ZxYLG7UqOu//w4WCnVNTLr263cVUNYZRYvNyQl16mD/fgwezDoKUUfSCyEANze3qKgoAJmZmaampjL8M7l3797z5s0bNmxYw4YNFyxYMGPGDMkN2G7dutWqVWvhwoWWlpb+/v7e3t4jR448cOBAixYt3NzcAIwePdrKyqpcuXLR0dHh4eHnzp2TVSRC1EZiYmJmplVBwVAAenqXnz59WqNGDdahZCA4GBMnUiEkclF0eTMzM5PtzSJ9ff3r16/b29tHR0evW7du+PDhku1Dhgzp1KmT5PW6deuGDRt28+bNjh07Hjp0SLLRy8srLy/v3r17tra2jx49KublKSEaxcrKisd7BSQCKRzOg+I81FcJ7doBwJ9/ss5B1BFHao+ahQsXfvz48dvtZmZmjo6O7dq1U/K1mXx8fOgZIflZPB5PDZ4R7tiBGTOumpnN5XKFK1dO79SpnYIDSDrLyPYZocT27YiMxMmTMj8wUVuSZ4RFfhql3xrdvXv369ev8/PzAZiammZnZwPQ19fncDi5ubkmJib79u37dqAhIYStPXswdy6uX29aocJ51llkb8AAzJqFJ09QVenWEiaqTfofvyEhITY2NocOHcrNzc3Kyvrw4UNoaKiVldXVq1efPHlSt25dX19fqZeMhBBWoqIweTJOn0aFCqyjyIeeHoYPx7p1rHMQtSOlEIpEooCAgJUrV/bq1UtfXx+AsbHxsGHDxowZM27cOBcXl/3792dnZ//1118KT0sIke78eQQE4ORJfJqjXj0FBuLgQZR4eitCviB9irX4+HhJR83Pubm53blzB0C5cuXKly///v17RQQkhBTl+nX074/Dh1GnDusocmZlhe7dERrKOgdRL1IKobGxsba29p/fdM/6888/zczMJK95PF6pUqXkno4QUpToaPTsiV270KwZ6ygKMX48NmxAfj7rHESNSJ9r1Nvbe/z48e/evevatauFhcXbt28PHjy4bt26adOmAXjy5Mm7d+9cXV0VnpYQ8oWYGHTqhK1b0aED6yiK4uoKFxccOoT+/VlHIepCeq/R0NBQsVg8f/78efPmSbbo6OiMGTNG8lZb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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -367,11 +367,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/graphene/4ca18e88.svg b/dev/examples/graphene/4ca18e88.svg new file mode 100644 index 0000000000..c70b8f6da5 --- /dev/null +++ b/dev/examples/graphene/4ca18e88.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/graphene/index.html b/dev/examples/graphene/index.html index 04c3d193b7..a400546fab 100644 --- a/dev/examples/graphene/index.html +++ b/dev/examples/graphene/index.html @@ -1,5 +1,5 @@ -Graphene band structure · DFTK.jl

Graphene band structure

This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.

using DFTK
+Graphene band structure · DFTK.jl

Graphene band structure

This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.

using DFTK
 using Unitful
 using UnitfulAtomic
 using LinearAlgebra
@@ -31,4 +31,4 @@
 # Construct 2D path through Brillouin zone
 kpath = irrfbz_path(model; dim=2, space_group_number=13)  # graphene space group number
 bands = compute_bands(scfres, kpath; kline_density=20)
-plot_bandstructure(bands)
Example block output
+plot_bandstructure(bands)
Example block output
diff --git a/dev/examples/gross_pitaevskii.ipynb b/dev/examples/gross_pitaevskii.ipynb index 9f7207f445..8f9533d6d0 100644 --- a/dev/examples/gross_pitaevskii.ipynb +++ b/dev/examples/gross_pitaevskii.ipynb @@ -125,121 +125,63 @@ "name": "stdout", "output_type": "stream", "text": [ - "Iter Function value Gradient norm \n", - " 0 1.633091e+02 1.314404e+02\n", - " * time: 0.0003960132598876953\n", - " 1 1.628233e+02 1.067410e+02\n", - " * time: 0.0017771720886230469\n", - " 2 1.246215e+02 1.135899e+02\n", - " * time: 0.0032761096954345703\n", - " 3 5.515484e+01 7.953222e+01\n", - " * time: 0.004903078079223633\n", - " 4 3.076347e+01 6.024823e+01\n", - " * time: 0.006350040435791016\n", - " 5 9.145947e+00 9.135438e+00\n", - " * time: 0.007661104202270508\n", - " 6 8.376360e+00 1.194032e+01\n", - " * time: 0.008378982543945312\n", - " 7 6.858770e+00 2.136234e+01\n", - " * time: 0.009282112121582031\n", - " 8 5.042494e+00 9.086036e+00\n", - " * time: 0.010177135467529297\n", - " 9 2.958888e+00 9.205289e+00\n", - " * time: 0.011100053787231445\n", - " 10 2.511397e+00 1.201224e+01\n", - " * time: 0.011981010437011719\n", - " 11 2.035523e+00 1.843216e+00\n", - " * time: 0.012667179107666016\n", - " 12 1.686135e+00 1.671131e+00\n", - " * time: 0.013352155685424805\n", - " 13 1.531651e+00 1.799601e+00\n", - " * time: 0.0140380859375\n", - " 14 1.364551e+00 1.706387e+00\n", - " * time: 0.014966964721679688\n", - " 15 1.260913e+00 1.938135e+00\n", - " * time: 0.01566600799560547\n", - " 16 1.188800e+00 1.431349e+00\n", - " * time: 0.01636505126953125\n", - " 17 1.169154e+00 1.006827e+00\n", - " * time: 0.017055988311767578\n", - " 18 1.153718e+00 1.884601e-01\n", - " * time: 0.01774907112121582\n", - " 19 1.148910e+00 1.470082e-01\n", - " * time: 0.018440961837768555\n", - " 20 1.146499e+00 9.977355e-02\n", - " * time: 0.01917099952697754\n", - " 21 1.145788e+00 9.469442e-02\n", - " * time: 0.019870996475219727\n", - " 22 1.144583e+00 5.367152e-02\n", - " * time: 0.020565032958984375\n", - " 23 1.144188e+00 3.571356e-02\n", - " * time: 0.02127218246459961\n", - " 24 1.144096e+00 2.344686e-02\n", - " * time: 0.021967172622680664\n", - " 25 1.144055e+00 1.899076e-02\n", - " * time: 0.022665023803710938\n", - " 26 1.144047e+00 8.165943e-03\n", - " * time: 0.023389101028442383\n", - " 27 1.144042e+00 9.170803e-03\n", - " * time: 0.02408599853515625\n", - " 28 1.144040e+00 6.613885e-03\n", - " * time: 0.024584054946899414\n", - " 29 1.144039e+00 5.354594e-03\n", - " * time: 0.025344133377075195\n", - " 30 1.144038e+00 3.624948e-03\n", - " * time: 0.026057958602905273\n", - " 31 1.144037e+00 2.418805e-03\n", - " * time: 0.02675604820251465\n", - " 32 1.144037e+00 1.482571e-03\n", - " * time: 0.027493953704833984\n", - " 33 1.144037e+00 9.056684e-04\n", - " * time: 0.02819204330444336\n", - " 34 1.144037e+00 4.101067e-04\n", - " * time: 0.0288851261138916\n", - " 35 1.144037e+00 2.779768e-04\n", - " * time: 0.029584169387817383\n", - " 36 1.144037e+00 1.883148e-04\n", - " * time: 0.03028702735900879\n", - " 37 1.144037e+00 9.433983e-05\n", - " * time: 0.030996084213256836\n", - " 38 1.144037e+00 8.891334e-05\n", - " * time: 0.03169608116149902\n", - " 39 1.144037e+00 5.369854e-05\n", - " * time: 0.03239917755126953\n", - " 40 1.144037e+00 3.948942e-05\n", - " * time: 0.033082008361816406\n", - " 41 1.144037e+00 2.141483e-05\n", - " * time: 0.03376007080078125\n", - " 42 1.144037e+00 2.363577e-05\n", - " * time: 0.03444504737854004\n", - " 43 1.144037e+00 1.929650e-05\n", - " * time: 0.03516101837158203\n", - " 44 1.144037e+00 1.212931e-05\n", - " * time: 0.035932064056396484\n", - " 45 1.144037e+00 1.289182e-05\n", - " * time: 0.036628007888793945\n", - " 46 1.144037e+00 1.066535e-05\n", - " * time: 0.037310123443603516\n", - " 47 1.144037e+00 3.896521e-06\n", - " * time: 0.03800511360168457\n", - " 48 1.144037e+00 2.999333e-06\n", - " * time: 0.0387110710144043\n", - " 49 1.144037e+00 3.137671e-06\n", - " * time: 0.03942108154296875\n", - " 50 1.144037e+00 1.179485e-06\n", - " * time: 0.040110111236572266\n", - " 51 1.144037e+00 6.337469e-07\n", - " * time: 0.040802001953125\n", - " 52 1.144037e+00 4.038733e-07\n", - " * time: 0.04149794578552246\n", - " 53 1.144037e+00 2.849172e-07\n", - " * time: 0.04219198226928711\n", - " 54 1.144037e+00 2.272381e-07\n", - " * time: 0.0429229736328125\n", - " 55 1.144037e+00 2.046963e-07\n", - " * time: 0.0436701774597168\n", - " 56 1.144037e+00 1.490639e-07\n", - " * time: 0.04438614845275879\n" + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +175.8585880417 -1.56 352ms\n", + " 2 +129.5537322850 1.67 -0.88 1.55ms\n", + " 3 +92.29920586671 1.57 -0.64 1.53ms\n", + " 4 +26.05532722162 1.82 -0.47 1.51ms\n", + " 5 +19.45968714948 0.82 -0.37 1.20ms\n", + " 6 +6.450481715121 1.11 -0.29 1.01ms\n", + " 7 +4.530740248838 0.28 -0.29 835μs\n", + " 8 +3.564882246402 -0.02 -0.30 829μs\n", + " 9 +2.989994196428 -0.24 -0.22 873μs\n", + " 10 +2.920274634993 -1.16 -0.21 657μs\n", + " 11 +2.436871203130 -0.32 -0.31 646μs\n", + " 12 +2.150553148160 -0.54 -0.25 658μs\n", + " 13 +1.859575300253 -0.54 -0.33 649μs\n", + " 14 +1.592510341702 -0.57 -0.22 804μs\n", + " 15 +1.311372942763 -0.55 -0.66 656μs\n", + " 16 +1.217119717419 -1.03 -0.68 629μs\n", + " 17 +1.181116895844 -1.44 -0.97 474μs\n", + " 18 +1.158230340340 -1.64 -1.81 637μs\n", + " 19 +1.150029737857 -2.09 -1.41 640μs\n", + " 20 +1.148149389462 -2.73 -1.82 632μs\n", + " 21 +1.145414742656 -2.56 -1.59 661μs\n", + " 22 +1.144462037686 -3.02 -1.78 645μs\n", + " 23 +1.144231482906 -3.64 -1.93 639μs\n", + " 24 +1.144104556701 -3.90 -2.40 631μs\n", + " 25 +1.144086419650 -4.74 -2.49 632μs\n", + " 26 +1.144057033384 -4.53 -2.50 631μs\n", + " 27 +1.144043184877 -4.86 -3.08 656μs\n", + " 28 +1.144038693608 -5.35 -3.46 639μs\n", + " 29 +1.144037757352 -6.03 -3.44 637μs\n", + " 30 +1.144037302104 -6.34 -3.69 633μs\n", + " 31 +1.144037143721 -6.80 -4.10 636μs\n", + " 32 +1.144037036942 -6.97 -3.63 635μs\n", + " 33 +1.144036934348 -6.99 -3.85 635μs\n", + " 34 +1.144036900056 -7.46 -4.54 490μs\n", + " 35 +1.144036874429 -7.59 -4.76 636μs\n", + " 36 +1.144036866143 -8.08 -4.42 636μs\n", + " 37 +1.144036858349 -8.11 -4.61 632μs\n", + " 38 +1.144036855014 -8.48 -4.86 626μs\n", + " 39 +1.144036853547 -8.83 -4.83 633μs\n", + " 40 +1.144036852941 -9.22 -5.09 664μs\n", + " 41 +1.144036852843 -10.01 -5.58 639μs\n", + " 42 +1.144036852791 -10.29 -5.76 628μs\n", + " 43 +1.144036852780 -10.96 -5.79 640μs\n", + " 44 +1.144036852768 -10.90 -5.87 648μs\n", + " 45 +1.144036852761 -11.15 -6.30 631μs\n", + " 46 +1.144036852756 -11.36 -6.59 629μs\n", + " 47 +1.144036852756 -12.54 -6.71 668μs\n", + " 48 +1.144036852756 -12.37 -6.65 635μs\n", + " 49 +1.144036852756 -12.75 -6.87 629μs\n", + " 50 +1.144036852755 -12.85 -7.15 633μs\n", + " 51 +1.144036852755 -13.46 -7.41 633μs\n", + " 52 +1.144036852755 -13.95 -7.60 632μs\n", + " 53 +1.144036852755 -14.24 -7.84 647μs\n", + "┌ Warning: DM not converged.\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/scf/scf_callbacks.jl:60\n" ] }, { @@ -328,7 +270,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "8.611812220270945e-16" + "text/plain": "8.419484972269251e-16" }, "metadata": {}, "execution_count": 9 @@ -354,106 +296,106 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=3}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -540,7 +482,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "2.094242960899399e-7" + "text/plain": "2.7472436728393833e-7" }, "metadata": {}, "execution_count": 14 @@ -565,7 +507,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "0.00022342835119930782" + "text/plain": "0.00022338853932528594" }, "metadata": {}, "execution_count": 15 @@ -590,11 +532,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/gross_pitaevskii/12b19b3f.svg b/dev/examples/gross_pitaevskii/4c588a8d.svg similarity index 79% rename from dev/examples/gross_pitaevskii/12b19b3f.svg rename to dev/examples/gross_pitaevskii/4c588a8d.svg index 7cc52a594b..5fb0db40c5 100644 --- a/dev/examples/gross_pitaevskii/12b19b3f.svg +++ b/dev/examples/gross_pitaevskii/4c588a8d.svg @@ -1,48 +1,48 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/gross_pitaevskii/index.html b/dev/examples/gross_pitaevskii/index.html index 445e26e207..c03de3a855 100644 --- a/dev/examples/gross_pitaevskii/index.html +++ b/dev/examples/gross_pitaevskii/index.html @@ -1,5 +1,5 @@ -Gross-Pitaevskii equation in one dimension · DFTK.jl

Gross-Pitaevskii equation in one dimension

In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.

The model

The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by $ψ$ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:

\[ H ψ = \left(-\frac12 Δ + V + 2 C |ψ|^2\right) ψ = μ ψ \qquad \|ψ\|_{L^2} = 1\]

where $C$ provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).

We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,

a = 10
+Gross-Pitaevskii equation in one dimension · DFTK.jl

Gross-Pitaevskii equation in one dimension

In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.

The model

The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by $ψ$ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:

\[ H ψ = \left(-\frac12 Δ + V + 2 C |ψ|^2\right) ψ = μ ψ \qquad \|ψ\|_{L^2} = 1\]

where $C$ provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).

We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,

a = 10
 lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];

which is special cased in DFTK to support 1D models.

For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).

pot(x) = (x - a/2)^2;

We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term $C ∫ ρ(r)^α dr$ to the total energy functional, thus a potential term $α C ρ^{α-1}$. In our case we thus need the parameters

C = 1.0
 α = 2;

… and with this build the model

using DFTK
 using LinearAlgebra
@@ -21,17 +21,17 @@
 ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));

Check whether $ψ$ is normalised:

x = a * vec(first.(DFTK.r_vectors(basis)))
 N = length(x)
 dx = a / N  # real-space grid spacing
-@assert sum(abs2.(ψ)) * dx ≈ 1.0

The density is simply built from ψ:

norm(scfres.ρ - abs2.(ψ))
8.567692832074876e-16

We summarize the ground state in a nice plot:

using Plots
+@assert sum(abs2.(ψ)) * dx ≈ 1.0

The density is simply built from ψ:

norm(scfres.ρ - abs2.(ψ))
1.2106238044223837e-15

We summarize the ground state in a nice plot:

using Plots
 
 p = plot(x, real.(ψ), label="real(ψ)")
 plot!(p, x, imag.(ψ), label="imag(ψ)")
-plot!(p, x, ρ, label="ρ")
Example block output

The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.

E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)
+plot!(p, x, ρ, label="ρ")
Example block output

The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.

E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)
 @assert E.total == scfres.energies.total

Now the Hamiltonian contains all the blocks corresponding to $k$-points. Here, we just have one $k$-point:

H = ham.blocks[1];

H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:

ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector
 Hmat = Array(H)  # This is now just a plain Julia matrix,
 #                  which we can compute and store in this simple 1D example
-@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10

Let's check that ψ11 is indeed an eigenstate:

norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)
1.5983585577531208e-7

Build a finite-differences version of the GPE operator $H$, as a sanity check:

A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))
+@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10

Let's check that ψ11 is indeed an eigenstate:

norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)
1.6882948106596622e-7

Build a finite-differences version of the GPE operator $H$, as a sanity check:

A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))
 A[1, end] = A[end, 1] = -1
 K = A / dx^2 / 2
 V = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))
 H_findiff = K + V;
-maximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))
0.0002234479860409803
+maximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))
0.0002234331537134798
diff --git a/dev/examples/gross_pitaevskii_2D.ipynb b/dev/examples/gross_pitaevskii_2D.ipynb index 1850a2d40d..38cab33754 100644 --- a/dev/examples/gross_pitaevskii_2D.ipynb +++ b/dev/examples/gross_pitaevskii_2D.ipynb @@ -24,2447 +24,1210 @@ "name": "stdout", "output_type": "stream", "text": [ - "Iter Function value Gradient norm \n", - " 0 3.037724e+01 6.381093e+00\n", - " * time: 0.002880096435546875\n", - " 1 2.981328e+01 4.159776e+00\n", - " * time: 0.01270604133605957\n", - " 2 2.058802e+01 4.986973e+00\n", - " * time: 0.02472996711730957\n", - " 3 1.447956e+01 3.807791e+00\n", - " * time: 0.036720991134643555\n", - " 4 1.166531e+01 1.680390e+00\n", - " * time: 0.04865694046020508\n", - " 5 1.148386e+01 2.560697e+00\n", - " * time: 0.05824995040893555\n", - " 6 1.061602e+01 1.715460e+00\n", - " * time: 0.06805109977722168\n", - " 7 9.606305e+00 2.075405e+00\n", - " * time: 0.13120698928833008\n", - " 8 8.977941e+00 1.938164e+00\n", - " * time: 0.1413259506225586\n", - " 9 8.638333e+00 1.195536e+00\n", - " * time: 0.1508800983428955\n", - " 10 8.476676e+00 9.522519e-01\n", - " * time: 0.16042804718017578\n", - " 11 8.316787e+00 8.786884e-01\n", - " * time: 0.16991710662841797\n", - " 12 8.265044e+00 1.414426e+00\n", - " * time: 0.1771409511566162\n", - " 13 8.201335e+00 6.752479e-01\n", - " * time: 0.18453717231750488\n", - " 14 8.132873e+00 5.980728e-01\n", - " * time: 0.19171810150146484\n", - " 15 8.096569e+00 5.780700e-01\n", - " * time: 0.19890999794006348\n", - " 16 8.037850e+00 4.660073e-01\n", - " * time: 0.206071138381958\n", - " 17 7.983130e+00 5.250611e-01\n", - " * time: 0.2132861614227295\n", - " 18 7.964311e+00 6.115125e-01\n", - " * time: 0.2205359935760498\n", - " 19 7.930930e+00 4.037654e-01\n", - " * time: 0.230025053024292\n", - " 20 7.925775e+00 5.313327e-01\n", - " * time: 0.23724102973937988\n", - " 21 7.908712e+00 5.160857e-01\n", - " * time: 0.2444911003112793\n", - " 22 7.889939e+00 4.506247e-01\n", - " * time: 0.25176215171813965\n", - " 23 7.872520e+00 5.695522e-01\n", - " * time: 0.25910115242004395\n", - " 24 7.852609e+00 2.525551e-01\n", - " * time: 0.2663600444793701\n", - " 25 7.833787e+00 2.999857e-01\n", - " * time: 0.2737691402435303\n", - " 26 7.825590e+00 4.399205e-01\n", - " * time: 0.28106117248535156\n", - " 27 7.803644e+00 3.372408e-01\n", - " * time: 0.2883419990539551\n", - " 28 7.785748e+00 3.873699e-01\n", - " * time: 0.2956371307373047\n", - " 29 7.770259e+00 2.177646e-01\n", - " * time: 0.30527710914611816\n", - " 30 7.756819e+00 3.000421e-01\n", - " * time: 0.31264305114746094\n", - " 31 7.739429e+00 1.420306e-01\n", - " * time: 0.3222031593322754\n", - " 32 7.737504e+00 3.215812e-01\n", - " * time: 0.329456090927124\n", - " 33 7.727997e+00 2.528380e-01\n", - " * time: 0.33675193786621094\n", - " 34 7.716101e+00 1.928631e-01\n", - " * time: 0.3463301658630371\n", - " 35 7.704169e+00 2.311121e-01\n", - " * time: 0.3535630702972412\n", - " 36 7.692543e+00 2.910935e-01\n", - " * time: 0.36091113090515137\n", - " 37 7.680863e+00 2.132799e-01\n", - " * time: 0.37055397033691406\n", - " 38 7.668828e+00 2.062367e-01\n", - " * time: 0.377856969833374\n", - " 39 7.664062e+00 1.831592e-01\n", - " * time: 0.3852109909057617\n", - " 40 7.657421e+00 1.591994e-01\n", - " * time: 0.39253807067871094\n", - " 41 7.653996e+00 1.468273e-01\n", - " * time: 0.39997196197509766\n", - " 42 7.649259e+00 1.347680e-01\n", - " * time: 0.4072871208190918\n", - " 43 7.644838e+00 1.483698e-01\n", - " * time: 0.416903018951416\n", - " 44 7.641290e+00 6.363746e-02\n", - " * time: 0.4266350269317627\n", - " 45 7.637617e+00 7.790464e-02\n", - " * time: 0.43440794944763184\n", - " 46 7.637254e+00 1.380345e-01\n", - " * time: 0.4421670436859131\n", - " 47 7.637051e+00 1.213078e-01\n", - " * time: 0.4499320983886719\n", - " 48 7.634976e+00 7.331332e-02\n", - " * time: 0.45767807960510254\n", - " 49 7.633606e+00 1.029669e-01\n", - " * time: 0.4654200077056885\n", - " 50 7.632602e+00 1.273927e-01\n", - " * time: 0.47314000129699707\n", - " 51 7.631286e+00 7.256770e-02\n", - " * time: 0.4810609817504883\n", - " 52 7.630016e+00 6.370138e-02\n", - " * time: 0.48880505561828613\n", - " 53 7.628296e+00 5.540923e-02\n", - " * time: 0.49661898612976074\n", - " 54 7.627532e+00 8.452669e-02\n", - " * time: 0.5478830337524414\n", - " 55 7.626846e+00 7.875266e-02\n", - " * time: 0.5551660060882568\n", - " 56 7.625725e+00 6.189694e-02\n", - " * time: 0.5623431205749512\n", - " 57 7.624215e+00 7.430011e-02\n", - " * time: 0.5718319416046143\n", - " 58 7.622986e+00 3.345727e-02\n", - " * time: 0.58138108253479\n", - " 59 7.622766e+00 8.319634e-02\n", - " * time: 0.5886869430541992\n", - " 60 7.622005e+00 5.860601e-02\n", - " * time: 0.59592604637146\n", - " 61 7.621970e+00 6.881776e-02\n", - " * time: 0.603093147277832\n", - " 62 7.621914e+00 9.922788e-02\n", - " * time: 0.6102721691131592\n", - " 63 7.621594e+00 4.730655e-02\n", - " * time: 0.6175129413604736\n", - " 64 7.621106e+00 7.476657e-02\n", - " * time: 0.6247739791870117\n", - " 65 7.620271e+00 5.616216e-02\n", - " * time: 0.6320080757141113\n", - " 66 7.620128e+00 7.607664e-02\n", - " * time: 0.6391520500183105\n", - " 67 7.619836e+00 5.539769e-02\n", - " * time: 0.6464049816131592\n", - " 68 7.619074e+00 6.596366e-02\n", - " * time: 0.6536180973052979\n", - " 69 7.618126e+00 4.757335e-02\n", - " * time: 0.6608321666717529\n", - " 70 7.617119e+00 4.094468e-02\n", - " * time: 0.6704249382019043\n", - " 71 7.617007e+00 7.160892e-02\n", - " * time: 0.6777091026306152\n", - " 72 7.616452e+00 4.687226e-02\n", - " * time: 0.6874330043792725\n", - " 73 7.615981e+00 4.205944e-02\n", - " * time: 0.696958065032959\n", - " 74 7.615947e+00 6.105083e-02\n", - " * time: 0.7042219638824463\n", - " 75 7.615838e+00 6.275697e-02\n", - " * time: 0.7114410400390625\n", - " 76 7.615495e+00 6.049119e-02\n", - " * time: 0.7187221050262451\n", - " 77 7.614878e+00 4.011868e-02\n", - " * time: 0.7283051013946533\n", - " 78 7.614372e+00 3.490781e-02\n", - " * time: 0.7378311157226562\n", - " 79 7.614112e+00 4.577965e-02\n", - " * time: 0.7450571060180664\n", - " 80 7.613864e+00 3.502447e-02\n", - " * time: 0.7522311210632324\n", - " 81 7.613500e+00 3.496642e-02\n", - " * time: 0.7594480514526367\n", - " 82 7.613280e+00 4.171058e-02\n", - " * time: 0.7667200565338135\n", - " 83 7.612995e+00 3.496757e-02\n", - " * time: 0.7740390300750732\n", - " 84 7.612986e+00 4.407317e-02\n", - " * time: 0.7812540531158447\n", - " 85 7.612601e+00 2.928489e-02\n", - " * time: 0.7885620594024658\n", - " 86 7.612390e+00 3.738291e-02\n", - " * time: 0.7958049774169922\n", - " 87 7.612227e+00 3.232877e-02\n", - " * time: 0.8031401634216309\n", - " 88 7.612096e+00 2.858408e-02\n", - " * time: 0.810460090637207\n", - " 89 7.611861e+00 2.625658e-02\n", - " * time: 0.8177599906921387\n", - " 90 7.611818e+00 4.875148e-02\n", - " * time: 0.8249471187591553\n", - " 91 7.611648e+00 2.700986e-02\n", - " * time: 0.8345820903778076\n", - " 92 7.611534e+00 3.564914e-02\n", - " * time: 0.8423330783843994\n", - " 93 7.611356e+00 2.676178e-02\n", - " * time: 0.8525969982147217\n", - " 94 7.611258e+00 4.596808e-02\n", - " * time: 0.8603529930114746\n", - " 95 7.611042e+00 1.940990e-02\n", - " * time: 0.8705661296844482\n", - " 96 7.610978e+00 1.905856e-02\n", - " * time: 0.8783011436462402\n", - " 97 7.610904e+00 2.493700e-02\n", - " * time: 0.886214017868042\n", - " 98 7.610891e+00 3.422615e-02\n", - " * time: 0.8939571380615234\n", - " 99 7.610829e+00 3.091271e-02\n", - " * time: 0.9017269611358643\n", - " 100 7.610709e+00 3.075899e-02\n", - " * time: 0.9480979442596436\n", - " 101 7.610636e+00 2.474049e-02\n", - " * time: 0.9553329944610596\n", - " 102 7.610550e+00 3.039716e-02\n", - " * time: 0.9625890254974365\n", - " 103 7.610470e+00 4.008256e-02\n", - " * time: 0.9697489738464355\n", - " 104 7.610309e+00 2.735220e-02\n", - " * time: 0.9769091606140137\n", - " 105 7.610118e+00 1.840952e-02\n", - " * time: 0.9863541126251221\n", - " 106 7.609999e+00 2.618723e-02\n", - " * time: 0.9935150146484375\n", - " 107 7.609858e+00 3.315526e-02\n", - " * time: 1.000688076019287\n", - " 108 7.609714e+00 2.313424e-02\n", - " * time: 1.0100691318511963\n", - " 109 7.609573e+00 1.671842e-02\n", - " * time: 1.0194511413574219\n", - " 110 7.609499e+00 1.825163e-02\n", - " * time: 1.0289840698242188\n", - " 111 7.609471e+00 3.049186e-02\n", - " * time: 1.036210060119629\n", - " 112 7.609354e+00 2.322178e-02\n", - " * time: 1.0457451343536377\n", - " 113 7.609347e+00 3.352165e-02\n", - " * time: 1.0530109405517578\n", - " 114 7.609346e+00 3.034342e-02\n", - " * time: 1.0601930618286133\n", - " 115 7.609253e+00 1.460698e-02\n", - " * time: 1.067352056503296\n", - " 116 7.609126e+00 1.635200e-02\n", - " * time: 1.074660062789917\n", - " 117 7.609038e+00 2.926530e-02\n", - " * time: 1.0819110870361328\n", - " 118 7.608961e+00 2.186074e-02\n", - " * time: 1.0892610549926758\n", - " 119 7.608878e+00 2.467938e-02\n", - " * time: 1.096445083618164\n", - " 120 7.608811e+00 2.439884e-02\n", - " * time: 1.1036810874938965\n", - " 121 7.608691e+00 2.356077e-02\n", - " * time: 1.1108801364898682\n", - " 122 7.608574e+00 1.504062e-02\n", - " * time: 1.120535135269165\n", - " 123 7.608544e+00 2.730111e-02\n", - " * time: 1.1276700496673584\n", - " 124 7.608447e+00 2.482282e-02\n", - " * time: 1.1372060775756836\n", - " 125 7.608340e+00 1.480022e-02\n", - " * time: 1.1466879844665527\n", - " 126 7.608291e+00 1.711096e-02\n", - " * time: 1.1539640426635742\n", - " 127 7.608213e+00 1.492041e-02\n", - " * time: 1.1611969470977783\n", - " 128 7.608125e+00 1.171737e-02\n", - " * time: 1.170715093612671\n", - " 129 7.608060e+00 1.135913e-02\n", - " * time: 1.1804029941558838\n", - " 130 7.608053e+00 2.726307e-02\n", - " * time: 1.1877110004425049\n", - " 131 7.607975e+00 1.627592e-02\n", - " * time: 1.1973121166229248\n", - " 132 7.607957e+00 2.132510e-02\n", - " * time: 1.2047200202941895\n", - " 133 7.607897e+00 1.794479e-02\n", - " * time: 1.2121851444244385\n", - " 134 7.607763e+00 1.611416e-02\n", - " * time: 1.2195501327514648\n", - " 135 7.607684e+00 1.793977e-02\n", - " * time: 1.2268400192260742\n", - " 136 7.607623e+00 2.824284e-02\n", - " * time: 1.2341420650482178\n", - " 137 7.607532e+00 1.957310e-02\n", - " * time: 1.244441032409668\n", - " 138 7.607449e+00 2.157271e-02\n", - " * time: 1.2547049522399902\n", - " 139 7.607400e+00 2.812741e-02\n", - " * time: 1.2624940872192383\n", - " 140 7.607303e+00 2.418323e-02\n", - " * time: 1.2702560424804688\n", - " 141 7.607186e+00 1.848231e-02\n", - " * time: 1.2805521488189697\n", - " 142 7.607081e+00 2.228271e-02\n", - " * time: 1.2883400917053223\n", - " 143 7.606931e+00 1.867274e-02\n", - " * time: 1.2988040447235107\n", - " 144 7.606823e+00 1.860694e-02\n", - " * time: 1.306584119796753\n", - " 145 7.606727e+00 2.544892e-02\n", - " * time: 1.3363721370697021\n", - " 146 7.606607e+00 2.195777e-02\n", - " * time: 1.3459179401397705\n", - " 147 7.606490e+00 2.763184e-02\n", - " * time: 1.353093147277832\n", - " 148 7.606414e+00 2.673736e-02\n", - " * time: 1.3625190258026123\n", - " 149 7.606296e+00 2.380817e-02\n", - " * time: 1.3696479797363281\n", - " 150 7.606187e+00 3.343622e-02\n", - " * time: 1.3790571689605713\n", - " 151 7.606166e+00 3.769047e-02\n", - " * time: 1.3867261409759521\n", - " 152 7.606037e+00 2.297165e-02\n", - " * time: 1.3962681293487549\n", - " 153 7.605901e+00 3.822535e-02\n", - " * time: 1.4034180641174316\n", - " 154 7.605817e+00 2.977800e-02\n", - " * time: 1.4105660915374756\n", - " 155 7.605764e+00 4.315614e-02\n", - " * time: 1.4177119731903076\n", - " 156 7.605552e+00 3.310018e-02\n", - " * time: 1.4249780178070068\n", - " 157 7.605422e+00 3.551762e-02\n", - " * time: 1.4345901012420654\n", - " 158 7.605300e+00 2.753903e-02\n", - " * time: 1.4441640377044678\n", - " 159 7.605187e+00 1.951127e-02\n", - " * time: 1.4537580013275146\n", - " 160 7.605110e+00 4.514316e-02\n", - " * time: 1.4610600471496582\n", - " 161 7.605102e+00 2.377386e-02\n", - " * time: 1.4683561325073242\n", - " 162 7.605079e+00 4.660088e-02\n", - " * time: 1.4755520820617676\n", - " 163 7.604967e+00 3.064494e-02\n", - " * time: 1.4851469993591309\n", - " 164 7.604944e+00 3.986591e-02\n", - " * time: 1.492440938949585\n", - " 165 7.604840e+00 3.090575e-02\n", - " * time: 1.4997961521148682\n", - " 166 7.604644e+00 2.396308e-02\n", - " * time: 1.5070300102233887\n", - " 167 7.604565e+00 3.440223e-02\n", - " * time: 1.5142951011657715\n", - " 168 7.604381e+00 2.871094e-02\n", - " * time: 1.5239861011505127\n", - " 169 7.604288e+00 2.247634e-02\n", - " * time: 1.5336129665374756\n", - " 170 7.604188e+00 2.215584e-02\n", - " * time: 1.5431370735168457\n", - " 171 7.604106e+00 2.473051e-02\n", - " * time: 1.552685022354126\n", - " 172 7.603986e+00 1.862775e-02\n", - " * time: 1.5622100830078125\n", - " 173 7.603939e+00 1.838160e-02\n", - " * time: 1.5694501399993896\n", - " 174 7.603850e+00 1.624568e-02\n", - " * time: 1.5766949653625488\n", - " 175 7.603785e+00 3.221452e-02\n", - " * time: 1.5840470790863037\n", - " 176 7.603780e+00 4.447288e-02\n", - " * time: 1.5913259983062744\n", - " 177 7.603628e+00 3.807737e-02\n", - " * time: 1.5987839698791504\n", - " 178 7.603546e+00 4.210791e-02\n", - " * time: 1.6061630249023438\n", - " 179 7.603525e+00 4.810542e-02\n", - " * time: 1.6134271621704102\n", - " 180 7.603328e+00 3.040833e-02\n", - " * time: 1.6230721473693848\n", - " 181 7.603220e+00 3.910726e-02\n", - " * time: 1.6308960914611816\n", - " 182 7.603122e+00 3.501978e-02\n", - " * time: 1.6386981010437012\n", - " 183 7.602994e+00 2.215705e-02\n", - " * time: 1.6464769840240479\n", - " 184 7.602867e+00 3.192834e-02\n", - " * time: 1.654310941696167\n", - " 185 7.602866e+00 2.680291e-02\n", - " * time: 1.662086009979248\n", - " 186 7.602743e+00 2.909559e-02\n", - " * time: 1.6699011325836182\n", - " 187 7.602605e+00 1.908315e-02\n", - " * time: 1.6801891326904297\n", - " 188 7.602534e+00 3.591171e-02\n", - " * time: 1.6879611015319824\n", - " 189 7.602477e+00 2.743886e-02\n", - " * time: 1.6957249641418457\n", - " 190 7.602347e+00 1.981461e-02\n", - " * time: 1.7280371189117432\n", - " 191 7.602334e+00 2.444570e-02\n", - " * time: 1.73545503616333\n", - " 192 7.602320e+00 2.838044e-02\n", - " * time: 1.742704153060913\n", - " 193 7.602285e+00 2.738406e-02\n", - " * time: 1.7499771118164062\n", - " 194 7.602236e+00 2.125300e-02\n", - " * time: 1.7571849822998047\n", - " 195 7.602191e+00 1.904323e-02\n", - " * time: 1.764374017715454\n", - " 196 7.602165e+00 2.416553e-02\n", - " * time: 1.7716960906982422\n", - " 197 7.602113e+00 1.610496e-02\n", - " * time: 1.778947114944458\n", - " 198 7.602054e+00 1.555461e-02\n", - " * time: 1.7862210273742676\n", - " 199 7.602020e+00 2.013383e-02\n", - " * time: 1.7934820652008057\n", - " 200 7.601983e+00 1.339228e-02\n", - " * time: 1.8029870986938477\n", - " 201 7.601963e+00 1.790934e-02\n", - " * time: 1.8101401329040527\n", - " 202 7.601950e+00 2.894770e-02\n", - " * time: 1.8173861503601074\n", - " 203 7.601906e+00 1.833470e-02\n", - " * time: 1.827010154724121\n", - " 204 7.601901e+00 1.385790e-02\n", - " * time: 1.8343689441680908\n", - " 205 7.601889e+00 1.145729e-02\n", - " * time: 1.8416409492492676\n", - " 206 7.601884e+00 1.488352e-02\n", - " * time: 1.8489480018615723\n", - " 207 7.601871e+00 1.550524e-02\n", - " * time: 1.8561601638793945\n", - " 208 7.601849e+00 1.182093e-02\n", - " * time: 1.8634099960327148\n", - " 209 7.601829e+00 1.348586e-02\n", - " * time: 1.8706560134887695\n", - " 210 7.601800e+00 1.363816e-02\n", - " * time: 1.8779089450836182\n", - " 211 7.601782e+00 1.550582e-02\n", - " * time: 1.8851900100708008\n", - " 212 7.601753e+00 9.012087e-03\n", - " * time: 1.8948211669921875\n", - " 213 7.601729e+00 5.433038e-03\n", - " * time: 1.9046540260314941\n", - " 214 7.601719e+00 9.791761e-03\n", - " * time: 1.912003993988037\n", - " 215 7.601697e+00 8.170285e-03\n", - " * time: 1.9216110706329346\n", - " 216 7.601696e+00 1.179941e-02\n", - " * time: 1.9289281368255615\n", - " 217 7.601691e+00 1.262189e-02\n", - " * time: 1.9362201690673828\n", - " 218 7.601669e+00 1.038089e-02\n", - " * time: 1.9457571506500244\n", - " 219 7.601668e+00 1.516038e-02\n", - " * time: 1.9530410766601562\n", - " 220 7.601660e+00 1.152270e-02\n", - " * time: 1.9604289531707764\n", - " 221 7.601644e+00 8.871114e-03\n", - " * time: 1.9676711559295654\n", - " 222 7.601628e+00 5.926323e-03\n", - " * time: 1.9750421047210693\n", - " 223 7.601605e+00 8.438991e-03\n", - " * time: 1.982283115386963\n", - " 224 7.601601e+00 1.269291e-02\n", - " * time: 1.9897799491882324\n", - " 225 7.601585e+00 1.030556e-02\n", - " * time: 1.9994311332702637\n", - " 226 7.601576e+00 1.197320e-02\n", - " * time: 2.0067241191864014\n", - " 227 7.601574e+00 1.150881e-02\n", - " * time: 2.0139009952545166\n", - " 228 7.601569e+00 8.293309e-03\n", - " * time: 2.021688938140869\n", - " 229 7.601559e+00 6.930790e-03\n", - " * time: 2.029468059539795\n", - " 230 7.601558e+00 1.037921e-02\n", - " * time: 2.0372350215911865\n", - " 231 7.601546e+00 7.830343e-03\n", - " * time: 2.0474870204925537\n", - " 232 7.601545e+00 1.181493e-02\n", - " * time: 2.0553030967712402\n", - " 233 7.601531e+00 9.750505e-03\n", - " * time: 2.0630569458007812\n", - " 234 7.601525e+00 1.297294e-02\n", - " * time: 2.0707950592041016\n", - " 235 7.601505e+00 6.481312e-03\n", - " * time: 2.0811281204223633\n", - " 236 7.601498e+00 6.876409e-03\n", - " * time: 2.1134519577026367\n", - " 237 7.601494e+00 1.035101e-02\n", - " * time: 2.1207549571990967\n", - " 238 7.601481e+00 7.318407e-03\n", - " * time: 2.1302061080932617\n", - " 239 7.601472e+00 6.564450e-03\n", - " * time: 2.1397480964660645\n", - " 240 7.601466e+00 8.276492e-03\n", - " * time: 2.1492040157318115\n", - " 241 7.601454e+00 4.336457e-03\n", - " * time: 2.1587250232696533\n", - " 242 7.601448e+00 5.737646e-03\n", - " * time: 2.1659770011901855\n", - " 243 7.601436e+00 3.837570e-03\n", - " * time: 2.175446033477783\n", - " 244 7.601430e+00 3.872010e-03\n", - " * time: 2.182711124420166\n", - " 245 7.601429e+00 8.180694e-03\n", - " * time: 2.1898751258850098\n", - " 246 7.601420e+00 5.700410e-03\n", - " * time: 2.197122097015381\n", - " 247 7.601414e+00 5.389852e-03\n", - " * time: 2.206611156463623\n", - " 248 7.601408e+00 5.723657e-03\n", - " * time: 2.213961124420166\n", - " 249 7.601398e+00 3.608674e-03\n", - " * time: 2.221248149871826\n", - " 250 7.601395e+00 5.354652e-03\n", - " * time: 2.228492021560669\n", - " 251 7.601388e+00 3.997837e-03\n", - " * time: 2.2357380390167236\n", - " 252 7.601381e+00 5.623454e-03\n", - " * time: 2.242889165878296\n", - " 253 7.601377e+00 6.617498e-03\n", - " * time: 2.250272035598755\n", - " 254 7.601376e+00 7.701827e-03\n", - " * time: 2.25770902633667\n", - " 255 7.601371e+00 7.171262e-03\n", - " * time: 2.2649970054626465\n", - " 256 7.601364e+00 9.271156e-03\n", - " * time: 2.272346019744873\n", - " 257 7.601360e+00 6.830213e-03\n", - " * time: 2.2796969413757324\n", - " 258 7.601350e+00 6.623605e-03\n", - " * time: 2.2869479656219482\n", - " 259 7.601339e+00 5.451005e-03\n", - " * time: 2.2966301441192627\n", - " 260 7.601330e+00 8.973889e-03\n", - " * time: 2.3040289878845215\n", - " 261 7.601319e+00 4.537507e-03\n", - " * time: 2.313584089279175\n", - " 262 7.601312e+00 5.072292e-03\n", - " * time: 2.3208961486816406\n", - " 263 7.601300e+00 6.266318e-03\n", - " * time: 2.3281421661376953\n", - " 264 7.601283e+00 4.542189e-03\n", - " * time: 2.337722063064575\n", - " 265 7.601272e+00 5.234640e-03\n", - " * time: 2.34743595123291\n", - " 266 7.601265e+00 6.397449e-03\n", - " * time: 2.3570361137390137\n", - " 267 7.601254e+00 6.374478e-03\n", - " * time: 2.3666231632232666\n", - " 268 7.601240e+00 3.426738e-03\n", - " * time: 2.3763930797576904\n", - " 269 7.601233e+00 5.909242e-03\n", - " * time: 2.3839550018310547\n", - " 270 7.601217e+00 6.604057e-03\n", - " * time: 2.3912789821624756\n", - " 271 7.601204e+00 5.410976e-03\n", - " * time: 2.4009909629821777\n", - " 272 7.601193e+00 6.969133e-03\n", - " * time: 2.4088070392608643\n", - " 273 7.601184e+00 9.036120e-03\n", - " * time: 2.41658616065979\n", - " 274 7.601181e+00 7.970427e-03\n", - " * time: 2.424376964569092\n", - " 275 7.601164e+00 4.246503e-03\n", - " * time: 2.432157039642334\n", - " 276 7.601155e+00 5.933761e-03\n", - " * time: 2.4399361610412598\n", - " 277 7.601146e+00 4.666686e-03\n", - " * time: 2.447697162628174\n", - " 278 7.601138e+00 6.816607e-03\n", - " * time: 2.4554100036621094\n", - " 279 7.601132e+00 6.528224e-03\n", - " * time: 2.463163137435913\n", - " 280 7.601124e+00 5.229913e-03\n", - " * time: 2.4709300994873047\n", - " 281 7.601121e+00 7.793222e-03\n", - " * time: 2.500998020172119\n", - " 282 7.601117e+00 7.001286e-03\n", - " * time: 2.508352041244507\n", - " 283 7.601112e+00 6.136295e-03\n", - " * time: 2.515529155731201\n", - " 284 7.601111e+00 1.024779e-02\n", - " * time: 2.522693157196045\n", - " 285 7.601100e+00 4.554027e-03\n", - " * time: 2.5321810245513916\n", - " 286 7.601093e+00 5.735950e-03\n", - " * time: 2.5393850803375244\n", - " 287 7.601086e+00 6.748545e-03\n", - " * time: 2.546635150909424\n", - " 288 7.601079e+00 4.852442e-03\n", - " * time: 2.556102991104126\n", - " 289 7.601077e+00 6.332513e-03\n", - " * time: 2.563260078430176\n", - " 290 7.601069e+00 5.103183e-03\n", - " * time: 2.5728721618652344\n", - " 291 7.601068e+00 6.056321e-03\n", - " * time: 2.5800750255584717\n", - " 292 7.601064e+00 5.009849e-03\n", - " * time: 2.5897140502929688\n", - " 293 7.601061e+00 4.091406e-03\n", - " * time: 2.5993380546569824\n", - " 294 7.601057e+00 6.261544e-03\n", - " * time: 2.6066181659698486\n", - " 295 7.601052e+00 7.638037e-03\n", - " * time: 2.6140689849853516\n", - " 296 7.601051e+00 4.950276e-03\n", - " * time: 2.6214540004730225\n", - " 297 7.601048e+00 5.759196e-03\n", - " * time: 2.6288020610809326\n", - " 298 7.601045e+00 4.633433e-03\n", - " * time: 2.636070966720581\n", - " 299 7.601043e+00 5.321379e-03\n", - " * time: 2.6433069705963135\n", - " 300 7.601041e+00 5.678146e-03\n", - " * time: 2.650499105453491\n", - " 301 7.601038e+00 5.343734e-03\n", - " * time: 2.657829999923706\n", - " 302 7.601031e+00 2.499952e-03\n", - " * time: 2.667551040649414\n", - " 303 7.601026e+00 2.893549e-03\n", - " * time: 2.6748650074005127\n", - " 304 7.601024e+00 6.040359e-03\n", - " * time: 2.6821341514587402\n", - " 305 7.601022e+00 3.269114e-03\n", - " * time: 2.691756010055542\n", - " 306 7.601020e+00 3.623033e-03\n", - " * time: 2.7012810707092285\n", - " 307 7.601018e+00 3.095380e-03\n", - " * time: 2.71073317527771\n", - " 308 7.601016e+00 2.188871e-03\n", - " * time: 2.7202720642089844\n", - " 309 7.601016e+00 4.029745e-03\n", - " * time: 2.727476119995117\n", - " 310 7.601016e+00 5.291349e-03\n", - " * time: 2.7347450256347656\n", - " 311 7.601014e+00 2.512162e-03\n", - " * time: 2.7419230937957764\n", - " 312 7.601012e+00 2.488967e-03\n", - " * time: 2.749129056930542\n", - " 313 7.601009e+00 2.851110e-03\n", - " * time: 2.75634503364563\n", - " 314 7.601006e+00 3.923415e-03\n", - " * time: 2.763775110244751\n", - " 315 7.601003e+00 1.688985e-03\n", - " * time: 2.7734501361846924\n", - " 316 7.601001e+00 2.192580e-03\n", - " * time: 2.7806899547576904\n", - " 317 7.600998e+00 2.356183e-03\n", - " * time: 2.7880101203918457\n", - " 318 7.600997e+00 3.863477e-03\n", - " * time: 2.7956371307373047\n", - " 319 7.600997e+00 3.065909e-03\n", - " * time: 2.8034069538116455\n", - " 320 7.600995e+00 2.795130e-03\n", - " * time: 2.8136911392211914\n", - " 321 7.600992e+00 3.979280e-03\n", - " * time: 2.8240630626678467\n", - " 322 7.600992e+00 4.691516e-03\n", - " * time: 2.831825017929077\n", - " 323 7.600992e+00 3.211477e-03\n", - " * time: 2.839569091796875\n", - " 324 7.600989e+00 3.704362e-03\n", - " * time: 2.8473219871520996\n", - " 325 7.600987e+00 4.158851e-03\n", - " * time: 2.8550901412963867\n", - " 326 7.600987e+00 4.803334e-03\n", - " * time: 2.8628361225128174\n", - " 327 7.600985e+00 2.644677e-03\n", - " * time: 2.8929240703582764\n", - " 328 7.600981e+00 2.413005e-03\n", - " * time: 2.900231122970581\n", - " 329 7.600979e+00 5.183508e-03\n", - " * time: 2.9074649810791016\n", - " 330 7.600977e+00 3.948308e-03\n", - " * time: 2.917004108428955\n", - " 331 7.600975e+00 3.236288e-03\n", - " * time: 2.9241721630096436\n", - " 332 7.600974e+00 4.823278e-03\n", - " * time: 2.931457042694092\n", - " 333 7.600971e+00 2.750861e-03\n", - " * time: 2.940998077392578\n", - " 334 7.600971e+00 3.256234e-03\n", - " * time: 2.9482309818267822\n", - " 335 7.600969e+00 3.377826e-03\n", - " * time: 2.9554250240325928\n", - " 336 7.600967e+00 3.571344e-03\n", - " * time: 2.96500301361084\n", - " 337 7.600965e+00 2.163067e-03\n", - " * time: 2.9745659828186035\n", - " 338 7.600963e+00 2.049472e-03\n", - " * time: 2.9842491149902344\n", - " 339 7.600962e+00 2.331737e-03\n", - " * time: 2.9915411472320557\n", - " 340 7.600961e+00 2.133526e-03\n", - " * time: 2.998868942260742\n", - " 341 7.600960e+00 2.037160e-03\n", - " * time: 3.006127119064331\n", - " 342 7.600959e+00 3.228887e-03\n", - " * time: 3.013416051864624\n", - " 343 7.600958e+00 2.843682e-03\n", - " * time: 3.0206100940704346\n", - " 344 7.600958e+00 2.585640e-03\n", - " * time: 3.0278820991516113\n", - " 345 7.600958e+00 3.781794e-03\n", - " * time: 3.0350661277770996\n", - " 346 7.600957e+00 2.081373e-03\n", - " * time: 3.0422911643981934\n", - " 347 7.600956e+00 2.870215e-03\n", - " * time: 3.0495481491088867\n", - " 348 7.600955e+00 2.227715e-03\n", - " * time: 3.056779146194458\n", - " 349 7.600954e+00 2.928599e-03\n", - " * time: 3.0640499591827393\n", - " 350 7.600954e+00 3.846852e-03\n", - " * time: 3.0712320804595947\n", - " 351 7.600952e+00 2.224482e-03\n", - " * time: 3.0808639526367188\n", - " 352 7.600952e+00 2.005236e-03\n", - " * time: 3.0881669521331787\n", - " 353 7.600951e+00 1.508444e-03\n", - " * time: 3.097778081893921\n", - " 354 7.600950e+00 1.946288e-03\n", - " * time: 3.107383966445923\n", - " 355 7.600949e+00 1.170490e-03\n", - " * time: 3.117072105407715\n", - " 356 7.600949e+00 8.864980e-04\n", - " * time: 3.126760959625244\n", - " 357 7.600949e+00 2.416597e-03\n", - " * time: 3.134084939956665\n", - " 358 7.600948e+00 1.039636e-03\n", - " * time: 3.143712043762207\n", - " 359 7.600948e+00 2.677014e-03\n", - " * time: 3.1511571407318115\n", - " 360 7.600948e+00 2.411705e-03\n", - " * time: 3.1585450172424316\n", - " 361 7.600947e+00 1.567918e-03\n", - " * time: 3.1659131050109863\n", - " 362 7.600947e+00 1.686664e-03\n", - " * time: 3.1732289791107178\n", - " 363 7.600946e+00 1.104113e-03\n", - " * time: 3.1807291507720947\n", - " 364 7.600945e+00 1.381054e-03\n", - " * time: 3.188538074493408\n", - " 365 7.600945e+00 1.523902e-03\n", - " * time: 3.196331024169922\n", - " 366 7.600944e+00 1.812694e-03\n", - " * time: 3.2041079998016357\n", - " 367 7.600944e+00 1.611291e-03\n", - " * time: 3.2143969535827637\n", - " 368 7.600943e+00 9.226595e-04\n", - " * time: 3.2246739864349365\n", - " 369 7.600943e+00 1.045254e-03\n", - " * time: 3.2324390411376953\n", - " 370 7.600943e+00 2.914987e-03\n", - " * time: 3.2402279376983643\n", - " 371 7.600942e+00 1.956341e-03\n", - " * time: 3.2505099773406982\n", - " 372 7.600941e+00 1.978215e-03\n", - " * time: 3.283210039138794\n", - " 373 7.600941e+00 2.789147e-03\n", - " * time: 3.2906179428100586\n", - " 374 7.600941e+00 2.424511e-03\n", - " * time: 3.297914981842041\n", - " 375 7.600941e+00 2.356182e-03\n", - " * time: 3.305130958557129\n", - " 376 7.600940e+00 2.235822e-03\n", - " * time: 3.312437057495117\n", - " 377 7.600939e+00 2.274483e-03\n", - " * time: 3.3197619915008545\n", - " 378 7.600938e+00 2.779851e-03\n", - " * time: 3.32704496383667\n", - " 379 7.600937e+00 2.844278e-03\n", - " * time: 3.3344221115112305\n", - " 380 7.600937e+00 3.077145e-03\n", - " * time: 3.341663122177124\n", - " 381 7.600936e+00 1.504255e-03\n", - " * time: 3.351173162460327\n", - " 382 7.600935e+00 2.317214e-03\n", - " * time: 3.3582940101623535\n", - " 383 7.600935e+00 1.586116e-03\n", - " * time: 3.3655450344085693\n", - " 384 7.600934e+00 1.142362e-03\n", - " * time: 3.3751320838928223\n", - " 385 7.600934e+00 9.971121e-04\n", - " * time: 3.385056972503662\n", - " 386 7.600933e+00 1.641828e-03\n", - " * time: 3.3923981189727783\n", - " 387 7.600933e+00 1.327534e-03\n", - " * time: 3.4019851684570312\n", - " 388 7.600932e+00 8.985051e-04\n", - " * time: 3.411590099334717\n", - " 389 7.600932e+00 1.248108e-03\n", - " * time: 3.4188849925994873\n", - " 390 7.600932e+00 2.192186e-03\n", - " * time: 3.4261820316314697\n", - " 391 7.600932e+00 1.935253e-03\n", - " * time: 3.4334139823913574\n", - " 392 7.600932e+00 1.108630e-03\n", - " * time: 3.4406509399414062\n", - " 393 7.600931e+00 1.148482e-03\n", - " * time: 3.4479100704193115\n", - " 394 7.600931e+00 1.417285e-03\n", - " * time: 3.4551241397857666\n", - " 395 7.600930e+00 1.353727e-03\n", - " * time: 3.462317943572998\n", - " 396 7.600930e+00 7.065223e-04\n", - " * time: 3.4719181060791016\n", - " 397 7.600930e+00 6.173752e-04\n", - " * time: 3.4815070629119873\n", - " 398 7.600930e+00 1.396370e-03\n", - " * time: 3.4887709617614746\n", - " 399 7.600930e+00 9.863414e-04\n", - " * time: 3.498337984085083\n", - " 400 7.600929e+00 7.480305e-04\n", - " * time: 3.505574941635132\n", - " 401 7.600929e+00 1.842407e-03\n", - " * time: 3.5127861499786377\n", - " 402 7.600929e+00 1.972104e-03\n", - " * time: 3.520117998123169\n", - " 403 7.600929e+00 1.323486e-03\n", - " * time: 3.5273449420928955\n", - " 404 7.600929e+00 1.578370e-03\n", - " * time: 3.5346741676330566\n", - " 405 7.600928e+00 1.637757e-03\n", - " * time: 3.542273998260498\n", - " 406 7.600928e+00 1.473623e-03\n", - " * time: 3.549607038497925\n", - " 407 7.600928e+00 1.159035e-03\n", - " * time: 3.55688214302063\n", - " 408 7.600927e+00 1.606548e-03\n", - " * time: 3.564146041870117\n", - " 409 7.600927e+00 9.317635e-04\n", - " * time: 3.5740699768066406\n", - " 410 7.600927e+00 1.426713e-03\n", - " * time: 3.5819220542907715\n", - " 411 7.600927e+00 1.143675e-03\n", - " * time: 3.5897271633148193\n", - " 412 7.600926e+00 2.100956e-03\n", - " * time: 3.597527027130127\n", - " 413 7.600926e+00 1.067976e-03\n", - " * time: 3.6077990531921387\n", - " 414 7.600926e+00 1.170838e-03\n", - " * time: 3.615678071975708\n", - " 415 7.600926e+00 1.189680e-03\n", - " * time: 3.623465061187744\n", - " 416 7.600925e+00 1.696573e-03\n", - " * time: 3.6312849521636963\n", - " 417 7.600925e+00 1.824756e-03\n", - " * time: 3.639075994491577\n", - " 418 7.600925e+00 1.140438e-03\n", - " * time: 3.669456958770752\n", - " 419 7.600925e+00 1.877381e-03\n", - " * time: 3.676754951477051\n", - " 420 7.600925e+00 1.705652e-03\n", - " * time: 3.6840319633483887\n", - " 421 7.600924e+00 1.193138e-03\n", - " * time: 3.6934969425201416\n", - " 422 7.600924e+00 1.914364e-03\n", - " * time: 3.7006890773773193\n", - " 423 7.600924e+00 1.805878e-03\n", - " * time: 3.707904100418091\n", - " 424 7.600924e+00 1.436872e-03\n", - " * time: 3.7150990962982178\n", - " 425 7.600923e+00 1.694347e-03\n", - " * time: 3.722356081008911\n", - " 426 7.600923e+00 1.614041e-03\n", - " * time: 3.7295711040496826\n", - " 427 7.600923e+00 2.396872e-03\n", - " * time: 3.7368199825286865\n", - " 428 7.600922e+00 1.984224e-03\n", - " * time: 3.7464599609375\n", - " 429 7.600922e+00 2.513760e-03\n", - " * time: 3.7538130283355713\n", - " 430 7.600922e+00 2.873806e-03\n", - " * time: 3.761059045791626\n", - " 431 7.600921e+00 1.871820e-03\n", - " * time: 3.768357038497925\n", - " 432 7.600920e+00 1.375527e-03\n", - " * time: 3.7756760120391846\n", - " 433 7.600919e+00 2.008615e-03\n", - " * time: 3.7853000164031982\n", - " 434 7.600918e+00 1.199719e-03\n", - " * time: 3.794888973236084\n", - " 435 7.600918e+00 1.481419e-03\n", - " * time: 3.8044960498809814\n", - " 436 7.600917e+00 1.130380e-03\n", - " * time: 3.8141281604766846\n", - " 437 7.600917e+00 1.694875e-03\n", - " * time: 3.821388006210327\n", - " 438 7.600916e+00 1.578925e-03\n", - " * time: 3.83097505569458\n", - " 439 7.600916e+00 1.504036e-03\n", - " * time: 3.838200092315674\n", - " 440 7.600915e+00 1.806394e-03\n", - " * time: 3.845456123352051\n", - " 441 7.600914e+00 1.256902e-03\n", - " * time: 3.854971170425415\n", - " 442 7.600913e+00 5.190393e-04\n", - " * time: 3.8645241260528564\n", - " 443 7.600913e+00 7.629576e-04\n", - " * time: 3.8717310428619385\n", - " 444 7.600912e+00 8.039521e-04\n", - " * time: 3.878913164138794\n", - " 445 7.600912e+00 1.360261e-03\n", - " * time: 3.8861441612243652\n", - " 446 7.600911e+00 1.902729e-03\n", - " * time: 3.8934640884399414\n", - " 447 7.600911e+00 2.178303e-03\n", - " * time: 3.9006869792938232\n", - " 448 7.600911e+00 9.960331e-04\n", - " * time: 3.9107699394226074\n", - " 449 7.600910e+00 1.578126e-03\n", - " * time: 3.9190311431884766\n", - " 450 7.600910e+00 1.298883e-03\n", - " * time: 3.9268410205841064\n", - " 451 7.600909e+00 1.179303e-03\n", - " * time: 3.9344820976257324\n", - " 452 7.600909e+00 1.565986e-03\n", - " * time: 3.9419431686401367\n", - " 453 7.600908e+00 1.821580e-03\n", - " * time: 3.949455976486206\n", - " 454 7.600908e+00 2.196274e-03\n", - " * time: 3.9568369388580322\n", - " 455 7.600907e+00 1.643830e-03\n", - " * time: 3.964395046234131\n", - " 456 7.600906e+00 2.011548e-03\n", - " * time: 3.9722161293029785\n", - " 457 7.600906e+00 2.502002e-03\n", - " * time: 3.9826109409332275\n", - " 458 7.600906e+00 3.507915e-03\n", - " * time: 3.9904210567474365\n", - " 459 7.600905e+00 2.119050e-03\n", - " * time: 3.998211145401001\n", - " 460 7.600904e+00 2.785947e-03\n", - " * time: 4.0060789585113525\n", - " 461 7.600903e+00 1.331663e-03\n", - " * time: 4.01639199256897\n", - " 462 7.600903e+00 2.320735e-03\n", - " * time: 4.024233102798462\n", - " 463 7.600902e+00 2.365992e-03\n", - " * time: 4.032097101211548\n", - " 464 7.600902e+00 1.665752e-03\n", - " * time: 4.062309980392456\n", - " 465 7.600901e+00 1.861411e-03\n", - " * time: 4.072045087814331\n", - " 466 7.600900e+00 1.958736e-03\n", - " * time: 4.0793070793151855\n", - " 467 7.600899e+00 1.526848e-03\n", - " * time: 4.086622953414917\n", - " 468 7.600898e+00 2.304729e-03\n", - " * time: 4.093991041183472\n", - " 469 7.600897e+00 2.104876e-03\n", - " * time: 4.10362696647644\n", - " 470 7.600895e+00 9.513261e-04\n", - " * time: 4.113329172134399\n", - " 471 7.600895e+00 1.983027e-03\n", - " * time: 4.120628118515015\n", - " 472 7.600895e+00 1.425622e-03\n", - " * time: 4.1279520988464355\n", - " 473 7.600894e+00 1.800707e-03\n", - " * time: 4.1375720500946045\n", - " 474 7.600894e+00 2.469823e-03\n", - " * time: 4.14487099647522\n", - " 475 7.600893e+00 2.594803e-03\n", - " * time: 4.1523590087890625\n", - " 476 7.600892e+00 1.868135e-03\n", - " * time: 4.162117958068848\n", - " 477 7.600891e+00 2.100101e-03\n", - " * time: 4.169497013092041\n", - " 478 7.600890e+00 1.976330e-03\n", - " * time: 4.179219961166382\n", - " 479 7.600890e+00 1.216974e-03\n", - " * time: 4.186589002609253\n", - " 480 7.600889e+00 1.243530e-03\n", - " * time: 4.193942070007324\n", - " 481 7.600889e+00 1.970829e-03\n", - " * time: 4.201249122619629\n", - " 482 7.600888e+00 2.188462e-03\n", - " * time: 4.208539962768555\n", - " 483 7.600888e+00 1.596704e-03\n", - " * time: 4.215841054916382\n", - " 484 7.600888e+00 1.832935e-03\n", - " * time: 4.223145961761475\n", - " 485 7.600887e+00 2.146179e-03\n", - " * time: 4.230476140975952\n", - " 486 7.600887e+00 1.894998e-03\n", - " * time: 4.237786054611206\n", - " 487 7.600887e+00 1.269606e-03\n", - " * time: 4.245043992996216\n", - " 488 7.600886e+00 9.442071e-04\n", - " * time: 4.25232195854187\n", - " 489 7.600886e+00 1.287269e-03\n", - " * time: 4.259652137756348\n", - " 490 7.600886e+00 2.001854e-03\n", - " * time: 4.26692008972168\n", - " 491 7.600885e+00 1.435286e-03\n", - " * time: 4.2742860317230225\n", - " 492 7.600885e+00 2.103756e-03\n", - " * time: 4.28161096572876\n", - " 493 7.600885e+00 1.419027e-03\n", - " * time: 4.291344165802002\n", - " 494 7.600885e+00 1.311130e-03\n", - " * time: 4.3010430335998535\n", - " 495 7.600884e+00 1.354517e-03\n", - " * time: 4.310672998428345\n", - " 496 7.600884e+00 7.998822e-04\n", - " * time: 4.320425987243652\n", - " 497 7.600884e+00 7.350104e-04\n", - " * time: 4.3302929401397705\n", - " 498 7.600884e+00 8.544928e-04\n", - " * time: 4.337687969207764\n", - " 499 7.600884e+00 1.011641e-03\n", - " * time: 4.345092058181763\n", - " 500 7.600883e+00 8.349177e-04\n", - " * time: 4.3525550365448\n", - " 501 7.600883e+00 1.015062e-03\n", - " * time: 4.360363960266113\n", - " 502 7.600883e+00 1.186524e-03\n", - " * time: 4.368165016174316\n", - " 503 7.600883e+00 8.286574e-04\n", - " * time: 4.375978946685791\n", - " 504 7.600883e+00 8.869361e-04\n", - " * time: 4.383871078491211\n", - " 505 7.600883e+00 6.134520e-04\n", - " * time: 4.391678094863892\n", - " 506 7.600882e+00 7.414492e-04\n", - " * time: 4.399486064910889\n", - " 507 7.600882e+00 5.832655e-04\n", - " * time: 4.409800052642822\n", - " 508 7.600882e+00 1.098343e-03\n", - " * time: 4.4175920486450195\n", - " 509 7.600882e+00 1.030021e-03\n", - " * time: 4.425364017486572\n", - " 510 7.600882e+00 6.760544e-04\n", - " * time: 4.454991102218628\n", - " 511 7.600882e+00 7.643876e-04\n", - " * time: 4.462208032608032\n", - " 512 7.600882e+00 9.341291e-04\n", - " * time: 4.4694061279296875\n", - " 513 7.600882e+00 1.180529e-03\n", - " * time: 4.476603031158447\n", - " 514 7.600882e+00 7.052137e-04\n", - " * time: 4.486032009124756\n", - " 515 7.600882e+00 6.090501e-04\n", - " * time: 4.495649099349976\n", - " 516 7.600882e+00 7.747960e-04\n", - " * time: 4.50285005569458\n", - " 517 7.600882e+00 6.541895e-04\n", - " * time: 4.510012149810791\n", - " 518 7.600881e+00 6.312623e-04\n", - " * time: 4.517228126525879\n", - " 519 7.600881e+00 6.757033e-04\n", - " * time: 4.526745080947876\n", - " 520 7.600881e+00 3.052399e-04\n", - " * time: 4.5362701416015625\n", - " 521 7.600881e+00 7.005997e-04\n", - " * time: 4.543467044830322\n", - " 522 7.600881e+00 5.630932e-04\n", - " * time: 4.55077600479126\n", - " 523 7.600881e+00 5.315102e-04\n", - " * time: 4.560508966445923\n", - " 524 7.600881e+00 7.706668e-04\n", - " * time: 4.56774115562439\n", - " 525 7.600881e+00 5.145408e-04\n", - " * time: 4.574916124343872\n", - " 526 7.600881e+00 8.022828e-04\n", - " * time: 4.5821919441223145\n", - " 527 7.600881e+00 7.818934e-04\n", - " * time: 4.589493989944458\n", - " 528 7.600881e+00 4.982771e-04\n", - " * time: 4.598952054977417\n", - " 529 7.600880e+00 8.521609e-04\n", - " * time: 4.606155157089233\n", - " 530 7.600880e+00 5.877850e-04\n", - " * time: 4.6134631633758545\n", - " 531 7.600880e+00 6.917243e-04\n", - " * time: 4.620767116546631\n", - " 532 7.600880e+00 1.155730e-03\n", - " * time: 4.6280529499053955\n", - " 533 7.600880e+00 6.234494e-04\n", - " * time: 4.6376190185546875\n", - " 534 7.600880e+00 6.821441e-04\n", - " * time: 4.644766092300415\n", - " 535 7.600880e+00 6.765685e-04\n", - " * time: 4.654327154159546\n", - " 536 7.600880e+00 1.004743e-03\n", - " * time: 4.661595106124878\n", - " 537 7.600880e+00 6.971510e-04\n", - " * time: 4.671173095703125\n", - " 538 7.600880e+00 7.710327e-04\n", - " * time: 4.67853307723999\n", - " 539 7.600880e+00 5.785637e-04\n", - " * time: 4.688161134719849\n", - " 540 7.600880e+00 1.251363e-03\n", - " * time: 4.6953489780426025\n", - " 541 7.600879e+00 9.083767e-04\n", - " * time: 4.704859972000122\n", - " 542 7.600879e+00 1.196972e-03\n", - " * time: 4.714576959609985\n", - " 543 7.600879e+00 8.874231e-04\n", - " * time: 4.721879005432129\n", - " 544 7.600879e+00 6.460488e-04\n", - " * time: 4.729191064834595\n", - " 545 7.600879e+00 6.563312e-04\n", - " * time: 4.736415147781372\n", - " 546 7.600879e+00 8.653405e-04\n", - " * time: 4.743937015533447\n", - " 547 7.600879e+00 5.082311e-04\n", - " * time: 4.754179954528809\n", - " 548 7.600879e+00 7.951153e-04\n", - " * time: 4.762076139450073\n", - " 549 7.600879e+00 8.410644e-04\n", - " * time: 4.769837141036987\n", - " 550 7.600879e+00 6.081985e-04\n", - " * time: 4.7775609493255615\n", - " 551 7.600879e+00 4.099547e-04\n", - " * time: 4.787791967391968\n", - " 552 7.600879e+00 5.677201e-04\n", - " * time: 4.795525074005127\n", - " 553 7.600879e+00 4.668478e-04\n", - " * time: 4.803282976150513\n", - " 554 7.600878e+00 4.091671e-04\n", - " * time: 4.81350302696228\n", - " 555 7.600878e+00 4.015844e-04\n", - " * time: 4.844992160797119\n", - " 556 7.600878e+00 3.807492e-04\n", - " * time: 4.85221004486084\n", - " 557 7.600878e+00 6.893526e-04\n", - " * time: 4.859346151351929\n", - " 558 7.600878e+00 6.398562e-04\n", - " * time: 4.866472005844116\n", - " 559 7.600878e+00 6.241811e-04\n", - " * time: 4.875921964645386\n", - " 560 7.600878e+00 5.061545e-04\n", - " * time: 4.885535001754761\n", - " 561 7.600878e+00 4.127725e-04\n", - " * time: 4.8950300216674805\n", - " 562 7.600878e+00 5.607694e-04\n", - " * time: 4.902202129364014\n", - " 563 7.600878e+00 5.586117e-04\n", - " * time: 4.911699056625366\n", - " 564 7.600878e+00 7.171830e-04\n", - " * time: 4.918904066085815\n", - " 565 7.600878e+00 8.051803e-04\n", - " * time: 4.926176071166992\n", - " 566 7.600878e+00 5.620658e-04\n", - " * time: 4.933385133743286\n", - " 567 7.600877e+00 6.211513e-04\n", - " * time: 4.940737962722778\n", - " 568 7.600877e+00 4.800669e-04\n", - " * time: 4.950307130813599\n", - " 569 7.600877e+00 2.847903e-04\n", - " * time: 4.959979057312012\n", - " 570 7.600877e+00 4.740769e-04\n", - " * time: 4.967371940612793\n", - " 571 7.600877e+00 6.182088e-04\n", - " * time: 4.9747560024261475\n", - " 572 7.600877e+00 9.465934e-04\n", - " * time: 4.9821250438690186\n", - " 573 7.600877e+00 7.537091e-04\n", - " * time: 4.989426136016846\n", - " 574 7.600877e+00 1.370101e-03\n", - " * time: 4.996690034866333\n", - " 575 7.600876e+00 1.086914e-03\n", - " * time: 5.003999948501587\n", - " 576 7.600876e+00 1.056785e-03\n", - " * time: 5.011198043823242\n", - " 577 7.600876e+00 8.983107e-04\n", - " * time: 5.018592119216919\n", - " 578 7.600876e+00 1.000911e-03\n", - " * time: 5.025835990905762\n", - " 579 7.600875e+00 1.422623e-03\n", - " * time: 5.033036947250366\n", - " 580 7.600875e+00 1.741573e-03\n", - " * time: 5.0402891635894775\n", - " 581 7.600875e+00 8.473868e-04\n", - " * time: 5.04748010635376\n", - " 582 7.600875e+00 1.331738e-03\n", - " * time: 5.054747104644775\n", - " 583 7.600874e+00 1.099774e-03\n", - " * time: 5.06430196762085\n", - " 584 7.600874e+00 1.784771e-03\n", - " * time: 5.07155704498291\n", - " 585 7.600874e+00 1.337209e-03\n", - " * time: 5.081303119659424\n", - " 586 7.600873e+00 8.503163e-04\n", - " * time: 5.090857982635498\n", - " 587 7.600873e+00 1.876572e-03\n", - " * time: 5.098214149475098\n", - " 588 7.600873e+00 1.388368e-03\n", - " * time: 5.105616092681885\n", - " 589 7.600873e+00 1.623802e-03\n", - " * time: 5.112955093383789\n", - " 590 7.600872e+00 2.564550e-03\n", - " * time: 5.1202850341796875\n", - " 591 7.600871e+00 1.757283e-03\n", - " * time: 5.130095958709717\n", - " 592 7.600871e+00 1.975090e-03\n", - " * time: 5.137969970703125\n", - " 593 7.600870e+00 1.441963e-03\n", - " * time: 5.145751953125\n", - " 594 7.600870e+00 1.674965e-03\n", - " * time: 5.153520107269287\n", - " 595 7.600869e+00 1.133381e-03\n", - " * time: 5.16379714012146\n", - " 596 7.600869e+00 1.727952e-03\n", - " * time: 5.171723127365112\n", - " 597 7.600869e+00 1.913045e-03\n", - " * time: 5.179492950439453\n", - " 598 7.600868e+00 1.087757e-03\n", - " * time: 5.189777135848999\n", - " 599 7.600868e+00 8.772902e-04\n", - " * time: 5.200063943862915\n", - " 600 7.600868e+00 1.476348e-03\n", - " * time: 5.230014085769653\n", - " 601 7.600868e+00 1.149536e-03\n", - " * time: 5.237300157546997\n", - " 602 7.600868e+00 1.120282e-03\n", - " * time: 5.244472026824951\n", - " 603 7.600868e+00 1.200623e-03\n", - " * time: 5.251712083816528\n", - " 604 7.600867e+00 9.588198e-04\n", - " * time: 5.258886098861694\n", - " 605 7.600867e+00 1.418272e-03\n", - " * time: 5.266062021255493\n", - " 606 7.600867e+00 1.341307e-03\n", - " * time: 5.273293972015381\n", - " 607 7.600867e+00 1.993076e-03\n", - " * time: 5.280451059341431\n", - " 608 7.600867e+00 1.300437e-03\n", - " * time: 5.287583112716675\n", - " 609 7.600866e+00 1.137537e-03\n", - " * time: 5.294770956039429\n", - " 610 7.600866e+00 1.644163e-03\n", - " * time: 5.301998138427734\n", - " 611 7.600866e+00 1.000473e-03\n", - " * time: 5.311522006988525\n", - " 612 7.600866e+00 1.099059e-03\n", - " * time: 5.321146011352539\n", - " 613 7.600866e+00 1.922864e-03\n", - " * time: 5.328304052352905\n", - " 614 7.600865e+00 1.166395e-03\n", - " * time: 5.33796501159668\n", - " 615 7.600865e+00 1.115576e-03\n", - " * time: 5.347643136978149\n", - " 616 7.600865e+00 1.655198e-03\n", - " * time: 5.354926109313965\n", - " 617 7.600865e+00 1.435246e-03\n", - " * time: 5.362300157546997\n", - " 618 7.600865e+00 2.069998e-03\n", - " * time: 5.3695831298828125\n", - " 619 7.600864e+00 1.614540e-03\n", - " * time: 5.377040147781372\n", - " 620 7.600864e+00 1.928431e-03\n", - " * time: 5.384315013885498\n", - " 621 7.600864e+00 1.518983e-03\n", - " * time: 5.393986940383911\n", - " 622 7.600863e+00 1.651262e-03\n", - " * time: 5.401344060897827\n", - " 623 7.600863e+00 1.414385e-03\n", - " * time: 5.408658981323242\n", - " 624 7.600863e+00 6.772869e-04\n", - " * time: 5.418203115463257\n", - " 625 7.600863e+00 9.640941e-04\n", - " * time: 5.425455093383789\n", - " 626 7.600862e+00 6.538174e-04\n", - " * time: 5.434988021850586\n", - " 627 7.600862e+00 1.213993e-03\n", - " * time: 5.442235946655273\n", - " 628 7.600862e+00 1.287708e-03\n", - " * time: 5.449462175369263\n", - " 629 7.600862e+00 8.199878e-04\n", - " * time: 5.458992958068848\n", - " 630 7.600862e+00 8.082128e-04\n", - " * time: 5.466259002685547\n", - " 631 7.600862e+00 7.119159e-04\n", - " * time: 5.473718166351318\n", - " 632 7.600862e+00 1.068931e-03\n", - " * time: 5.481043100357056\n", - " 633 7.600861e+00 1.051237e-03\n", - " * time: 5.488450050354004\n", - " 634 7.600861e+00 7.097491e-04\n", - " * time: 5.495864152908325\n", - " 635 7.600861e+00 9.937810e-04\n", - " * time: 5.503170967102051\n", - " 636 7.600861e+00 9.138313e-04\n", - " * time: 5.510451078414917\n", - " 637 7.600861e+00 1.222409e-03\n", - " * time: 5.517649173736572\n", - " 638 7.600861e+00 1.094225e-03\n", - " * time: 5.527909994125366\n", - " 639 7.600861e+00 1.133185e-03\n", - " * time: 5.535678148269653\n", - " 640 7.600860e+00 1.064290e-03\n", - " * time: 5.543395042419434\n", - " 641 7.600860e+00 1.808290e-03\n", - " * time: 5.551143169403076\n", - " 642 7.600860e+00 1.317124e-03\n", - " * time: 5.5588719844818115\n", - " 643 7.600860e+00 1.511110e-03\n", - " * time: 5.569097995758057\n", - " 644 7.600860e+00 2.521283e-03\n", - " * time: 5.576954126358032\n", - " 645 7.600859e+00 1.840041e-03\n", - " * time: 5.5847930908203125\n", - " 646 7.600859e+00 1.220290e-03\n", - " * time: 5.616681098937988\n", - " 647 7.600858e+00 1.594910e-03\n", - " * time: 5.626214027404785\n", - " 648 7.600858e+00 1.088844e-03\n", - " * time: 5.635705947875977\n", - " 649 7.600857e+00 1.060402e-03\n", - " * time: 5.642879962921143\n", - " 650 7.600857e+00 2.692969e-03\n", - " * time: 5.6500091552734375\n", - " 651 7.600857e+00 1.749544e-03\n", - " * time: 5.659465074539185\n", - " 652 7.600856e+00 1.422070e-03\n", - " * time: 5.669106960296631\n", - " 653 7.600856e+00 2.007948e-03\n", - " * time: 5.67623496055603\n", - " 654 7.600855e+00 1.885395e-03\n", - " * time: 5.683429002761841\n", - " 655 7.600855e+00 2.596788e-03\n", - " * time: 5.690638065338135\n", - " 656 7.600854e+00 6.988729e-04\n", - " * time: 5.700127124786377\n", - " 657 7.600854e+00 1.149282e-03\n", - " * time: 5.707313060760498\n", - " 658 7.600853e+00 2.187011e-03\n", - " * time: 5.714569091796875\n", - " 659 7.600853e+00 1.471630e-03\n", - " * time: 5.724149942398071\n", - " 660 7.600853e+00 2.457207e-03\n", - " * time: 5.731328010559082\n", - " 661 7.600852e+00 1.936908e-03\n", - " * time: 5.738572120666504\n", - " 662 7.600852e+00 1.390636e-03\n", - " * time: 5.745798110961914\n", - " 663 7.600851e+00 1.292661e-03\n", - " * time: 5.753018140792847\n", - " 664 7.600851e+00 2.152749e-03\n", - " * time: 5.760228157043457\n", - " 665 7.600851e+00 1.312993e-03\n", - " * time: 5.76973295211792\n", - " 666 7.600850e+00 1.695824e-03\n", - " * time: 5.776946067810059\n", - " 667 7.600850e+00 1.484147e-03\n", - " * time: 5.784435033798218\n", - " 668 7.600849e+00 1.678586e-03\n", - " * time: 5.791671991348267\n", - " 669 7.600849e+00 7.755221e-04\n", - " * time: 5.80122709274292\n", - " 670 7.600849e+00 1.232731e-03\n", - " * time: 5.80845308303833\n", - " 671 7.600848e+00 1.450571e-03\n", - " * time: 5.815591096878052\n", - " 672 7.600848e+00 1.525949e-03\n", - " * time: 5.825063943862915\n", - " 673 7.600847e+00 1.706149e-03\n", - " * time: 5.832241058349609\n", - " 674 7.600847e+00 1.312744e-03\n", - " * time: 5.841860055923462\n", - " 675 7.600847e+00 7.706132e-04\n", - " * time: 5.851428985595703\n", - " 676 7.600846e+00 1.192284e-03\n", - " * time: 5.858643054962158\n", - " 677 7.600846e+00 2.482819e-03\n", - " * time: 5.865885019302368\n", - " 678 7.600846e+00 1.586804e-03\n", - " * time: 5.873214960098267\n", - " 679 7.600845e+00 1.297771e-03\n", - " * time: 5.880589962005615\n", - " 680 7.600845e+00 1.644523e-03\n", - " * time: 5.887928009033203\n", - " 681 7.600844e+00 1.365559e-03\n", - " * time: 5.8975160121917725\n", - " 682 7.600843e+00 1.109209e-03\n", - " * time: 5.907430171966553\n", - " 683 7.600843e+00 9.619722e-04\n", - " * time: 5.917755126953125\n", - " 684 7.600843e+00 1.568938e-03\n", - " * time: 5.925537109375\n", - " 685 7.600842e+00 1.609141e-03\n", - " * time: 5.933351993560791\n", - " 686 7.600842e+00 1.563681e-03\n", - " * time: 5.941143989562988\n", - " 687 7.600842e+00 2.288022e-03\n", - " * time: 5.9489359855651855\n", - " 688 7.600841e+00 1.546611e-03\n", - " * time: 5.959223031997681\n", - " 689 7.600841e+00 2.362215e-03\n", - " * time: 5.967003107070923\n", - " 690 7.600840e+00 2.344106e-03\n", - " * time: 5.974879026412964\n", - " 691 7.600839e+00 2.373188e-03\n", - " * time: 6.004795074462891\n", - " 692 7.600839e+00 2.537467e-03\n", - " * time: 6.012171030044556\n", - " 693 7.600838e+00 2.465605e-03\n", - " * time: 6.019466161727905\n", - " 694 7.600838e+00 3.879423e-03\n", - " * time: 6.026739120483398\n", - " 695 7.600837e+00 2.037304e-03\n", - " * time: 6.033889055252075\n", - " 696 7.600837e+00 3.233565e-03\n", - " * time: 6.041090965270996\n", - " 697 7.600836e+00 3.381866e-03\n", - " * time: 6.048319101333618\n", - " 698 7.600835e+00 2.656864e-03\n", - " * time: 6.055487155914307\n", - " 699 7.600834e+00 2.773112e-03\n", - " * time: 6.062639951705933\n", - " 700 7.600833e+00 2.897799e-03\n", - " * time: 6.072148084640503\n", - " 701 7.600831e+00 2.234508e-03\n", - " * time: 6.07934308052063\n", - " 702 7.600829e+00 2.016292e-03\n", - " * time: 6.088989019393921\n", - " 703 7.600828e+00 3.167745e-03\n", - " * time: 6.096246004104614\n", - " 704 7.600827e+00 3.100757e-03\n", - " * time: 6.105806112289429\n", - " 705 7.600825e+00 2.394008e-03\n", - " * time: 6.115437030792236\n", - " 706 7.600824e+00 2.259880e-03\n", - " * time: 6.125030040740967\n", - " 707 7.600822e+00 2.362442e-03\n", - " * time: 6.1346330642700195\n", - " 708 7.600822e+00 3.955089e-03\n", - " * time: 6.141919136047363\n", - " 709 7.600821e+00 3.694638e-03\n", - " * time: 6.149161100387573\n", - " 710 7.600820e+00 4.154971e-03\n", - " * time: 6.156448125839233\n", - " 711 7.600818e+00 2.841018e-03\n", - " * time: 6.165982007980347\n", - " 712 7.600817e+00 3.363023e-03\n", - " * time: 6.1732001304626465\n", - " 713 7.600814e+00 2.433019e-03\n", - " * time: 6.180448055267334\n", - " 714 7.600811e+00 3.201882e-03\n", - " * time: 6.187720060348511\n", - " 715 7.600810e+00 3.296391e-03\n", - " * time: 6.195076942443848\n", - " 716 7.600808e+00 4.448647e-03\n", - " * time: 6.202299118041992\n", - " 717 7.600806e+00 2.208679e-03\n", - " * time: 6.211925983428955\n", - " 718 7.600804e+00 3.205407e-03\n", - " * time: 6.219207048416138\n", - " 719 7.600802e+00 3.987457e-03\n", - " * time: 6.226442098617554\n", - " 720 7.600802e+00 3.179125e-03\n", - " * time: 6.233718156814575\n", - " 721 7.600800e+00 2.734898e-03\n", - " * time: 6.243294954299927\n", - " 722 7.600798e+00 2.957577e-03\n", - " * time: 6.250581979751587\n", - " 723 7.600796e+00 3.393016e-03\n", - " * time: 6.2578840255737305\n", - " 724 7.600793e+00 4.391102e-03\n", - " * time: 6.265383958816528\n", - " 725 7.600792e+00 5.280376e-03\n", - " * time: 6.272741079330444\n", - " 726 7.600788e+00 4.742809e-03\n", - " * time: 6.282411098480225\n", - " 727 7.600784e+00 4.215637e-03\n", - " * time: 6.289684057235718\n", - " 728 7.600780e+00 5.319862e-03\n", - " * time: 6.297332048416138\n", - " 729 7.600777e+00 8.056403e-03\n", - " * time: 6.305236101150513\n", - " 730 7.600773e+00 5.282850e-03\n", - " * time: 6.313083171844482\n", - " 731 7.600768e+00 5.571904e-03\n", - " * time: 6.323380947113037\n", - " 732 7.600767e+00 1.115439e-02\n", - " * time: 6.331201076507568\n", - " 733 7.600765e+00 8.345790e-03\n", - " * time: 6.339004039764404\n", - " 734 7.600763e+00 8.506482e-03\n", - " * time: 6.3468241691589355\n", - " 735 7.600754e+00 9.195959e-03\n", - " * time: 6.357118129730225\n", - " 736 7.600754e+00 8.971356e-03\n", - " * time: 6.364881992340088\n", - " 737 7.600744e+00 8.508391e-03\n", - " * time: 6.397416114807129\n", - " 738 7.600732e+00 6.647965e-03\n", - " * time: 6.404689073562622\n", - " 739 7.600731e+00 1.603251e-02\n", - " * time: 6.411957025527954\n", - " 740 7.600721e+00 1.048027e-02\n", - " * time: 6.4192609786987305\n", - " 741 7.600716e+00 1.401940e-02\n", - " * time: 6.426440954208374\n", - " 742 7.600704e+00 1.008448e-02\n", - " * time: 6.436115026473999\n", - " 743 7.600704e+00 1.516545e-02\n", - " * time: 6.443294048309326\n", - " 744 7.600700e+00 1.346666e-02\n", - " * time: 6.4504311084747314\n", - " 745 7.600691e+00 1.704558e-02\n", - " * time: 6.457590103149414\n", - " 746 7.600676e+00 1.085100e-02\n", - " * time: 6.466994047164917\n", - " 747 7.600645e+00 9.942579e-03\n", - " * time: 6.47422194480896\n", - " 748 7.600614e+00 1.054932e-02\n", - " * time: 6.481389999389648\n", - " 749 7.600610e+00 9.275905e-03\n", - " * time: 6.48927116394043\n", - " 750 7.600599e+00 1.382092e-02\n", - " * time: 6.496648073196411\n", - " 751 7.600573e+00 1.257347e-02\n", - " * time: 6.503895998001099\n", - " 752 7.600561e+00 1.745079e-02\n", - " * time: 6.5111870765686035\n", - " 753 7.600541e+00 1.982071e-02\n", - " * time: 6.5184619426727295\n", - " 754 7.600529e+00 1.975933e-02\n", - " * time: 6.525818109512329\n", - " 755 7.600496e+00 2.959610e-02\n", - " * time: 6.5331361293792725\n", - " 756 7.600376e+00 1.632893e-02\n", - " * time: 6.542747974395752\n", - " 757 7.600324e+00 2.162499e-02\n", - " * time: 6.552392959594727\n", - " 758 7.600293e+00 3.069007e-02\n", - " * time: 6.559631109237671\n", - " 759 7.600266e+00 2.491763e-02\n", - " * time: 6.569118022918701\n", - " 760 7.600262e+00 3.212802e-02\n", - " * time: 6.576382160186768\n", - " 761 7.600205e+00 3.211608e-02\n", - " * time: 6.5860700607299805\n", - " 762 7.600148e+00 2.644439e-02\n", - " * time: 6.593306064605713\n", - " 763 7.600031e+00 2.701659e-02\n", - " * time: 6.603019952774048\n", - " 764 7.599953e+00 3.565938e-02\n", - " * time: 6.610241174697876\n", - " 765 7.599868e+00 3.570320e-02\n", - " * time: 6.619966983795166\n", - " 766 7.599814e+00 3.691761e-02\n", - " * time: 6.629589080810547\n", - " 767 7.599645e+00 2.645937e-02\n", - " * time: 6.6391730308532715\n", - " 768 7.599543e+00 3.691258e-02\n", - " * time: 6.646407127380371\n", - " 769 7.599396e+00 3.094581e-02\n", - " * time: 6.653815031051636\n", - " 770 7.599243e+00 3.410604e-02\n", - " * time: 6.661132097244263\n", - " 771 7.599022e+00 3.001309e-02\n", - " * time: 6.670669078826904\n", - " 772 7.598889e+00 5.223458e-02\n", - " * time: 6.677899122238159\n", - " 773 7.598855e+00 5.802716e-02\n", - " * time: 6.685429096221924\n", - " 774 7.598457e+00 5.853845e-02\n", - " * time: 6.695708990097046\n", - " 775 7.598137e+00 4.493094e-02\n", - " * time: 6.703448057174683\n", - " 776 7.597743e+00 3.574070e-02\n", - " * time: 6.713701009750366\n", - " 777 7.597274e+00 2.925330e-02\n", - " * time: 6.723957061767578\n", - " 778 7.597027e+00 3.732727e-02\n", - " * time: 6.731723070144653\n", - " 779 7.596755e+00 3.536031e-02\n", - " * time: 6.74199104309082\n", - " 780 7.596518e+00 2.808317e-02\n", - " * time: 6.75224494934082\n", - " 781 7.596286e+00 2.230816e-02\n", - " * time: 6.782083034515381\n", - " 782 7.596119e+00 1.983552e-02\n", - " * time: 6.7916340827941895\n", - " 783 7.595961e+00 2.786345e-02\n", - " * time: 6.798824071884155\n", - " 784 7.595953e+00 3.222175e-02\n", - " * time: 6.806132078170776\n", - " 785 7.595802e+00 2.574945e-02\n", - " * time: 6.813308000564575\n", - " 786 7.595695e+00 1.695859e-02\n", - " * time: 6.822906970977783\n", - " 787 7.595557e+00 2.374209e-02\n", - " * time: 6.830120086669922\n", - " 788 7.595408e+00 1.648712e-02\n", - " * time: 6.837299108505249\n", - " 789 7.595351e+00 2.884158e-02\n", - " * time: 6.844470977783203\n", - " 790 7.595335e+00 2.238915e-02\n", - " * time: 6.851628065109253\n", - " 791 7.595277e+00 2.331758e-02\n", - " * time: 6.858736038208008\n", - " 792 7.595207e+00 2.644971e-02\n", - " * time: 6.86591100692749\n", - " 793 7.595158e+00 2.338211e-02\n", - " * time: 6.87305212020874\n", - " 794 7.595050e+00 1.959940e-02\n", - " * time: 6.880349159240723\n", - " 795 7.595025e+00 3.589524e-02\n", - " * time: 6.88764500617981\n", - " 796 7.594957e+00 2.333818e-02\n", - " * time: 6.894843101501465\n", - " 797 7.594908e+00 2.523745e-02\n", - " * time: 6.9021360874176025\n", - " 798 7.594799e+00 1.995552e-02\n", - " * time: 6.909343957901001\n", - " 799 7.594766e+00 3.602412e-02\n", - " * time: 6.9166059494018555\n", - " 800 7.594734e+00 3.708960e-02\n", - " * time: 6.9238810539245605\n", - " 801 7.594533e+00 2.103269e-02\n", - " * time: 6.933413028717041\n", - " 802 7.594475e+00 3.259571e-02\n", - " * time: 6.940709114074707\n", - " 803 7.594374e+00 2.438396e-02\n", - " * time: 6.948102951049805\n", - " 804 7.594347e+00 5.188699e-02\n", - " * time: 6.955387115478516\n", - " 805 7.594271e+00 2.913370e-02\n", - " * time: 6.962586164474487\n", - " 806 7.594093e+00 1.908438e-02\n", - " * time: 6.972186088562012\n", - " 807 7.594083e+00 4.475062e-02\n", - " * time: 6.979453086853027\n", - " 808 7.593950e+00 2.835323e-02\n", - " * time: 6.988971948623657\n", - " 809 7.593946e+00 4.218166e-02\n", - " * time: 6.996158123016357\n", - " 810 7.593827e+00 3.690480e-02\n", - " * time: 7.005839109420776\n", - " 811 7.593679e+00 2.419993e-02\n", - " * time: 7.0154571533203125\n", - " 812 7.593599e+00 1.996023e-02\n", - " * time: 7.022644996643066\n", - " 813 7.593535e+00 2.213973e-02\n", - " * time: 7.029950141906738\n", - " 814 7.593460e+00 1.488974e-02\n", - " * time: 7.039740085601807\n", - " 815 7.593454e+00 2.535246e-02\n", - " * time: 7.047229051589966\n", - " 816 7.593427e+00 1.952942e-02\n", - " * time: 7.0544960498809814\n", - " 817 7.593394e+00 1.770502e-02\n", - " * time: 7.061736106872559\n", - " 818 7.593296e+00 1.373510e-02\n", - " * time: 7.068962097167969\n", - " 819 7.593295e+00 2.818418e-02\n", - " * time: 7.0767481327056885\n", - " 820 7.593244e+00 1.772214e-02\n", - " * time: 7.087108135223389\n", - " 821 7.593224e+00 1.445399e-02\n", - " * time: 7.094934940338135\n", - " 822 7.593195e+00 1.067358e-02\n", - " * time: 7.102715015411377\n", - " 823 7.593177e+00 1.127068e-02\n", - " * time: 7.110487937927246\n", - " 824 7.593162e+00 1.110861e-02\n", - " * time: 7.11834716796875\n", - " 825 7.593149e+00 1.118343e-02\n", - " * time: 7.126106023788452\n", - " 826 7.593124e+00 7.303178e-03\n", - " * time: 7.136453151702881\n", - " 827 7.593123e+00 1.416646e-02\n", - " * time: 7.166524171829224\n", - " 828 7.593119e+00 1.446772e-02\n", - " * time: 7.173923015594482\n", - " 829 7.593098e+00 1.307352e-02\n", - " * time: 7.18113899230957\n", - " 830 7.593074e+00 8.672192e-03\n", - " * time: 7.190647125244141\n", - " 831 7.593060e+00 8.558817e-03\n", - " * time: 7.197947025299072\n", - " 832 7.593043e+00 5.040788e-03\n", - " * time: 7.207514047622681\n", - " 833 7.593038e+00 8.302220e-03\n", - " * time: 7.214897155761719\n", - " 834 7.593033e+00 7.640605e-03\n", - " * time: 7.222267150878906\n", - " 835 7.593032e+00 1.056623e-02\n", - " * time: 7.229459047317505\n", - " 836 7.593021e+00 6.581054e-03\n", - " * time: 7.238878011703491\n", - " 837 7.593011e+00 7.316333e-03\n", - " * time: 7.2460479736328125\n", - " 838 7.592993e+00 7.146714e-03\n", - " * time: 7.255502939224243\n", - " 839 7.592990e+00 1.149633e-02\n", - " * time: 7.26282000541687\n", - " 840 7.592986e+00 1.031033e-02\n", - " * time: 7.270051956176758\n", - " 841 7.592968e+00 8.750046e-03\n", - " * time: 7.277369022369385\n", - " 842 7.592952e+00 7.837842e-03\n", - " * time: 7.284624099731445\n", - " 843 7.592945e+00 8.903153e-03\n", - " * time: 7.2920191287994385\n", - " 844 7.592932e+00 7.122396e-03\n", - " * time: 7.301609039306641\n", - " 845 7.592916e+00 7.127768e-03\n", - " * time: 7.311146974563599\n", - " 846 7.592905e+00 4.287886e-03\n", - " * time: 7.320765972137451\n", - " 847 7.592893e+00 6.481260e-03\n", - " * time: 7.328050136566162\n", - " 848 7.592880e+00 4.663297e-03\n", - " * time: 7.335317134857178\n", - " 849 7.592876e+00 9.401052e-03\n", - " * time: 7.342600107192993\n", - " 850 7.592864e+00 6.612134e-03\n", - " * time: 7.352153062820435\n", - " 851 7.592861e+00 1.344833e-02\n", - " * time: 7.359392166137695\n", - " 852 7.592856e+00 6.138742e-03\n", - " * time: 7.366664171218872\n", - " 853 7.592847e+00 7.947205e-03\n", - " * time: 7.373897075653076\n", - " 854 7.592842e+00 6.848442e-03\n", - " * time: 7.38113808631897\n", - " 855 7.592823e+00 6.576528e-03\n", - " * time: 7.388894081115723\n", - " 856 7.592811e+00 8.357946e-03\n", - " * time: 7.396221160888672\n", - " 857 7.592799e+00 1.183675e-02\n", - " * time: 7.40358304977417\n", - " 858 7.592778e+00 6.876693e-03\n", - " * time: 7.410974025726318\n", - " 859 7.592772e+00 1.052467e-02\n", - " * time: 7.418303966522217\n", - " 860 7.592762e+00 6.144239e-03\n", - " * time: 7.428060054779053\n", - " 861 7.592752e+00 9.768386e-03\n", - " * time: 7.435462951660156\n", - " 862 7.592736e+00 8.178055e-03\n", - " * time: 7.445134162902832\n", - " 863 7.592731e+00 1.052636e-02\n", - " * time: 7.452387094497681\n", - " 864 7.592719e+00 9.019923e-03\n", - " * time: 7.462141036987305\n", - " 865 7.592704e+00 5.832894e-03\n", - " * time: 7.472464084625244\n", - " 866 7.592694e+00 6.731543e-03\n", - " * time: 7.480299949645996\n", - " 867 7.592684e+00 1.112353e-02\n", - " * time: 7.488101959228516\n", - " 868 7.592672e+00 5.728629e-03\n", - " * time: 7.498373031616211\n", - " 869 7.592670e+00 7.536390e-03\n", - " * time: 7.506193161010742\n", - " 870 7.592666e+00 7.890842e-03\n", - " * time: 7.51396107673645\n", - " 871 7.592652e+00 5.091202e-03\n", - " * time: 7.521770000457764\n", - " 872 7.592650e+00 8.834599e-03\n", - " * time: 7.529569149017334\n", - " 873 7.592639e+00 1.017965e-02\n", - " * time: 7.55980110168457\n", - " 874 7.592626e+00 5.813701e-03\n", - " * time: 7.569424152374268\n", - " 875 7.592622e+00 6.380809e-03\n", - " * time: 7.576637029647827\n", - " 876 7.592614e+00 5.474200e-03\n", - " * time: 7.583863019943237\n", - " 877 7.592607e+00 5.152186e-03\n", - " * time: 7.591060161590576\n", - " 878 7.592605e+00 7.503120e-03\n", - " * time: 7.5983240604400635\n", - " 879 7.592598e+00 6.162502e-03\n", - " * time: 7.605549097061157\n", - " 880 7.592594e+00 8.389233e-03\n", - " * time: 7.612758159637451\n", - " 881 7.592587e+00 6.597582e-03\n", - " * time: 7.6224470138549805\n", - " 882 7.592579e+00 6.467196e-03\n", - " * time: 7.629724025726318\n", - " 883 7.592571e+00 5.045097e-03\n", - " * time: 7.639179944992065\n", - " 884 7.592566e+00 4.019165e-03\n", - " * time: 7.648761034011841\n", - " 885 7.592562e+00 5.571495e-03\n", - " * time: 7.6560211181640625\n", - " 886 7.592558e+00 8.183906e-03\n", - " * time: 7.663210153579712\n", - " 887 7.592553e+00 6.424656e-03\n", - " * time: 7.6704840660095215\n", - " 888 7.592551e+00 8.648946e-03\n", - " * time: 7.677809000015259\n", - " 889 7.592541e+00 6.876407e-03\n", - " * time: 7.68505597114563\n", - " 890 7.592526e+00 7.723818e-03\n", - " * time: 7.692279100418091\n", - " 891 7.592523e+00 1.072139e-02\n", - " * time: 7.69957709312439\n", - " 892 7.592518e+00 8.451328e-03\n", - " * time: 7.70694899559021\n", - " 893 7.592508e+00 8.129020e-03\n", - " * time: 7.7142510414123535\n", - " 894 7.592501e+00 7.531938e-03\n", - " * time: 7.7215330600738525\n", - " 895 7.592492e+00 4.855035e-03\n", - " * time: 7.731034994125366\n", - " 896 7.592482e+00 5.194988e-03\n", - " * time: 7.740605115890503\n", - " 897 7.592474e+00 3.314347e-03\n", - " * time: 7.750065088272095\n", - " 898 7.592470e+00 3.298171e-03\n", - " * time: 7.759675979614258\n", - " 899 7.592466e+00 3.459308e-03\n", - " * time: 7.7692930698394775\n", - " 900 7.592465e+00 4.674317e-03\n", - " * time: 7.776524066925049\n", - " 901 7.592460e+00 5.449307e-03\n", - " * time: 7.783754110336304\n", - " 902 7.592458e+00 6.685949e-03\n", - " * time: 7.791027069091797\n", - " 903 7.592452e+00 5.274088e-03\n", - " * time: 7.798278093338013\n", - " 904 7.592449e+00 5.014444e-03\n", - " * time: 7.8055579662323\n", - " 905 7.592446e+00 2.919359e-03\n", - " * time: 7.8128111362457275\n", - " 906 7.592440e+00 2.727309e-03\n", - " * time: 7.8204450607299805\n", - " 907 7.592434e+00 6.623993e-03\n", - " * time: 7.827738046646118\n", - " 908 7.592428e+00 4.164385e-03\n", - " * time: 7.837346076965332\n", - " 909 7.592427e+00 6.107807e-03\n", - " * time: 7.844601154327393\n", - " 910 7.592424e+00 4.109511e-03\n", - " * time: 7.854724168777466\n", - " 911 7.592421e+00 3.541787e-03\n", - " * time: 7.865004062652588\n", - " 912 7.592420e+00 4.430512e-03\n", - " * time: 7.8727569580078125\n", - " 913 7.592420e+00 6.154851e-03\n", - " * time: 7.8805091381073\n", - " 914 7.592417e+00 4.376195e-03\n", - " * time: 7.888245105743408\n", - " 915 7.592413e+00 4.316918e-03\n", - " * time: 7.8959879875183105\n", - " 916 7.592413e+00 3.625769e-03\n", - " * time: 7.90372896194458\n", - " 917 7.592409e+00 4.335606e-03\n", - " * time: 7.911442041397095\n", - " 918 7.592405e+00 3.872215e-03\n", - " * time: 7.94389796257019\n", - " 919 7.592404e+00 4.373069e-03\n", - " * time: 7.951380968093872\n", - " 920 7.592403e+00 5.132506e-03\n", - " * time: 7.958690166473389\n", - " 921 7.592399e+00 4.400933e-03\n", - " * time: 7.9659669399261475\n", - " 922 7.592396e+00 4.059512e-03\n", - " * time: 7.973143100738525\n", - " 923 7.592393e+00 3.612119e-03\n", - " * time: 7.982720136642456\n", - " 924 7.592391e+00 3.412860e-03\n", - " * time: 7.992280006408691\n", - " 925 7.592390e+00 2.566853e-03\n", - " * time: 7.999485969543457\n", - " 926 7.592389e+00 3.141045e-03\n", - " * time: 8.006634950637817\n", - " 927 7.592388e+00 2.055653e-03\n", - " * time: 8.016201972961426\n", - " 928 7.592387e+00 2.261286e-03\n", - " * time: 8.023386001586914\n", - " 929 7.592385e+00 2.047631e-03\n", - " * time: 8.030837059020996\n", - " 930 7.592385e+00 2.477468e-03\n", - " * time: 8.038081169128418\n", - " 931 7.592383e+00 3.310452e-03\n", - " * time: 8.045688152313232\n", - " 932 7.592383e+00 2.406084e-03\n", - " * time: 8.052994966506958\n", - " 933 7.592382e+00 2.831172e-03\n", - " * time: 8.060557126998901\n", - " 934 7.592381e+00 3.032386e-03\n", - " * time: 8.067903995513916\n", - " 935 7.592380e+00 2.914950e-03\n", - " * time: 8.075181007385254\n", - " 936 7.592378e+00 1.482636e-03\n", - " * time: 8.084784030914307\n", - " 937 7.592377e+00 1.967409e-03\n", - " * time: 8.0920090675354\n", - " 938 7.592377e+00 3.293707e-03\n", - " * time: 8.099269151687622\n", - " 939 7.592376e+00 2.351730e-03\n", - " * time: 8.106465101242065\n", - " 940 7.592375e+00 2.387272e-03\n", - " * time: 8.113722085952759\n", - " 941 7.592374e+00 1.642605e-03\n", - " * time: 8.123247146606445\n", - " 942 7.592373e+00 2.202220e-03\n", - " * time: 8.132745027542114\n", - " 943 7.592372e+00 1.642191e-03\n", - " * time: 8.142266035079956\n", - " 944 7.592371e+00 1.174035e-03\n", - " * time: 8.15170407295227\n", - " 945 7.592371e+00 2.014029e-03\n", - " * time: 8.15885305404663\n", - " 946 7.592370e+00 9.723143e-04\n", - " * time: 8.168431997299194\n", - " 947 7.592370e+00 1.339137e-03\n", - " * time: 8.175663948059082\n", - " 948 7.592369e+00 2.082578e-03\n", - " * time: 8.182847023010254\n", - " 949 7.592369e+00 1.326154e-03\n", - " * time: 8.19237208366394\n", - " 950 7.592368e+00 1.409954e-03\n", - " * time: 8.199625968933105\n", - " 951 7.592368e+00 1.598989e-03\n", - " * time: 8.206897020339966\n", - " 952 7.592367e+00 1.335811e-03\n", - " * time: 8.21429705619812\n", - " 953 7.592367e+00 1.780780e-03\n", - " * time: 8.221594095230103\n", - " 954 7.592367e+00 1.266297e-03\n", - " * time: 8.228888034820557\n", - " 955 7.592367e+00 1.833896e-03\n", - " * time: 8.23608112335205\n", - " 956 7.592366e+00 1.642212e-03\n", - " * time: 8.246315956115723\n", - " 957 7.592366e+00 1.215821e-03\n", - " * time: 8.254054069519043\n", - " 958 7.592366e+00 1.386761e-03\n", - " * time: 8.261773109436035\n", - " 959 7.592365e+00 8.700120e-04\n", - " * time: 8.272001028060913\n", - " 960 7.592365e+00 9.813353e-04\n", - " * time: 8.279721021652222\n", - " 961 7.592365e+00 6.615646e-04\n", - " * time: 8.28746509552002\n", - " 962 7.592365e+00 5.160982e-04\n", - " * time: 8.297785997390747\n", - " 963 7.592365e+00 5.289895e-04\n", - " * time: 8.3055260181427\n", - " 964 7.592365e+00 5.228905e-04\n", - " * time: 8.337502002716064\n", - " 965 7.592365e+00 1.087615e-03\n", - " * time: 8.344778060913086\n", - " 966 7.592365e+00 5.426209e-04\n", - " * time: 8.351988077163696\n", - " 967 7.592365e+00 6.308897e-04\n", - " * time: 8.359174013137817\n", - " 968 7.592365e+00 5.152711e-04\n", - " * time: 8.3664071559906\n", - " 969 7.592365e+00 5.453537e-04\n", - " * time: 8.373578071594238\n", - " 970 7.592365e+00 5.746836e-04\n", - " * time: 8.380687952041626\n", - " 971 7.592365e+00 2.903729e-04\n", - " * time: 8.39028811454773\n", - " 972 7.592365e+00 3.416760e-04\n", - " * time: 8.397438049316406\n", - " 973 7.592364e+00 3.193843e-04\n", - " * time: 8.404591083526611\n", - " 974 7.592364e+00 7.095295e-04\n", - " * time: 8.41172194480896\n", - " 975 7.592364e+00 4.830396e-04\n", - " * time: 8.418889999389648\n", - " 976 7.592364e+00 1.328727e-03\n", - " * time: 8.426092147827148\n", - " 977 7.592364e+00 7.099316e-04\n", - " * time: 8.4356689453125\n", - " 978 7.592364e+00 5.292578e-04\n", - " * time: 8.445245027542114\n", - " 979 7.592364e+00 5.427249e-04\n", - " * time: 8.454771041870117\n", - " 980 7.592364e+00 6.499877e-04\n", - " * time: 8.462038040161133\n", - " 981 7.592364e+00 6.214676e-04\n", - " * time: 8.469316959381104\n", - " 982 7.592364e+00 6.956754e-04\n", - " * time: 8.476519107818604\n", - " 983 7.592364e+00 6.696266e-04\n", - " * time: 8.483802080154419\n", - " 984 7.592364e+00 5.670426e-04\n", - " * time: 8.49097204208374\n", - " 985 7.592364e+00 3.815002e-04\n", - " * time: 8.500509977340698\n", - " 986 7.592364e+00 6.100759e-04\n", - " * time: 8.50773310661316\n", - " 987 7.592364e+00 3.299736e-04\n", - " * time: 8.51734209060669\n", - " 988 7.592364e+00 3.915158e-04\n", - " * time: 8.52452802658081\n", - " 989 7.592364e+00 3.358827e-04\n", - " * time: 8.531687021255493\n", - " 990 7.592364e+00 3.038454e-04\n", - " * time: 8.54129409790039\n" + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +28.60203113257 -1.39 6.61s\n", + " 2 +19.81798699227 0.94 -0.82 11.4ms\n", + " 3 +13.61143850144 0.79 -0.43 11.2ms\n", + " 4 +11.29738164676 0.36 -0.32 11.3ms\n", + " 5 +10.50694408731 -0.10 -0.70 9.11ms\n", + " 6 +9.845995696961 -0.18 -0.79 9.17ms\n", + " 7 +9.113174784619 -0.14 -0.98 9.04ms\n", + " 8 +8.668419390092 -0.35 -0.91 9.08ms\n", + " 9 +8.373038680437 -0.53 -0.89 9.24ms\n", + " 10 +8.216863345321 -0.81 -0.97 9.06ms\n", + " 11 +8.098774287235 -0.93 -1.08 9.05ms\n", + " 12 +7.989081969454 -0.96 -1.14 9.08ms\n", + " 13 +7.946720024788 -1.37 -1.07 6.96ms\n", + " 14 +7.900353245554 -1.33 -1.17 6.89ms\n", + " 15 +7.862079053354 -1.42 -0.82 9.05ms\n", + " 16 +7.826136501575 -1.44 -1.20 6.90ms\n", + " 17 +7.800974771593 -1.60 -1.21 6.91ms\n", + " 18 +7.778207588294 -1.64 -1.21 6.91ms\n", + " 19 +7.767403341943 -1.97 -1.09 6.92ms\n", + " 20 +7.749334692180 -1.74 -1.08 9.05ms\n", + " 21 +7.737313303911 -1.92 -1.23 6.88ms\n", + " 22 +7.726276075131 -1.96 -1.17 6.86ms\n", + " 23 +7.707040640242 -1.72 -1.22 37.0ms\n", + " 24 +7.699507188963 -2.12 -1.14 6.94ms\n", + " 25 +7.682521871464 -1.77 -1.20 6.82ms\n", + " 26 +7.668514554167 -1.85 -1.28 6.81ms\n", + " 27 +7.667159830566 -2.87 -1.28 6.80ms\n", + " 28 +7.661639647319 -2.26 -1.27 6.78ms\n", + " 29 +7.658370483027 -2.49 -1.39 6.81ms\n", + " 30 +7.648335753103 -2.00 -1.20 8.92ms\n", + " 31 +7.642903642948 -2.27 -1.33 6.84ms\n", + " 32 +7.636336952326 -2.18 -1.30 8.99ms\n", + " 33 +7.631008166091 -2.27 -1.27 8.96ms\n", + " 34 +7.628043322028 -2.53 -1.53 6.79ms\n", + " 35 +7.627603814979 -3.36 -1.53 6.81ms\n", + " 36 +7.626610417346 -3.00 -1.52 6.83ms\n", + " 37 +7.625480844556 -2.95 -1.69 6.84ms\n", + " 38 +7.623605303361 -2.73 -1.56 8.96ms\n", + " 39 +7.622990916893 -3.21 -1.57 6.79ms\n", + " 40 +7.621780938618 -2.92 -1.76 6.79ms\n", + " 41 +7.620174919577 -2.79 -1.83 6.83ms\n", + " 42 +7.619020863908 -2.94 -1.76 9.11ms\n", + " 43 +7.618761419883 -3.59 -1.68 6.85ms\n", + " 44 +7.618621353560 -3.85 -1.92 6.82ms\n", + " 45 +7.618307876492 -3.50 -1.82 6.85ms\n", + " 46 +7.618072225658 -3.63 -1.86 6.90ms\n", + " 47 +7.617624347170 -3.35 -1.86 6.84ms\n", + " 48 +7.617085625047 -3.27 -1.86 6.83ms\n", + " 49 +7.616671140584 -3.38 -1.95 6.86ms\n", + " 50 +7.615980140379 -3.16 -1.74 8.97ms\n", + " 51 +7.615522245387 -3.34 -1.81 9.01ms\n", + " 52 +7.615222733163 -3.52 -2.17 6.81ms\n", + " 53 +7.614965348638 -3.59 -2.12 6.85ms\n", + " 54 +7.614708408368 -3.59 -1.94 8.93ms\n", + " 55 +7.614500826336 -3.68 -1.94 9.03ms\n", + " 56 +7.614288520595 -3.67 -1.90 9.05ms\n", + " 57 +7.614180556589 -3.97 -1.83 6.89ms\n", + " 58 +7.614077079363 -3.99 -1.87 6.86ms\n", + " 59 +7.613766696743 -3.51 -1.90 7.55ms\n", + " 60 +7.613444757065 -3.49 -1.70 7.78ms\n", + " 61 +7.612896257534 -3.26 -2.00 10.3ms\n", + " 62 +7.612843624935 -4.28 -1.78 11.4ms\n", + " 63 +7.612651576735 -3.72 -1.68 9.41ms\n", + " 64 +7.612093934458 -3.25 -1.73 7.94ms\n", + " 65 +7.611575742915 -3.29 -1.94 7.90ms\n", + " 66 +7.611557666436 -4.74 -1.75 30.4ms\n", + " 67 +7.611024170342 -3.27 -1.84 9.42ms\n", + " 68 +7.610438727062 -3.23 -1.48 9.16ms\n", + " 69 +7.609960377852 -3.32 -1.90 6.96ms\n", + " 70 +7.609589330933 -3.43 -1.92 6.89ms\n", + " 71 +7.609574384723 -4.83 -1.94 6.91ms\n", + " 72 +7.609278484166 -3.53 -1.92 9.07ms\n", + " 73 +7.608982029693 -3.53 -1.66 9.10ms\n", + " 74 +7.608884731438 -4.01 -1.86 6.93ms\n", + " 75 +7.608669736444 -3.67 -2.16 6.91ms\n", + " 76 +7.608575419031 -4.03 -2.05 6.99ms\n", + " 77 +7.608355433751 -3.66 -1.72 9.08ms\n", + " 78 +7.608181279838 -3.76 -2.11 6.96ms\n", + " 79 +7.608063528909 -3.93 -2.14 6.91ms\n", + " 80 +7.607906625437 -3.80 -2.31 6.91ms\n", + " 81 +7.607739712132 -3.78 -2.04 9.06ms\n", + " 82 +7.607717579815 -4.65 -1.94 6.85ms\n", + " 83 +7.607583066080 -3.87 -2.27 6.85ms\n", + " 84 +7.607531244880 -4.29 -2.27 6.92ms\n", + " 85 +7.607397578906 -3.87 -2.01 6.93ms\n", + " 86 +7.607345960730 -4.29 -2.11 6.92ms\n", + " 87 +7.607308573392 -4.43 -1.83 6.89ms\n", + " 88 +7.607165886483 -3.85 -2.25 6.91ms\n", + " 89 +7.607030115732 -3.87 -2.26 6.88ms\n", + " 90 +7.606846963472 -3.74 -1.99 9.11ms\n", + " 91 +7.606735183091 -3.95 -2.15 6.88ms\n", + " 92 +7.606635484518 -4.00 -2.37 6.93ms\n", + " 93 +7.606442796407 -3.72 -1.77 9.16ms\n", + " 94 +7.606299029007 -3.84 -2.16 6.92ms\n", + " 95 +7.606138990621 -3.80 -1.83 9.08ms\n", + " 96 +7.606061518967 -4.11 -2.09 6.90ms\n", + " 97 +7.605886727374 -3.76 -1.68 9.04ms\n", + " 98 +7.605654610003 -3.63 -1.50 9.02ms\n", + " 99 +7.605384261488 -3.57 -1.74 6.87ms\n", + " 100 +7.605105037334 -3.55 -1.48 9.05ms\n", + " 101 +7.605022980878 -4.09 -1.79 6.85ms\n", + " 102 +7.604752087347 -3.57 -1.67 6.93ms\n", + " 103 +7.604703477015 -4.31 -1.83 7.82ms\n", + " 104 +7.604451264361 -3.60 -1.95 10.2ms\n", + " 105 +7.604093326701 -3.45 -1.96 7.80ms\n", + " 106 +7.603915445709 -3.75 -2.05 7.75ms\n", + " 107 +7.603687014970 -3.64 -2.06 7.73ms\n", + " 108 +7.603540375568 -3.83 -1.98 10.3ms\n", + " 109 +7.603379475157 -3.79 -2.06 16.4ms\n", + " 110 +7.603209315303 -3.77 -1.89 9.14ms\n", + " 111 +7.603049671068 -3.80 -2.25 6.89ms\n", + " 112 +7.602932915996 -3.93 -2.05 6.87ms\n", + " 113 +7.602839938687 -4.03 -2.15 6.85ms\n", + " 114 +7.602746725084 -4.03 -1.95 9.04ms\n", + " 115 +7.602639747228 -3.97 -2.27 6.89ms\n", + " 116 +7.602546297003 -4.03 -2.12 9.10ms\n", + " 117 +7.602514048922 -4.49 -2.05 6.90ms\n", + " 118 +7.602460329192 -4.27 -2.16 6.92ms\n", + " 119 +7.602401979546 -4.23 -2.42 6.93ms\n", + " 120 +7.602328605794 -4.13 -2.01 9.08ms\n", + " 121 +7.602293480080 -4.45 -2.41 7.03ms\n", + " 122 +7.602252347849 -4.39 -2.37 6.99ms\n", + " 123 +7.602200892873 -4.29 -2.28 6.92ms\n", + " 124 +7.602139087614 -4.21 -2.13 9.11ms\n", + " 125 +7.602091873358 -4.33 -2.36 6.90ms\n", + " 126 +7.602066594854 -4.60 -2.45 6.92ms\n", + " 127 +7.602024780619 -4.38 -2.46 6.97ms\n", + " 128 +7.601969951040 -4.26 -1.99 9.11ms\n", + " 129 +7.601959314032 -4.97 -2.17 6.94ms\n", + " 130 +7.601937040295 -4.65 -2.26 6.97ms\n", + " 131 +7.601888781151 -4.32 -2.58 7.03ms\n", + " 132 +7.601881280194 -5.12 -2.03 6.95ms\n", + " 133 +7.601814726988 -4.18 -2.07 9.08ms\n", + " 134 +7.601754772123 -4.22 -2.25 6.98ms\n", + " 135 +7.601695891407 -4.23 -2.52 6.95ms\n", + " 136 +7.601650847903 -4.35 -2.21 6.97ms\n", + " 137 +7.601578299999 -4.14 -1.94 9.12ms\n", + " 138 +7.601569808131 -5.07 -2.16 7.02ms\n", + " 139 +7.601503985459 -4.18 -2.53 6.99ms\n", + " 140 +7.601403600759 -4.00 -1.85 9.16ms\n", + " 141 +7.601326787340 -4.11 -1.97 9.18ms\n", + " 142 +7.601283227979 -4.36 -2.31 6.98ms\n", + " 143 +7.601199066979 -4.07 -1.67 9.11ms\n", + " 144 +7.601175213253 -4.62 -2.16 6.99ms\n", + " 145 +7.601094330068 -4.09 -2.46 7.53ms\n", + " 146 +7.601060604115 -4.47 -2.25 7.78ms\n", + " 147 +7.600964410943 -4.02 -1.65 10.2ms\n", + " 148 +7.600929257510 -4.45 -2.35 7.79ms\n", + " 149 +7.600896038039 -4.48 -2.02 7.76ms\n", + " 150 +7.600822223909 -4.13 -2.18 10.2ms\n", + " 151 +7.600815370346 -5.16 -2.31 17.2ms\n", + " 152 +7.600726865250 -4.05 -2.34 7.08ms\n", + " 153 +7.600666537936 -4.22 -2.41 6.90ms\n", + " 154 +7.600600165805 -4.18 -2.22 6.93ms\n", + " 155 +7.600488245536 -3.95 -1.99 9.01ms\n", + " 156 +7.600420174380 -4.17 -2.17 6.88ms\n", + " 157 +7.600403761770 -4.78 -1.93 6.87ms\n", + " 158 +7.600304725450 -4.00 -2.29 6.86ms\n", + " 159 +7.600226655177 -4.11 -2.04 9.09ms\n", + " 160 +7.600192724279 -4.47 -2.14 6.88ms\n", + " 161 +7.600177284643 -4.81 -2.24 6.88ms\n", + " 162 +7.600077983552 -4.00 -1.83 9.08ms\n", + " 163 +7.600004336144 -4.13 -2.22 6.88ms\n", + " 164 +7.599959839871 -4.35 -2.42 6.89ms\n", + " 165 +7.599864921248 -4.02 -1.92 9.08ms\n", + " 166 +7.599812669894 -4.28 -2.37 6.90ms\n", + " 167 +7.599739579494 -4.14 -2.47 6.88ms\n", + " 168 +7.599662989154 -4.12 -2.02 9.03ms\n", + " 169 +7.599634470485 -4.54 -2.30 6.90ms\n", + " 170 +7.599595931477 -4.41 -2.50 6.93ms\n", + " 171 +7.599542831564 -4.27 -2.11 9.23ms\n", + " 172 +7.599485184470 -4.24 -1.94 9.22ms\n", + " 173 +7.599453225449 -4.50 -2.58 6.97ms\n", + " 174 +7.599414727669 -4.41 -2.30 6.95ms\n", + " 175 +7.599346526618 -4.17 -2.26 6.91ms\n", + " 176 +7.599326269023 -4.69 -2.36 6.94ms\n", + " 177 +7.599296158682 -4.52 -2.14 6.97ms\n", + " 178 +7.599211650173 -4.07 -2.31 6.96ms\n", + " 179 +7.599207932588 -5.43 -2.17 6.97ms\n", + " 180 +7.599072199954 -3.87 -2.19 6.93ms\n", + " 181 +7.599000220087 -4.14 -2.07 6.95ms\n", + " 182 +7.598917686153 -4.08 -2.02 9.13ms\n", + " 183 +7.598846779967 -4.15 -2.17 9.13ms\n", + " 184 +7.598802514266 -4.35 -2.13 6.98ms\n", + " 185 +7.598703034276 -4.00 -2.06 9.13ms\n", + " 186 +7.598667458524 -4.45 -2.22 6.95ms\n", + " 187 +7.598643243782 -4.62 -1.95 6.92ms\n", + " 188 +7.598496503027 -3.83 -1.81 9.83ms\n", + " 189 +7.598380713675 -3.94 -2.13 7.80ms\n", + " 190 +7.598292806900 -4.06 -2.14 10.9ms\n", + " 191 +7.598168832125 -3.91 -2.20 8.96ms\n", + " 192 +7.598150889383 -4.75 -2.09 7.90ms\n", + " 193 +7.598143612053 -5.14 -1.99 7.96ms\n", + " 194 +7.598055221510 -4.05 -2.05 19.7ms\n", + " 195 +7.597954307082 -4.00 -1.99 9.21ms\n", + " 196 +7.597844316549 -3.96 -2.19 6.97ms\n", + " 197 +7.597737454539 -3.97 -2.20 6.94ms\n", + " 198 +7.597612313864 -3.90 -1.91 9.04ms\n", + " 199 +7.597517798544 -4.02 -2.22 6.86ms\n", + " 200 +7.597495982438 -4.66 -2.13 6.83ms\n", + " 201 +7.597454067017 -4.38 -2.37 6.86ms\n", + " 202 +7.597403203101 -4.29 -2.11 6.93ms\n", + " 203 +7.597367516213 -4.45 -1.92 6.87ms\n", + " 204 +7.597197575939 -3.77 -1.60 9.02ms\n", + " 205 +7.597057400122 -3.85 -1.90 8.99ms\n", + " 206 +7.596862767816 -3.71 -1.65 9.00ms\n", + " 207 +7.596762278825 -4.00 -1.92 6.91ms\n", + " 208 +7.596659576019 -3.99 -2.30 6.88ms\n", + " 209 +7.596627914259 -4.50 -2.25 6.91ms\n", + " 210 +7.596513782944 -3.94 -2.16 6.86ms\n", + " 211 +7.596387297592 -3.90 -2.01 6.86ms\n", + " 212 +7.596316409197 -4.15 -2.16 6.93ms\n", + " 213 +7.596157208318 -3.80 -1.79 9.07ms\n", + " 214 +7.596046434571 -3.96 -1.81 9.04ms\n", + " 215 +7.595867453120 -3.75 -1.87 9.10ms\n", + " 216 +7.595740015573 -3.89 -1.76 9.08ms\n", + " 217 +7.595684008785 -4.25 -1.96 6.90ms\n", + " 218 +7.595536520612 -3.83 -1.76 9.02ms\n", + " 219 +7.595369265404 -3.78 -2.28 6.90ms\n", + " 220 +7.595127066035 -3.62 -1.56 9.11ms\n", + " 221 +7.594921199482 -3.69 -2.07 6.89ms\n", + " 222 +7.594885472670 -4.45 -2.30 6.90ms\n", + " 223 +7.594733934795 -3.82 -2.33 6.88ms\n", + " 224 +7.594640428712 -4.03 -2.08 9.06ms\n", + " 225 +7.594568435602 -4.14 -1.88 6.92ms\n", + " 226 +7.594560138268 -5.08 -1.87 6.89ms\n", + " 227 +7.594523265809 -4.43 -2.07 6.85ms\n", + " 228 +7.594369608898 -3.81 -1.60 9.15ms\n", + " 229 +7.594274925355 -4.02 -2.04 6.87ms\n", + " 230 +7.594271034055 -5.41 -2.10 7.57ms\n", + " 231 +7.594135962568 -3.87 -2.26 7.75ms\n", + " 232 +7.594084340178 -4.29 -2.21 7.75ms\n", + " 233 +7.594035592975 -4.31 -2.16 7.74ms\n", + " 234 +7.593985776320 -4.30 -2.22 7.78ms\n", + " 235 +7.593979524646 -5.20 -2.32 7.79ms\n", + " 236 +7.593874301561 -3.98 -1.98 19.5ms\n", + " 237 +7.593870068945 -5.37 -2.15 7.25ms\n", + " 238 +7.593802405606 -4.17 -2.27 6.97ms\n", + " 239 +7.593717107793 -4.07 -2.32 7.00ms\n", + " 240 +7.593701903190 -4.82 -2.23 6.96ms\n", + " 241 +7.593698276372 -5.44 -2.28 6.96ms\n", + " 242 +7.593662112955 -4.44 -2.48 6.90ms\n", + " 243 +7.593615678938 -4.33 -2.55 6.94ms\n", + " 244 +7.593576372415 -4.41 -2.34 6.94ms\n", + " 245 +7.593527904437 -4.31 -2.32 9.15ms\n", + " 246 +7.593487522635 -4.39 -2.25 9.24ms\n", + " 247 +7.593467109342 -4.69 -2.44 7.03ms\n", + " 248 +7.593440075066 -4.57 -2.36 9.17ms\n", + " 249 +7.593426404210 -4.86 -2.55 6.99ms\n", + " 250 +7.593423244309 -5.50 -2.68 7.00ms\n", + " 251 +7.593415087020 -5.09 -2.42 7.00ms\n", + " 252 +7.593389444064 -4.59 -2.23 6.94ms\n", + " 253 +7.593374951949 -4.84 -2.50 6.94ms\n", + " 254 +7.593351997910 -4.64 -2.61 6.93ms\n", + " 255 +7.593343231357 -5.06 -2.27 6.97ms\n", + " 256 +7.593320662248 -4.65 -2.75 7.07ms\n", + " 257 +7.593297849093 -4.64 -2.66 7.00ms\n", + " 258 +7.593268693283 -4.54 -2.36 9.13ms\n", + " 259 +7.593259463307 -5.03 -2.62 7.01ms\n", + " 260 +7.593253805746 -5.25 -2.55 7.02ms\n", + " 261 +7.593240062555 -4.86 -2.62 9.17ms\n", + " 262 +7.593222220642 -4.75 -2.51 9.13ms\n", + " 263 +7.593202928964 -4.71 -2.40 9.16ms\n", + " 264 +7.593199560865 -5.47 -2.39 6.95ms\n", + " 265 +7.593187428829 -4.92 -2.49 7.00ms\n", + " 266 +7.593175640819 -4.93 -2.15 6.93ms\n", + " 267 +7.593155315246 -4.69 -2.68 6.91ms\n", + " 268 +7.593144176891 -4.95 -2.50 6.90ms\n", + " 269 +7.593138392180 -5.24 -2.70 6.86ms\n", + " 270 +7.593115906678 -4.65 -2.44 9.03ms\n", + " 271 +7.593110626693 -5.28 -2.37 6.86ms\n", + " 272 +7.593089897450 -4.68 -2.70 6.86ms\n", + " 273 +7.593067174543 -4.64 -2.61 6.86ms\n", + " 274 +7.593053134330 -4.85 -2.37 7.47ms\n", + " 275 +7.593034498767 -4.73 -2.50 10.2ms\n", + " 276 +7.593027993174 -5.19 -2.55 7.75ms\n", + " 277 +7.593008921336 -4.72 -2.31 10.2ms\n", + " 278 +7.592994628262 -4.84 -2.36 7.75ms\n", + " 279 +7.592977221047 -4.76 -2.23 10.2ms\n", + " 280 +7.592959909064 -4.76 -2.15 18.6ms\n", + " 281 +7.592956070002 -5.42 -2.53 6.97ms\n", + " 282 +7.592937363486 -4.73 -2.15 9.05ms\n", + " 283 +7.592924630973 -4.90 -2.40 6.85ms\n", + " 284 +7.592917540511 -5.15 -2.71 6.86ms\n", + " 285 +7.592906995328 -4.98 -2.37 6.91ms\n", + " 286 +7.592893033457 -4.86 -2.79 6.88ms\n", + " 287 +7.592886513749 -5.19 -2.42 6.89ms\n", + " 288 +7.592868811218 -4.75 -2.59 6.91ms\n", + " 289 +7.592853527854 -4.82 -2.56 6.88ms\n", + " 290 +7.592840120929 -4.87 -2.62 6.86ms\n", + " 291 +7.592821472272 -4.73 -2.61 6.95ms\n", + " 292 +7.592804479126 -4.77 -2.46 9.08ms\n", + " 293 +7.592788283060 -4.79 -2.72 6.89ms\n", + " 294 +7.592773022782 -4.82 -2.61 9.03ms\n", + " 295 +7.592771789528 -5.91 -2.35 6.88ms\n", + " 296 +7.592754257286 -4.76 -2.29 8.97ms\n", + " 297 +7.592742519984 -4.93 -2.35 6.85ms\n", + " 298 +7.592721749316 -4.68 -2.12 9.06ms\n", + " 299 +7.592717395957 -5.36 -2.30 6.92ms\n", + " 300 +7.592708019982 -5.03 -2.43 6.93ms\n", + " 301 +7.592706799000 -5.91 -2.26 6.90ms\n", + " 302 +7.592688830161 -4.75 -2.61 6.91ms\n", + " 303 +7.592666410406 -4.65 -2.84 6.96ms\n", + " 304 +7.592629841752 -4.44 -2.51 6.96ms\n", + " 305 +7.592614703241 -4.82 -2.66 6.91ms\n", + " 306 +7.592593776098 -4.68 -2.38 9.10ms\n", + " 307 +7.592576406547 -4.76 -2.83 6.93ms\n", + " 308 +7.592560948981 -4.81 -2.40 9.11ms\n", + " 309 +7.592553838102 -5.15 -2.77 6.93ms\n", + " 310 +7.592536194608 -4.75 -2.35 9.10ms\n", + " 311 +7.592517097608 -4.72 -2.16 9.11ms\n", + " 312 +7.592491213777 -4.59 -1.88 9.12ms\n", + " 313 +7.592478826964 -4.91 -2.25 6.99ms\n", + " 314 +7.592469091623 -5.01 -2.56 6.96ms\n", + " 315 +7.592466042396 -5.52 -2.34 6.93ms\n", + " 316 +7.592457859050 -5.09 -2.50 10.0ms\n", + " 317 +7.592448461935 -5.03 -2.74 10.3ms\n", + " 318 +7.592433738490 -4.83 -2.75 7.85ms\n", + " 319 +7.592418526973 -4.82 -2.85 7.90ms\n", + " 320 +7.592409515691 -5.05 -2.56 10.5ms\n", + " 321 +7.592404295987 -5.28 -2.93 7.91ms\n", + " 322 +7.592404136003 -6.80 -2.82 20.0ms\n", + " 323 +7.592398934489 -5.28 -3.06 7.12ms\n", + " 324 +7.592394042276 -5.31 -2.85 9.22ms\n", + " 325 +7.592390308893 -5.43 -2.90 7.03ms\n", + " 326 +7.592388230128 -5.68 -2.50 6.94ms\n", + " 327 +7.592384481310 -5.43 -2.75 6.87ms\n", + " 328 +7.592381937247 -5.59 -2.75 6.89ms\n", + " 329 +7.592377696473 -5.37 -2.79 6.86ms\n", + " 330 +7.592373354840 -5.36 -3.02 6.93ms\n", + " 331 +7.592369657721 -5.43 -3.00 6.86ms\n", + " 332 +7.592368756732 -6.05 -2.95 6.87ms\n", + " 333 +7.592364934192 -5.42 -2.84 9.02ms\n", + " 334 +7.592364646449 -6.54 -2.93 6.87ms\n", + " 335 +7.592362256019 -5.62 -3.14 6.88ms\n", + " 336 +7.592360965835 -5.89 -3.04 6.90ms\n", + " 337 +7.592356832019 -5.38 -2.81 9.03ms\n", + " 338 +7.592355936172 -6.05 -2.90 6.84ms\n", + " 339 +7.592353690018 -5.65 -2.83 9.02ms\n", + " 340 +7.592353282575 -6.39 -2.87 6.84ms\n", + " 341 +7.592351846558 -5.84 -3.14 6.91ms\n", + " 342 +7.592350363674 -5.83 -3.08 6.87ms\n", + " 343 +7.592349662282 -6.15 -2.85 6.90ms\n", + " 344 +7.592347404793 -5.65 -3.32 6.91ms\n", + " 345 +7.592344360298 -5.52 -2.89 9.05ms\n", + " 346 +7.592343944694 -6.38 -3.08 6.87ms\n", + " 347 +7.592343069085 -6.06 -3.02 6.86ms\n", + " 348 +7.592341740505 -5.88 -3.18 6.88ms\n", + " 349 +7.592341520575 -6.66 -2.98 6.91ms\n", + " 350 +7.592339892504 -5.79 -3.19 6.89ms\n", + " 351 +7.592336929122 -5.53 -2.88 9.02ms\n", + " 352 +7.592335056432 -5.73 -3.03 9.06ms\n", + " 353 +7.592333882819 -5.93 -2.97 6.84ms\n", + " 354 +7.592331121185 -5.56 -2.73 9.05ms\n", + " 355 +7.592330130775 -6.00 -3.34 6.96ms\n", + " 356 +7.592328252905 -5.73 -3.36 6.88ms\n", + " 357 +7.592326601567 -5.78 -3.01 9.08ms\n", + " 358 +7.592325371035 -5.91 -2.93 9.05ms\n", + " 359 +7.592324747635 -6.21 -3.22 10.1ms\n", + " 360 +7.592323269288 -5.83 -2.82 10.3ms\n", + " 361 +7.592323077021 -6.72 -2.99 7.74ms\n", + " 362 +7.592322232296 -6.07 -3.42 7.76ms\n", + " 363 +7.592321451458 -6.11 -3.29 7.74ms\n", + " 364 +7.592320914114 -6.27 -2.98 7.74ms\n", + " 365 +7.592320320286 -6.23 -3.39 17.3ms\n", + " 366 +7.592320165839 -6.81 -3.38 7.08ms\n", + " 367 +7.592319384284 -6.11 -3.49 6.96ms\n", + " 368 +7.592319153680 -6.64 -3.30 6.99ms\n", + " 369 +7.592318666506 -6.31 -3.42 6.91ms\n", + " 370 +7.592318037619 -6.20 -3.50 6.96ms\n", + " 371 +7.592317468065 -6.24 -3.44 6.91ms\n", + " 372 +7.592316952597 -6.29 -3.27 9.25ms\n", + " 373 +7.592316789142 -6.79 -3.39 7.01ms\n", + " 374 +7.592316675162 -6.94 -3.43 6.94ms\n", + " 375 +7.592316569229 -6.97 -3.16 7.04ms\n", + " 376 +7.592316225968 -6.46 -3.30 6.98ms\n", + " 377 +7.592315876425 -6.46 -3.28 9.10ms\n", + " 378 +7.592315597406 -6.55 -3.47 6.98ms\n", + " 379 +7.592315519020 -7.11 -3.15 6.95ms\n", + " 380 +7.592315223240 -6.53 -3.42 6.98ms\n", + " 381 +7.592314992200 -6.64 -3.56 6.94ms\n", + " 382 +7.592314673533 -6.50 -3.49 6.99ms\n", + " 383 +7.592314299455 -6.43 -3.63 6.90ms\n", + " 384 +7.592313871695 -6.37 -3.40 9.17ms\n", + " 385 +7.592313598318 -6.56 -3.49 9.20ms\n", + " 386 +7.592313248910 -6.46 -3.26 9.14ms\n", + " 387 +7.592313189737 -7.23 -3.57 7.01ms\n", + " 388 +7.592313031290 -6.80 -3.86 7.00ms\n", + " 389 +7.592312927932 -6.99 -3.52 7.00ms\n", + " 390 +7.592312678262 -6.60 -3.17 9.13ms\n", + " 391 +7.592312464772 -6.67 -3.40 6.91ms\n", + " 392 +7.592312337725 -6.90 -3.36 6.96ms\n", + " 393 +7.592312159664 -6.75 -3.43 6.95ms\n", + " 394 +7.592312037354 -6.91 -3.46 6.92ms\n", + " 395 +7.592311856662 -6.74 -3.63 6.87ms\n", + " 396 +7.592311622256 -6.63 -3.70 6.88ms\n", + " 397 +7.592311382609 -6.62 -3.49 9.02ms\n", + " 398 +7.592311065154 -6.50 -3.28 9.04ms\n", + " 399 +7.592311000160 -7.19 -3.84 6.83ms\n", + " 400 +7.592310856062 -6.84 -3.37 9.04ms\n", + " 401 +7.592310731706 -6.91 -3.81 6.83ms\n", + " 402 +7.592310629461 -6.99 -3.49 7.56ms\n", + " 403 +7.592310454202 -6.76 -3.27 10.2ms\n", + " 404 +7.592310357475 -7.01 -3.31 7.77ms\n", + " 405 +7.592310317865 -7.40 -3.14 7.75ms\n", + " 406 +7.592310254052 -7.20 -3.31 7.73ms\n", + " 407 +7.592310133847 -6.92 -3.58 7.71ms\n", + " 408 +7.592310037194 -7.01 -3.78 17.1ms\n", + " 409 +7.592309917056 -6.92 -3.55 6.95ms\n", + " 410 +7.592309868553 -7.31 -3.70 6.91ms\n", + " 411 +7.592309661252 -6.68 -3.56 6.90ms\n", + " 412 +7.592309576230 -7.07 -3.52 6.85ms\n", + " 413 +7.592309452371 -6.91 -3.66 8.97ms\n", + " 414 +7.592309421279 -7.51 -3.80 6.86ms\n", + " 415 +7.592309388381 -7.48 -3.66 6.82ms\n", + " 416 +7.592309249692 -6.86 -3.44 9.03ms\n", + " 417 +7.592309117181 -6.88 -3.40 9.05ms\n", + " 418 +7.592309105492 -7.93 -3.50 6.88ms\n", + " 419 +7.592309105132 -9.44 -3.64 6.88ms\n", + " 420 +7.592309072105 -7.48 -3.51 6.87ms\n", + " 421 +7.592309017051 -7.26 -3.42 6.86ms\n", + " 422 +7.592308893684 -6.91 -3.84 6.85ms\n", + " 423 +7.592308815061 -7.10 -3.37 6.87ms\n", + " 424 +7.592308712426 -6.99 -3.86 6.87ms\n", + " 425 +7.592308523907 -6.72 -3.51 8.97ms\n", + " 426 +7.592308342119 -6.74 -3.39 9.02ms\n", + " 427 +7.592308218323 -6.91 -3.87 6.91ms\n", + " 428 +7.592308140372 -7.11 -3.71 6.89ms\n", + " 429 +7.592308020198 -6.92 -3.62 9.11ms\n", + " 430 +7.592307958013 -7.21 -3.67 9.17ms\n", + " 431 +7.592307902180 -7.25 -3.57 9.14ms\n", + " 432 +7.592307829247 -7.14 -3.45 9.08ms\n", + " 433 +7.592307793592 -7.45 -3.68 6.96ms\n", + " 434 +7.592307777060 -7.78 -3.27 6.93ms\n", + " 435 +7.592307715716 -7.21 -3.75 6.92ms\n", + " 436 +7.592307630718 -7.07 -3.65 6.97ms\n", + " 437 +7.592307622165 -8.07 -3.50 6.93ms\n", + " 438 +7.592307567402 -7.26 -3.74 6.97ms\n", + " 439 +7.592307550514 -7.77 -3.54 6.93ms\n", + " 440 +7.592307369879 -6.74 -3.77 6.91ms\n", + " 441 +7.592307234376 -6.87 -3.53 6.91ms\n", + " 442 +7.592307096549 -6.86 -3.46 9.04ms\n", + " 443 +7.592307010787 -7.07 -3.56 9.08ms\n", + " 444 +7.592306965721 -7.35 -3.78 6.88ms\n", + " 445 +7.592306824689 -6.85 -3.20 10.1ms\n", + " 446 +7.592306727910 -7.01 -3.59 7.83ms\n", + " 447 +7.592306665924 -7.21 -3.22 7.77ms\n", + " 448 +7.592306573233 -7.03 -3.13 10.2ms\n", + " 449 +7.592306485666 -7.06 -3.44 7.74ms\n", + " 450 +7.592306405692 -7.10 -3.16 10.4ms\n", + " 451 +7.592306371996 -7.47 -3.79 31.0ms\n", + " 452 +7.592306347069 -7.60 -3.67 10.6ms\n", + " 453 +7.592306308397 -7.41 -3.74 8.62ms\n", + " 454 +7.592306232859 -7.12 -3.99 6.92ms\n", + " 455 +7.592306137258 -7.02 -3.69 6.85ms\n", + " 456 +7.592306089746 -7.32 -3.68 9.31ms\n", + " 457 +7.592306059778 -7.52 -3.90 6.85ms\n", + " 458 +7.592306014734 -7.35 -3.64 9.05ms\n", + " 459 +7.592305970123 -7.35 -3.81 6.90ms\n", + " 460 +7.592305923016 -7.33 -3.38 6.86ms\n", + " 461 +7.592305861901 -7.21 -3.53 6.84ms\n", + " 462 +7.592305823758 -7.42 -3.52 6.84ms\n", + " 463 +7.592305763154 -7.22 -3.43 9.07ms\n", + " 464 +7.592305755799 -8.13 -3.76 6.91ms\n", + " 465 +7.592305715820 -7.40 -3.99 6.89ms\n", + " 466 +7.592305638619 -7.11 -3.27 9.01ms\n", + " 467 +7.592305595422 -7.36 -3.86 6.87ms\n", + " 468 +7.592305560844 -7.46 -3.63 6.86ms\n", + " 469 +7.592305529007 -7.50 -3.96 6.90ms\n", + " 470 +7.592305476767 -7.28 -3.90 6.89ms\n", + " 471 +7.592305413543 -7.20 -3.59 6.92ms\n", + " 472 +7.592305362340 -7.29 -3.84 6.88ms\n", + " 473 +7.592305358295 -8.39 -3.61 6.88ms\n", + " 474 +7.592305303826 -7.26 -3.98 6.92ms\n", + " 475 +7.592305226251 -7.11 -3.54 9.04ms\n", + " 476 +7.592305184976 -7.38 -3.78 6.89ms\n", + " 477 +7.592305162833 -7.65 -3.81 6.92ms\n", + " 478 +7.592305149501 -7.88 -3.55 6.89ms\n", + " 479 +7.592305057438 -7.04 -3.38 9.08ms\n", + " 480 +7.592305000953 -7.25 -3.59 10.2ms\n", + " 481 +7.592304974020 -7.57 -3.66 6.96ms\n", + " 482 +7.592304918846 -7.26 -3.54 8.98ms\n", + " 483 +7.592304900228 -7.73 -3.74 6.88ms\n", + " 484 +7.592304832498 -7.17 -3.33 9.06ms\n", + " 485 +7.592304785158 -7.32 -4.02 6.95ms\n", + " 486 +7.592304757088 -7.55 -3.93 6.86ms\n", + " 487 +7.592304711964 -7.35 -3.67 9.39ms\n", + " 488 +7.592304681916 -7.52 -3.72 7.76ms\n", + " 489 +7.592304649326 -7.49 -3.41 7.76ms\n", + " 490 +7.592304579707 -7.16 -4.00 7.76ms\n", + " 491 +7.592304550659 -7.54 -3.80 7.73ms\n", + " 492 +7.592304481767 -7.16 -3.44 10.2ms\n", + " 493 +7.592304439116 -7.37 -3.99 7.76ms\n", + " 494 +7.592304356542 -7.08 -3.25 19.2ms\n", + " 495 +7.592304304449 -7.28 -3.79 7.08ms\n", + " 496 +7.592304243980 -7.22 -3.67 7.10ms\n", + " 497 +7.592304191708 -7.28 -3.25 9.16ms\n", + " 498 +7.592304176295 -7.81 -3.66 6.94ms\n", + " 499 +7.592304160876 -7.81 -3.31 6.94ms\n", + " 500 +7.592304105292 -7.26 -3.04 9.09ms\n", + " 501 +7.592304067175 -7.42 -3.74 6.96ms\n", + " 502 +7.592304055439 -7.93 -3.07 6.91ms\n", + " 503 +7.592303990719 -7.19 -3.81 6.98ms\n", + " 504 +7.592303961752 -7.54 -3.65 6.97ms\n", + " 505 +7.592303928885 -7.48 -4.04 6.93ms\n", + " 506 +7.592303915230 -7.86 -3.97 7.00ms\n", + " 507 +7.592303895908 -7.71 -4.05 6.97ms\n", + " 508 +7.592303854660 -7.38 -3.82 6.94ms\n", + " 509 +7.592303816498 -7.42 -3.92 9.07ms\n", + " 510 +7.592303784680 -7.50 -3.69 9.07ms\n", + " 511 +7.592303776581 -8.09 -4.17 6.93ms\n", + " 512 +7.592303742214 -7.46 -4.01 6.97ms\n", + " 513 +7.592303707351 -7.46 -3.68 9.14ms\n", + " 514 +7.592303693235 -7.85 -3.93 9.09ms\n", + " 515 +7.592303685864 -8.13 -3.86 6.97ms\n", + " 516 +7.592303682688 -8.50 -3.94 6.94ms\n", + " 517 +7.592303669859 -7.89 -3.67 6.90ms\n", + " 518 +7.592303665927 -8.41 -3.55 6.91ms\n", + " 519 +7.592303657450 -8.07 -3.67 6.93ms\n", + " 520 +7.592303627113 -7.52 -4.37 6.88ms\n", + " 521 +7.592303577086 -7.30 -4.12 6.88ms\n", + " 522 +7.592303548909 -7.55 -3.48 9.03ms\n", + " 523 +7.592303534831 -7.85 -4.13 6.87ms\n", + " 524 +7.592303525675 -8.04 -4.32 6.91ms\n", + " 525 +7.592303515043 -7.97 -4.38 6.86ms\n", + " 526 +7.592303509329 -8.24 -3.99 6.87ms\n", + " 527 +7.592303503775 -8.26 -3.91 6.88ms\n", + " 528 +7.592303501231 -8.59 -3.64 6.92ms\n", + " 529 +7.592303480583 -7.69 -3.36 9.30ms\n", + " 530 +7.592303460714 -7.70 -3.38 9.22ms\n", + " 531 +7.592303443710 -7.77 -3.86 7.75ms\n", + " 532 +7.592303434926 -8.06 -3.62 7.75ms\n", + " 533 +7.592303420483 -7.84 -3.92 7.71ms\n", + " 534 +7.592303398033 -7.65 -3.57 7.71ms\n", + " 535 +7.592303393146 -8.31 -3.57 7.70ms\n", + " 536 +7.592303383275 -8.01 -3.97 7.82ms\n", + " 537 +7.592303342493 -7.39 -3.49 17.4ms\n", + " 538 +7.592303337535 -8.30 -3.33 7.03ms\n", + " 539 +7.592303276619 -7.22 -2.90 9.09ms\n", + " 540 +7.592303267567 -8.04 -3.44 6.91ms\n", + " 541 +7.592303246745 -7.68 -3.74 6.94ms\n", + " 542 +7.592303199281 -7.32 -3.71 6.88ms\n", + " 543 +7.592303147459 -7.29 -3.02 9.02ms\n", + " 544 +7.592303124399 -7.64 -3.60 6.87ms\n", + " 545 +7.592303100330 -7.62 -3.40 9.07ms\n", + " 546 +7.592303070649 -7.53 -3.17 9.01ms\n", + " 547 +7.592303057310 -7.87 -3.61 9.03ms\n", + " 548 +7.592303042101 -7.82 -4.30 6.85ms\n", + " 549 +7.592303026352 -7.80 -3.52 6.90ms\n", + " 550 +7.592303015562 -7.97 -3.97 6.90ms\n", + " 551 +7.592302995739 -7.70 -3.68 9.03ms\n", + " 552 +7.592302985012 -7.97 -4.11 6.88ms\n", + " 553 +7.592302974975 -8.00 -4.02 6.88ms\n", + " 554 +7.592302956053 -7.72 -4.37 6.89ms\n", + " 555 +7.592302937121 -7.72 -4.17 9.12ms\n", + " 556 +7.592302914620 -7.65 -3.91 6.99ms\n", + " 557 +7.592302905125 -8.02 -4.06 6.95ms\n", + " 558 +7.592302898136 -8.16 -4.16 6.95ms\n", + " 559 +7.592302897565 -9.24 -4.35 6.97ms\n", + " 560 +7.592302891169 -8.19 -4.12 6.98ms\n", + " 561 +7.592302890875 -9.53 -3.99 6.95ms\n", + " 562 +7.592302866085 -7.61 -4.05 6.95ms\n", + " 563 +7.592302861554 -8.34 -3.64 6.91ms\n", + " 564 +7.592302849049 -7.90 -3.50 6.98ms\n", + " 565 +7.592302812323 -7.44 -3.83 6.96ms\n", + " 566 +7.592302780721 -7.50 -3.99 6.96ms\n", + " 567 +7.592302734611 -7.34 -4.03 6.93ms\n", + " 568 +7.592302705316 -7.53 -4.00 6.95ms\n", + " 569 +7.592302661587 -7.36 -3.73 9.14ms\n", + " 570 +7.592302617573 -7.36 -3.46 9.10ms\n", + " 571 +7.592302585400 -7.49 -3.52 9.26ms\n", + " 572 +7.592302546855 -7.41 -3.31 9.14ms\n", + " 573 +7.592302524732 -7.66 -3.98 7.02ms\n", + " 574 +7.592302472999 -7.29 -3.13 10.2ms\n", + " 575 +7.592302414479 -7.23 -3.03 10.2ms\n", + " 576 +7.592302368925 -7.34 -3.36 7.80ms\n", + " 577 +7.592302354528 -7.84 -3.26 7.83ms\n", + " 578 +7.592302307349 -7.33 -3.69 7.82ms\n", + " 579 +7.592302242048 -7.19 -3.27 7.78ms\n", + " 580 +7.592302170062 -7.14 -3.62 35.6ms\n", + " 581 +7.592302136476 -7.47 -3.70 7.03ms\n", + " 582 +7.592302120474 -7.80 -3.64 6.94ms\n", + " 583 +7.592302091603 -7.54 -3.80 6.92ms\n", + " 584 +7.592302071678 -7.70 -4.12 6.91ms\n", + " 585 +7.592301979112 -7.03 -3.73 6.85ms\n", + " 586 +7.592301953188 -7.59 -3.45 6.85ms\n", + " 587 +7.592301918307 -7.46 -3.41 6.84ms\n", + " 588 +7.592301916783 -8.82 -3.44 6.91ms\n", + " 589 +7.592301870305 -7.33 -3.65 6.84ms\n", + " 590 +7.592301842008 -7.55 -3.74 6.88ms\n", + " 591 +7.592301777317 -7.19 -3.74 6.95ms\n", + " 592 +7.592301701408 -7.12 -3.31 9.08ms\n", + " 593 +7.592301620624 -7.09 -3.27 9.29ms\n", + " 594 +7.592301584216 -7.44 -3.51 9.80ms\n", + " 595 +7.592301557364 -7.57 -3.50 9.08ms\n", + " 596 +7.592301536430 -7.68 -3.82 6.94ms\n", + " 597 +7.592301479871 -7.25 -2.98 9.01ms\n", + " 598 +7.592301476279 -8.44 -3.18 6.90ms\n", + " 599 +7.592301428414 -7.32 -2.89 9.07ms\n", + " 600 +7.592301398037 -7.52 -3.20 6.92ms\n", + " 601 +7.592301388389 -8.02 -3.21 7.14ms\n", + " 602 +7.592301352287 -7.44 -3.96 7.10ms\n", + " 603 +7.592301297255 -7.26 -3.79 7.08ms\n", + " 604 +7.592301261762 -7.45 -3.67 9.12ms\n", + " 605 +7.592301251326 -7.98 -3.54 7.00ms\n", + " 606 +7.592301241787 -8.02 -3.78 6.92ms\n", + " 607 +7.592301219198 -7.65 -4.15 6.86ms\n", + " 608 +7.592301199317 -7.70 -3.96 6.88ms\n", + " 609 +7.592301160158 -7.41 -3.26 9.17ms\n", + " 610 +7.592301128198 -7.50 -3.61 6.87ms\n", + " 611 +7.592301120447 -8.11 -3.22 6.96ms\n", + " 612 +7.592301116859 -8.45 -3.09 6.92ms\n", + " 613 +7.592301071498 -7.34 -3.44 6.88ms\n", + " 614 +7.592301024842 -7.33 -3.33 6.88ms\n", + " 615 +7.592300993154 -7.50 -3.88 6.89ms\n", + " 616 +7.592300913632 -7.10 -2.99 9.02ms\n", + " 617 +7.592300826956 -7.06 -3.06 10.0ms\n", + " 618 +7.592300826140 -9.09 -3.62 7.78ms\n", + " 619 +7.592300795001 -7.51 -3.31 10.2ms\n", + " 620 +7.592300757527 -7.43 -4.14 7.75ms\n", + " 621 +7.592300723308 -7.47 -4.09 7.75ms\n", + " 622 +7.592300680569 -7.37 -3.22 10.4ms\n", + " 623 +7.592300639264 -7.38 -3.13 19.1ms\n", + " 624 +7.592300613003 -7.58 -3.45 7.02ms\n", + " 625 +7.592300600858 -7.92 -3.24 6.96ms\n", + " 626 +7.592300580138 -7.68 -3.30 9.17ms\n", + " 627 +7.592300568835 -7.95 -3.86 6.94ms\n", + " 628 +7.592300552316 -7.78 -4.07 6.91ms\n", + " 629 +7.592300523828 -7.55 -3.24 9.12ms\n", + " 630 +7.592300512213 -7.93 -4.26 6.99ms\n", + " 631 +7.592300500289 -7.92 -4.05 6.88ms\n", + " 632 +7.592300482582 -7.75 -4.06 6.91ms\n", + " 633 +7.592300467798 -7.83 -3.81 6.90ms\n", + " 634 +7.592300458988 -8.06 -3.67 6.89ms\n", + " 635 +7.592300454781 -8.38 -4.17 6.86ms\n", + " 636 +7.592300432023 -7.64 -3.62 9.15ms\n", + " 637 +7.592300418344 -7.86 -3.72 6.92ms\n", + " 638 +7.592300403031 -7.81 -3.70 9.12ms\n", + " 639 +7.592300385099 -7.75 -3.35 9.06ms\n", + " 640 +7.592300379736 -8.27 -3.83 6.95ms\n", + " 641 +7.592300375189 -8.34 -4.00 6.97ms\n", + " 642 +7.592300363958 -7.95 -4.09 6.91ms\n", + " 643 +7.592300350383 -7.87 -3.84 6.94ms\n", + " 644 +7.592300335516 -7.83 -3.70 6.93ms\n", + " 645 +7.592300326043 -8.02 -3.67 6.92ms\n", + " 646 +7.592300306858 -7.72 -3.63 9.07ms\n", + " 647 +7.592300302090 -8.32 -4.31 6.87ms\n", + " 648 +7.592300297898 -8.38 -4.09 6.91ms\n", + " 649 +7.592300290182 -8.11 -4.51 6.91ms\n", + " 650 +7.592300280424 -8.01 -4.14 6.87ms\n", + " 651 +7.592300270989 -8.03 -4.21 9.01ms\n", + " 652 +7.592300263360 -8.12 -4.38 9.02ms\n", + " 653 +7.592300259773 -8.45 -4.49 9.21ms\n", + " 654 +7.592300257236 -8.60 -4.60 6.86ms\n", + " 655 +7.592300256336 -9.05 -4.47 6.87ms\n", + " 656 +7.592300253237 -8.51 -4.16 9.07ms\n", + " 657 +7.592300251942 -8.89 -4.50 6.89ms\n", + " 658 +7.592300249768 -8.66 -4.56 6.85ms\n", + " 659 +7.592300247868 -8.72 -4.39 7.44ms\n", + " 660 +7.592300246973 -9.05 -4.59 7.73ms\n", + " 661 +7.592300246697 -9.56 -4.51 7.76ms\n", + " 662 +7.592300244197 -8.60 -4.60 7.78ms\n", + " 663 +7.592300242962 -8.91 -4.57 7.73ms\n", + " 664 +7.592300240091 -8.54 -4.43 7.75ms\n", + " 665 +7.592300238000 -8.68 -4.55 10.2ms\n", + " 666 +7.592300236623 -8.86 -4.68 18.9ms\n", + " 667 +7.592300236553 -10.16 -4.79 7.02ms\n", + " 668 +7.592300235984 -9.24 -4.82 9.09ms\n", + " 669 +7.592300235862 -9.91 -4.77 6.87ms\n", + " 670 +7.592300235671 -9.72 -4.65 6.84ms\n", + " 671 +7.592300235095 -9.24 -4.64 6.85ms\n", + " 672 +7.592300233593 -8.82 -4.41 9.03ms\n", + " 673 +7.592300232559 -8.99 -4.93 6.88ms\n", + " 674 +7.592300232306 -9.60 -4.52 6.89ms\n", + " 675 +7.592300231760 -9.26 -4.63 6.93ms\n", + " 676 +7.592300230390 -8.86 -4.96 6.91ms\n", + " 677 +7.592300229046 -8.87 -4.84 6.89ms\n", + " 678 +7.592300227327 -8.76 -4.56 9.28ms\n", + " 679 +7.592300226152 -8.93 -4.84 6.92ms\n", + " 680 +7.592300225056 -8.96 -4.72 9.06ms\n", + " 681 +7.592300223744 -8.88 -4.57 9.04ms\n", + " 682 +7.592300222674 -8.97 -4.38 9.00ms\n", + " 683 +7.592300222113 -9.25 -4.85 6.90ms\n", + " 684 +7.592300220870 -8.91 -4.69 6.93ms\n", + " 685 +7.592300218871 -8.70 -4.15 9.10ms\n", + " 686 +7.592300218276 -9.23 -4.16 6.87ms\n", + " 687 +7.592300216617 -8.78 -4.45 6.93ms\n", + " 688 +7.592300215109 -8.82 -4.20 6.90ms\n", + " 689 +7.592300212380 -8.56 -4.48 6.94ms\n", + " 690 +7.592300209641 -8.56 -4.09 6.95ms\n", + " 691 +7.592300206104 -8.45 -4.46 6.91ms\n", + " 692 +7.592300204927 -8.93 -4.48 6.97ms\n", + " 693 +7.592300203689 -8.91 -4.59 6.97ms\n", + " 694 +7.592300201346 -8.63 -4.58 9.17ms\n", + " 695 +7.592300199292 -8.69 -4.63 6.95ms\n", + " 696 +7.592300196465 -8.55 -4.46 6.93ms\n", + " 697 +7.592300193960 -8.60 -4.03 9.15ms\n", + " 698 +7.592300192022 -8.71 -4.17 6.91ms\n", + " 699 +7.592300189704 -8.63 -4.08 6.89ms\n", + " 700 +7.592300189642 -10.20 -4.41 6.92ms\n", + " 701 +7.592300188274 -8.86 -4.25 9.08ms\n", + " 702 +7.592300187258 -8.99 -4.57 7.55ms\n", + " 703 +7.592300185699 -8.81 -4.19 10.2ms\n", + " 704 +7.592300185697 -11.76 -4.19 7.90ms\n", + " 705 +7.592300184849 -9.07 -4.82 7.76ms\n", + " 706 +7.592300183020 -8.74 -4.65 7.69ms\n", + " 707 +7.592300181562 -8.84 -4.19 7.73ms\n", + " 708 +7.592300181297 -9.58 -4.21 27.4ms\n", + " 709 +7.592300180225 -8.97 -4.77 9.68ms\n", + " 710 +7.592300180056 -9.77 -4.46 7.04ms\n", + " 711 +7.592300178248 -8.74 -4.32 9.15ms\n", + " 712 +7.592300176607 -8.79 -4.45 6.91ms\n", + " 713 +7.592300176012 -9.23 -4.27 6.93ms\n", + " 714 +7.592300174439 -8.80 -4.12 6.89ms\n", + " 715 +7.592300172501 -8.71 -4.19 9.02ms\n", + " 716 +7.592300171499 -9.00 -4.50 6.94ms\n", + " 717 +7.592300170043 -8.84 -4.81 6.91ms\n", + " 718 +7.592300167917 -8.67 -4.31 9.08ms\n", + " 719 +7.592300165934 -8.70 -4.29 9.07ms\n", + " 720 +7.592300164979 -9.02 -4.64 6.87ms\n", + " 721 +7.592300162370 -8.58 -3.93 9.08ms\n", + " 722 +7.592300162019 -9.45 -4.32 6.92ms\n", + " 723 +7.592300160378 -8.78 -4.52 6.90ms\n", + " 724 +7.592300157596 -8.56 -3.83 9.01ms\n", + " 725 +7.592300155601 -8.70 -3.95 6.84ms\n", + " 726 +7.592300153392 -8.66 -4.54 6.93ms\n", + " 727 +7.592300152201 -8.92 -4.11 7.01ms\n", + " 728 +7.592300150339 -8.73 -4.41 7.06ms\n", + " 729 +7.592300147257 -8.51 -4.52 6.96ms\n", + " 730 +7.592300143592 -8.44 -4.64 6.92ms\n", + " 731 +7.592300140598 -8.52 -4.00 6.98ms\n", + " 732 +7.592300138604 -8.70 -4.43 6.93ms\n", + " 733 +7.592300134385 -8.37 -4.05 9.10ms\n", + " 734 +7.592300133245 -8.94 -4.03 6.97ms\n", + " 735 +7.592300129038 -8.38 -4.23 6.95ms\n", + " 736 +7.592300127272 -8.75 -4.25 9.17ms\n", + " 737 +7.592300125678 -8.80 -4.27 6.92ms\n", + " 738 +7.592300121828 -8.41 -3.79 9.07ms\n", + " 739 +7.592300120048 -8.75 -3.82 6.92ms\n", + " 740 +7.592300119264 -9.11 -4.43 6.92ms\n", + " 741 +7.592300116152 -8.51 -4.64 6.92ms\n", + " 742 +7.592300114472 -8.77 -4.04 6.90ms\n", + " 743 +7.592300111745 -8.56 -3.95 9.03ms\n", + " 744 +7.592300109495 -8.65 -4.75 6.86ms\n", + " 745 +7.592300106777 -8.57 -3.93 10.0ms\n", + " 746 +7.592300105813 -9.02 -4.67 10.3ms\n", + " 747 +7.592300104850 -9.02 -5.03 7.76ms\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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ixcvNrf85S9/2bJlS2Rk5NKlS2fPnm3HfVPE4sWL9+zZk5WVlZWVdfXqVamxqqqqZ8+ev/32W4sWLZKSkj777DO77qMCLly40LFjx7S0tObNm58/f156pHq9vk+fPqmpqa1atXrmmWc+/fRTe++mQzGBTAaDwWQyxcbG/vvf/zY3LliwYNSoUdLtxYsXDx061D47pxCDwaDT6aTbFRUVfn5+Bw8eNJlMO3fubN68eXV1tclk2rt3b2hoqHT7HmA0Glu0aLFt2zaTybRt27aoqCjphZYesnTboRUVFbVr127BggU9evSQWs6cOePl5VVSUmIymTIzMz08PAoKCuy6j39WQkLCjh07ajR++eWX7du3NxqNJpNp27ZtkZGR0m3HNXjw4Ndee61Go/TQpDfqrl277rvvPr1eb4+9c0iYEcpGHj46ePCg+ZDLQw89dODAgYbdKYWp1WpXV1fpttForKqq8vHxEUIcOHDgwQcfdHFxEUL06dOnoKDg/Pnz9txR5Zw/f76oqKht27ZCiAMHDvTv3196ofv373/58uXs7Gw779+f9sILL7zwwguhoaHmloMHDz7wwAPSK9uyZcuwsLBff/3VfjuojF27dn3wwQc7d+40/d8V0gcPHhwwYIBUdWXgwIEXLly4du2aXffxT6murk5OTh45cuTatWtXrFhhnvjWeNNevXr1HnjTNhgMhMq4fv16kyZNpNtBQUFlZWUlJSX23SWlvPzyy717946LixNC5Obmmh+mRqMJCAi4fv26XfdOAa+88kpYWFjHjh2XLFkiDYSWr6arq6u/v7+jP8y9e/devHgxKSnJstHy1RRCBAUFOfQIIYSIiYlxc3PLy8t79tlnExMTjUaj+N9X09PT09vb26FfzStXrhiNxqeffjo7O/v06dOxsbFnz54V//tqarXae+BN25AQllGGi4uLXq+Xbks3tFqtXfdIGR999FFycrL5lKeLi4tlnbzq6mrzxNFxzZs378UXXzx06NDMmTM7dOjQpUsXrVZ7Lz3MsrKyZ599duvWrTVqUd57r+Y///lP6cacOXOioqL27NkzePBgy8+mEEKv1zv0w1Sr1SaT6emnn5b+ramurv7ggw/WrFlz772aDQkzQmWEhYWZ/5vOyclp3LhxfVTka2B///vfly9fvm/fvuDgYKklLCwsJydHul1RUVFYWGh5qM1BeXl5BQcHjxs3bvDgwdu3bxf/+zBv3759+/Zth36YBw4cyMnJmTx5cufOnd96663ffvutc+fORqPR8mEKIXJychz6YVry9/ePiYm5ePGi+N/PZn5+fmVlpUM/zJCQELVaHRMTI33brl27S5cuiVpv2pKSEod+mA0MA6EyEhMTv/76a+lQzObNmxMTE+29R3/W6tWrly5dmpyc3KxZM3NjYmJicnJyUVGREGLbtm1t2rSxvIDE4ej1+urqaul2VVXVb7/9FhERIYRITEzcvXv37du3hRBbtmzp1KlTWFiYPXf0z0lISNi3b9/KlStXrlw5ZcqUli1brly5Uq1WDx48+MSJE9Kf0Z9++kmn0/Xo0cPeO2u76upq88zvypUrJ0+ebNeunRAiMTFx586d5eXlQogtW7Z07949MFD28gh3Dzc3tyFDhhw5ckT69siRI9KgmJiY+P3330tv2q+//jouLs7ykwt3YO+0juN55pln4uPjPTw8WrZsGR8fn5qaajKZSktL77///t69e48fP75p06bnzp2z927+KTk5OSqVKiIiIv7/fPfdd9KPJk2aFBMT8+ijjwYGBn7zzTf23c8/6fLly02bNh01atSkSZPuu+++AQMGVFRUSD8aO3Zs+/btp02bFhgY+P3339t3PxW0atUqc2rUZDK99tprzZs3T0pKCg4OXrlypR137M/LzMwMCQkZM2bM+PHj/f39n376aandaDQmJibGxcVNnTo1ICDghx9+sOtuKuD48eNBQUFTp04dOnRo69atr127JrWPGzfO/KbdvXu3fXfSsWD1CdkuXLhgGYSJioqScnc6nW7fvn2lpaUDBgzw9/e33w4qoKqq6vTp05YtzZs3ly42N5lMhw4dysnJ6dGjx3333WenHVTM5cuXT548WVlZGRkZ2alTJ3O7yWQ6cOBAbm5uQkJCeHi4HfdQWfn5+QUFBW3atDG3pKamXrhwIS4uLjo62o47poj09PT09HSj0dixY8eoqChzu9Fo3L9/f15eXq9evRx6cm9WUFCwb9++Ro0a9ezZ03wWxmQyHTx48Pr16/fYm7YBYCAEAACnhnOEAADg1DAQAgCAU8NACAAATg0DIQAAODUMhAAA4NQwEAIAgFPDQAgAAE4NAyEAADg1DIQAAODUMBACAIBTw0AIAABO7f8DPP1nMUhdqukAAAAASUVORK5CYII=", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", "\n", - "\n", + "\n", "\n" ] }, @@ -3088,11 +1848,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/gross_pitaevskii_2D/6e29fb12.svg b/dev/examples/gross_pitaevskii_2D/6e29fb12.svg new file mode 100644 index 0000000000..4d1e580c02 --- /dev/null +++ b/dev/examples/gross_pitaevskii_2D/6e29fb12.svg @@ -0,0 +1,506 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/gross_pitaevskii_2D/b961a401.svg b/dev/examples/gross_pitaevskii_2D/b961a401.svg deleted file mode 100644 index e500122dda..0000000000 --- a/dev/examples/gross_pitaevskii_2D/b961a401.svg +++ /dev/null @@ -1,503 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev/examples/gross_pitaevskii_2D/index.html b/dev/examples/gross_pitaevskii_2D/index.html index 91ef283de9..5eadc19eee 100644 --- a/dev/examples/gross_pitaevskii_2D/index.html +++ b/dev/examples/gross_pitaevskii_2D/index.html @@ -1,5 +1,5 @@ -Gross-Pitaevskii equation with external magnetic field · DFTK.jl

Gross-Pitaevskii equation with external magnetic field

We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10

using DFTK
+Gross-Pitaevskii equation with external magnetic field · DFTK.jl

Gross-Pitaevskii equation with external magnetic field

We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10

using DFTK
 using StaticArrays
 using Plots
 
@@ -30,4 +30,4 @@
 model = Model(lattice; n_electrons, terms, spin_polarization=:spinless)  # spinless electrons
 basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))
 scfres = direct_minimization(basis, tol=1e-5)  # Reduce tol for production
-heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
Example block output
+heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
Example block output
diff --git a/dev/examples/input_output.ipynb b/dev/examples/input_output.ipynb index 09c7d6b79e..d021cd528a 100644 --- a/dev/examples/input_output.ipynb +++ b/dev/examples/input_output.ipynb @@ -104,22 +104,22 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", "--- --------------- --------- --------- ------ ---- ------\n", - " 1 -223.7492647171 0.22 -6.319 5.2 \n", - " 2 -224.1605461225 -0.39 -0.21 -3.325 1.8 241ms\n", - " 3 -224.2175927694 -1.24 -1.06 -1.615 3.3 281ms\n", - " 4 -224.2198738696 -2.64 -1.46 -1.192 1.1 172ms\n", - " 5 -224.2207939982 -3.04 -1.72 -0.823 1.0 165ms\n", - " 6 -224.2212121403 -3.38 -2.00 -0.486 1.2 169ms\n", - " 7 -224.2213737692 -3.79 -2.35 -0.228 1.8 179ms\n", - " 8 -224.2214156078 -4.38 -2.88 -0.076 2.1 230ms\n", - " 9 -224.2214205608 -5.31 -3.56 -0.007 2.7 226ms\n", - " 10 -224.2214206920 -6.88 -3.82 0.001 3.2 275ms\n", - " 11 -224.2214207101 -7.74 -4.04 -0.001 2.2 197ms\n", - " 12 -224.2214207177 -8.12 -4.39 -0.000 1.7 198ms\n", - " 13 -224.2214207187 -9.00 -4.97 0.000 2.0 225ms\n", - " 14 -224.2214207187 -10.56 -5.33 0.000 2.5 222ms\n", - " 15 -224.2214207187 -10.84 -5.74 -0.000 2.5 219ms\n", - " 16 -224.2214207187 -12.10 -6.16 0.000 2.1 233ms\n" + " 1 -223.7488428556 0.22 -6.321 5.6 287ms\n", + " 2 -224.1618695939 -0.38 -0.21 -3.326 1.7 153ms\n", + " 3 -224.2176974031 -1.25 -1.06 -1.611 2.8 199ms\n", + " 4 -224.2198819400 -2.66 -1.46 -1.194 1.1 154ms\n", + " 5 -224.2207987859 -3.04 -1.73 -0.821 1.0 137ms\n", + " 6 -224.2212166380 -3.38 -2.00 -0.481 1.0 138ms\n", + " 7 -224.2213712594 -3.81 -2.35 -0.236 1.2 144ms\n", + " 8 -224.2214137213 -4.37 -2.82 -0.089 2.0 153ms\n", + " 9 -224.2214204835 -5.17 -3.49 -0.008 2.5 162ms\n", + " 10 -224.2214206757 -6.72 -3.73 0.001 3.4 179ms\n", + " 11 -224.2214207016 -7.59 -3.90 -0.002 1.3 136ms\n", + " 12 -224.2214207164 -7.83 -4.27 -0.001 1.0 132ms\n", + " 13 -224.2214207184 -8.69 -4.63 -0.000 1.6 143ms\n", + " 14 -224.2214207187 -9.54 -5.22 0.000 1.3 147ms\n", + " 15 -224.2214207187 -10.43 -5.67 -0.000 2.4 162ms\n", + " 16 -224.2214207187 -11.56 -6.06 -0.000 2.2 161ms\n" ] } ], @@ -133,6 +133,18 @@ "metadata": {}, "execution_count": 3 }, + { + "cell_type": "markdown", + "source": [ + "!!! warning \"DFTK data formats are not yet fully matured\"\n", + " The data format in which DFTK saves data as well as the general interface\n", + " of the `load_scfres` and `save_scfres` pair of functions\n", + " are not yet fully matured. If you use the functions or the produced files\n", + " expect that you need to adapt your routines in the future even with patch\n", + " version bumps." + ], + "metadata": {} + }, { "cell_type": "markdown", "source": [ @@ -207,15 +219,15 @@ "output_type": "stream", "text": [ "{\n", - " \"AtomicNonlocal\": -4.345930955203864,\n", + " \"AtomicNonlocal\": -4.345930975367681,\n", " \"PspCorrection\": 7.03000636467455,\n", " \"Ewald\": -161.52650757200072,\n", - " \"total\": -224.22142071873432,\n", - " \"Entropy\": -0.030647818732669297,\n", - " \"Kinetic\": 75.66305012180908,\n", - " \"AtomicLocal\": -161.1281096792181,\n", - " \"Hartree\": 41.39700736817622,\n", - " \"Xc\": -21.280288548238804\n", + " \"total\": -224.22142071873404,\n", + " \"Entropy\": -0.03064782065317639,\n", + " \"Kinetic\": 75.66305049142342,\n", + " \"AtomicLocal\": -161.12810988580745,\n", + " \"Hartree\": 41.39700724597232,\n", + " \"Xc\": -21.280288566975337\n", "}\n" ] } @@ -315,7 +327,8 @@ "stored on disk in form of an [JLD2.jl](https://github.com/JuliaIO/JLD2.jl) file.\n", "This file can be read from other Julia scripts\n", "as well as other external codes supporting the HDF5 file format\n", - "(since the JLD2 format is based on HDF5)." + "(since the JLD2 format is based on HDF5). This includes notably `h5py`\n", + "to read DFTK output from python." ], "metadata": {} }, @@ -324,11 +337,20 @@ "cell_type": "code", "source": [ "using JLD2\n", - "save_scfres(\"iron_afm.jld2\", scfres);" + "save_scfres(\"iron_afm.jld2\", scfres)" ], "metadata": {}, "execution_count": 10 }, + { + "cell_type": "markdown", + "source": [ + "Saving such JLD2 files supports some options, such as `save_ψ=false`, which avoids saving\n", + "the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used\n", + "with `save_bands`." + ], + "metadata": {} + }, { "cell_type": "markdown", "source": [ @@ -373,11 +395,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/input_output/index.html b/dev/examples/input_output/index.html index 4f88d2c41a..78f415f21c 100644 --- a/dev/examples/input_output/index.html +++ b/dev/examples/input_output/index.html @@ -1,5 +1,5 @@ -Input and output formats · DFTK.jl

Input and output formats

This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.

Reading / writing files supported by AtomsIO

AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.

The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.

As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.

First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.

using AtomsIO        # Use Julia-only IO parsers
+Input and output formats · DFTK.jl

Input and output formats

This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.

Reading / writing files supported by AtomsIO

AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.

The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.

As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.

First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.

using AtomsIO        # Use Julia-only IO parsers
 using AtomsIOPython  # Use python-based IO parsers (e.g. ASE)
 system = load_system("Fe_afm.pwi")
FlexibleSystem(Fe₂, periodic = TTT):
     bounding_box      : [ 2.86814        0        0;
@@ -37,29 +37,29 @@
 ρ0 = guess_density(basis, system)
 scfres = self_consistent_field(basis, ρ=ρ0);
n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
 ---   ---------------   ---------   ---------   ------   ----   ------
-  1   -223.7491842168                    0.22   -6.319    5.3
-  2   -224.1604665587       -0.39       -0.21   -3.325    1.7    276ms
-  3   -224.2175906795       -1.24       -1.06   -1.615    3.6    282ms
-  4   -224.2198747293       -2.64       -1.46   -1.192    1.1    173ms
-  5   -224.2207940347       -3.04       -1.73   -0.823    1.0    167ms
-  6   -224.2212120269       -3.38       -2.00   -0.486    1.2    171ms
-  7   -224.2213740161       -3.79       -2.35   -0.228    1.3    238ms
-  8   -224.2214156932       -4.38       -2.89   -0.075    2.1    213ms
-  9   -224.2214205729       -5.31       -3.57   -0.007    2.6    232ms
- 10   -224.2214206929       -6.92       -3.82    0.000    3.2    275ms
- 11   -224.2214207114       -7.73       -4.06   -0.001    2.3    199ms
- 12   -224.2214207179       -8.19       -4.43    0.000    1.9    250ms
- 13   -224.2214207187       -9.11       -5.09    0.000    1.9    221ms
- 14   -224.2214207187      -10.41       -5.41   -0.000    1.6    194ms
- 15   -224.2214207187      -11.04       -5.85   -0.000    2.4    225ms
- 16   -224.2214207187      -12.70       -6.24    0.000    2.7    320ms

Writing VTK files for visualization

For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.

using WriteVTK
+  1   -223.7490199203                    0.22   -6.320    5.8    281ms
+  2   -224.1618031457       -0.38       -0.21   -3.325    1.8    152ms
+  3   -224.2177200033       -1.25       -1.06   -1.608    3.2    215ms
+  4   -224.2198884901       -2.66       -1.46   -1.192    1.1    139ms
+  5   -224.2208002627       -3.04       -1.73   -0.820    1.0    147ms
+  6   -224.2212169298       -3.38       -2.00   -0.481    1.0    150ms
+  7   -224.2213707914       -3.81       -2.35   -0.237    1.2    139ms
+  8   -224.2214135541       -4.37       -2.81   -0.090    1.6    145ms
+  9   -224.2214204833       -5.16       -3.49   -0.008    2.3    156ms
+ 10   -224.2214206754       -6.72       -3.73    0.001    2.9    168ms
+ 11   -224.2214207023       -7.57       -3.91   -0.002    1.2    139ms
+ 12   -224.2214207166       -7.84       -4.28   -0.001    1.4    136ms
+ 13   -224.2214207185       -8.71       -4.72   -0.000    1.7    159ms
+ 14   -224.2214207187       -9.76       -5.24    0.000    1.8    143ms
+ 15   -224.2214207187      -10.53       -5.69   -0.000    2.2    147ms
+ 16   -224.2214207187      -11.58       -6.05    0.000    2.2    156ms
DFTK data formats are not yet fully matured

The data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.

Writing VTK files for visualization

For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.

using WriteVTK
 save_scfres("iron_afm.vts", scfres; save_ψ=true);

This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.

Parsable data-export using json

Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.

DFTK.todict(scfres.energies)
Dict{String, Float64} with 9 entries:
   "AtomicNonlocal" => -4.34593
   "PspCorrection"  => 7.03001
   "Ewald"          => -161.527
   "total"          => -224.221
   "Entropy"        => -0.0306478
-  "Kinetic"        => 75.663
+  "Kinetic"        => 75.6631
   "AtomicLocal"    => -161.128
   "Hartree"        => 41.397
   "Xc"             => -21.2803

This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.

using JSON3
@@ -67,15 +67,15 @@
     JSON3.pretty(io, DFTK.todict(scfres.energies))
 end
 println(read("iron_afm_energies.json", String))
{
-    "AtomicNonlocal": -4.345930960416725,
+    "AtomicNonlocal": -4.34593098410162,
     "PspCorrection": 7.03000636467455,
     "Ewald": -161.52650757200072,
-    "total": -224.22142071873444,
-    "Entropy": -0.030647820434670056,
-    "Kinetic": 75.66304961186063,
-    "AtomicLocal": -161.12810836801034,
-    "Hartree": 41.397006493677075,
-    "Xc": -21.280288468084237
+    "total": -224.2214207187342,
+    "Entropy": -0.030647819484184078,
+    "Kinetic": 75.66305128700708,
+    "AtomicLocal": -161.1281117131396,
+    "Hartree": 41.39700840200974,
+    "Xc": -21.280288683699478
 }

Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:

using JSON3
 save_scfres("iron_afm.json", scfres)

Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:

save_bands("iron_afm_scfres.json", scfres)

Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:

bands = compute_bands(scfres, kline_density=10)
 save_bands("iron_afm_bands.json", bands)
┌ Warning: The provided cell is a supercell: the returned k-path is the standard k-path of the associated primitive cell in the basis of the supercell reciprocal lattice.
@@ -93,8 +93,8 @@
     2 magmoms:
       0.0  0.0
 
-@ BrillouinSpglibExt ~/.julia/packages/Brillouin/ESWPN/ext/BrillouinSpglibExt.jl:28

Writing and reading JLD2 files

The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5).

using JLD2
-save_scfres("iron_afm.jld2", scfres);

Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.

(Cleanup files generated by this notebook.)

rm.(["iron_afm.vts", "iron_afm.jld2",
+@ BrillouinSpglibExt ~/.julia/packages/Brillouin/ESWPN/ext/BrillouinSpglibExt.jl:28

Writing and reading JLD2 files

The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5). This includes notably h5py to read DFTK output from python.

using JLD2
+save_scfres("iron_afm.jld2", scfres)

Saving such JLD2 files supports some options, such as save_ψ=false, which avoids saving the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used with save_bands.

Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.

(Cleanup files generated by this notebook.)

rm.(["iron_afm.vts", "iron_afm.jld2",
      "iron_afm.json", "iron_afm_energies.json", "iron_afm_scfres.json",
      "iron_afm_bands.json"])
6-element Vector{Nothing}:
  nothing
@@ -102,4 +102,4 @@
  nothing
  nothing
  nothing
- nothing
+ nothing
diff --git a/dev/examples/metallic_systems.ipynb b/dev/examples/metallic_systems.ipynb index 780735b115..834bb2f521 100644 --- a/dev/examples/metallic_systems.ipynb +++ b/dev/examples/metallic_systems.ipynb @@ -92,13 +92,13 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -1.743077133534 -1.28 5.2 \n", - " 2 -1.743502596210 -3.37 -1.70 1.7 32.4ms\n", - " 3 -1.743613877722 -3.95 -2.82 3.8 50.0ms\n", - " 4 -1.743616713076 -5.55 -3.53 3.7 35.0ms\n", - " 5 -1.743616748754 -7.45 -4.45 2.7 42.6ms\n", - " 6 -1.743616749876 -8.95 -5.29 3.5 34.5ms\n", - " 7 -1.743616749884 -11.07 -6.57 3.3 44.6ms\n" + " 1 -1.743328342188 -1.28 5.2 8.21s\n", + " 2 -1.743524034669 -3.71 -1.70 1.5 6.78s\n", + " 3 -1.743613525383 -4.05 -2.87 4.0 50.4ms\n", + " 4 -1.743616704385 -5.50 -3.59 3.5 33.0ms\n", + " 5 -1.743616748070 -7.36 -4.48 2.7 29.1ms\n", + " 6 -1.743616749866 -8.75 -5.50 3.7 44.8ms\n", + " 7 -1.743616749884 -10.73 -6.38 3.8 34.4ms\n" ] } ], @@ -114,7 +114,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "9-element Vector{Float64}:\n 1.9999999999941416\n 1.9985518370988413\n 1.9905514359813297\n 1.244967140255588e-17\n 1.2448819156427093e-17\n 1.0289487591600909e-17\n 1.0288611704663442e-17\n 2.9884213018232893e-19\n 1.6623632624331025e-21" + "text/plain": "9-element Vector{Float64}:\n 1.9999999999941416\n 1.9985518371403581\n 1.990551437405495\n 1.2449675493643952e-17\n 1.2448823246891377e-17\n 1.0289499545032419e-17\n 1.0288623656987942e-17\n 2.988424710211321e-19\n 1.6623496432212349e-21" }, "metadata": {}, "execution_count": 4 @@ -132,7 +132,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.7450615 \n AtomicLocal 0.3193180 \n AtomicNonlocal 0.3192775 \n Ewald -2.1544222\n PspCorrection -0.1026056\n Hartree 0.0061603 \n Xc -0.8615676\n Entropy -0.0148387\n\n total -1.743616749884" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.7450615 \n AtomicLocal 0.3193181 \n AtomicNonlocal 0.3192774 \n Ewald -2.1544222\n PspCorrection -0.1026056\n Hartree 0.0061603 \n Xc -0.8615676\n Entropy -0.0148387\n\n total -1.743616749884" }, "metadata": {}, "execution_count": 5 @@ -160,122 +160,122 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=2}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -298,11 +298,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/metallic_systems/5b28b0d6.svg b/dev/examples/metallic_systems/5b28b0d6.svg new file mode 100644 index 0000000000..1ff24e2947 --- /dev/null +++ b/dev/examples/metallic_systems/5b28b0d6.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/metallic_systems/index.html b/dev/examples/metallic_systems/index.html index 3a82bd8ac1..5ae4739d89 100644 --- a/dev/examples/metallic_systems/index.html +++ b/dev/examples/metallic_systems/index.html @@ -1,5 +1,5 @@ -Temperature and metallic systems · DFTK.jl

Temperature and metallic systems

In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.

using DFTK
+Temperature and metallic systems · DFTK.jl

Temperature and metallic systems

In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.

using DFTK
 using Plots
 using Unitful
 using UnitfulAtomic
@@ -24,22 +24,22 @@
 kgrid = kgrid_from_maximal_spacing(lattice, kspacing)
 basis = PlaneWaveBasis(model; Ecut, kgrid);

Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.

scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -1.743049834742                   -1.28    5.3
-  2   -1.743505562370       -3.34       -1.70    1.5   61.6ms
-  3   -1.743613959892       -3.96       -2.82    4.0   35.6ms
-  4   -1.743616715229       -5.56       -3.52    3.8   36.2ms
-  5   -1.743616748866       -7.47       -4.54    2.7   29.4ms
-  6   -1.743616749876       -9.00       -5.28    4.0   37.3ms
-  7   -1.743616749884      -11.11       -6.30    2.7   31.5ms
scfres.occupation[1]
9-element Vector{Float64}:
+  1   -1.743081676317                   -1.28    5.8   33.8ms
+  2   -1.743502662202       -3.38       -1.70    1.0   21.3ms
+  3   -1.743612765543       -3.96       -2.85    3.0   29.4ms
+  4   -1.743616702588       -5.40       -3.63    3.7   33.0ms
+  5   -1.743616747641       -7.35       -4.57    3.2   30.3ms
+  6   -1.743616749877       -8.65       -5.35    3.3   33.2ms
+  7   -1.743616749884      -11.16       -6.30    2.8   29.3ms
scfres.occupation[1]
9-element Vector{Float64}:
  1.9999999999941416
- 1.9985518363839343
- 1.9905514388844778
- 1.2449655556483567e-17
- 1.2448803311226e-17
- 1.0289485364758889e-17
- 1.0288609478103092e-17
- 2.988420487569574e-19
- 1.6623610117789059e-21
scfres.energies
Energy breakdown (in Ha):
+ 1.9985518374452114
+ 1.9905514308745242
+ 1.244963349873945e-17
+ 1.2448781255784842e-17
+ 1.028947041618553e-17
+ 1.0288594530516088e-17
+ 2.988426995545967e-19
+ 1.6622608767687838e-21
scfres.energies
Energy breakdown (in Ha):
     Kinetic             0.7450614 
     AtomicLocal         0.3193180 
     AtomicNonlocal      0.3192776 
@@ -51,4 +51,4 @@
 
     total               -1.743616749884

The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step

kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u"Å")
 bands = compute_bands(scfres, kgrid_dos)
-plot_dos(bands)
Example block output
+plot_dos(bands)
Example block output
diff --git a/dev/examples/polarizability.ipynb b/dev/examples/polarizability.ipynb index bdd6bd32e8..e5f8d9695a 100644 --- a/dev/examples/polarizability.ipynb +++ b/dev/examples/polarizability.ipynb @@ -67,23 +67,23 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -2.770284626415 -0.53 9.0 \n", - " 2 -2.771677227059 -2.86 -1.30 1.0 121ms\n", - " 3 -2.771713359391 -4.44 -2.66 1.0 114ms\n", - " 4 -2.771714708886 -5.87 -3.73 2.0 103ms\n", - " 5 -2.771714714515 -8.25 -4.12 2.0 135ms\n", - " 6 -2.771714715234 -9.14 -5.34 1.0 93.5ms\n", - " 7 -2.771714715249 -10.83 -5.75 2.0 109ms\n", - " 8 -2.771714715250 -12.52 -6.28 2.0 137ms\n", - " 9 -2.771714715250 -14.24 -7.21 1.0 106ms\n", - " 10 -2.771714715250 + -13.80 -7.70 1.0 113ms\n", - " 11 -2.771714715250 -13.53 -8.60 2.0 113ms\n" + " 1 -2.770432400849 -0.52 9.0 168ms\n", + " 2 -2.771691756179 -2.90 -1.32 1.0 91.6ms\n", + " 3 -2.771714338199 -4.65 -2.44 1.0 95.3ms\n", + " 4 -2.771714628332 -6.54 -3.12 1.0 103ms\n", + " 5 -2.771714713763 -7.07 -3.94 2.0 110ms\n", + " 6 -2.771714715120 -8.87 -4.65 1.0 93.8ms\n", + " 7 -2.771714715250 -9.89 -5.51 2.0 110ms\n", + " 8 -2.771714715250 -13.73 -6.13 1.0 99.1ms\n", + " 9 -2.771714715250 -12.99 -7.01 1.0 109ms\n", + " 10 -2.771714715250 -14.40 -7.77 2.0 120ms\n", + " 11 -2.771714715250 -15.05 -8.28 1.0 103ms\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "-0.00013457396468166113" + "text/plain": "-0.00013457418391666875" }, "metadata": {}, "execution_count": 2 @@ -114,22 +114,23 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -2.770330841828 -0.53 8.0 \n", - " 2 -2.771768420125 -2.84 -1.29 1.0 104ms\n", - " 3 -2.771801141928 -4.49 -2.72 1.0 129ms\n", - " 4 -2.771802070602 -6.03 -3.79 2.0 104ms\n", - " 5 -2.771802074183 -8.45 -4.27 2.0 131ms\n", - " 6 -2.771802074471 -9.54 -5.45 1.0 116ms\n", - " 7 -2.771802074476 -11.30 -6.16 2.0 111ms\n", - " 8 -2.771802074476 -13.40 -6.61 1.0 112ms\n", - " 9 -2.771802074476 -15.05 -7.52 1.0 108ms\n", - " 10 -2.771802074476 -13.97 -8.07 2.0 132ms\n" + " 1 -2.770486024500 -0.53 10.0 1.96s\n", + " 2 -2.771775038345 -2.89 -1.31 1.0 152ms\n", + " 3 -2.771801625275 -4.58 -2.58 1.0 104ms\n", + " 4 -2.771802039135 -6.38 -3.70 1.0 93.1ms\n", + " 5 -2.771802073687 -7.46 -4.10 2.0 125ms\n", + " 6 -2.771802074456 -9.11 -5.49 1.0 96.7ms\n", + " 7 -2.771802074476 -10.72 -5.70 2.0 117ms\n", + " 8 -2.771802074476 -12.35 -6.47 1.0 105ms\n", + " 9 -2.771802074476 -13.20 -7.07 2.0 131ms\n", + " 10 -2.771802074476 -14.35 -7.80 1.0 103ms\n", + " 11 -2.771802074476 -14.57 -8.36 1.0 117ms\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "0.017612221719784483" + "text/plain": "0.017612221540890136" }, "metadata": {}, "execution_count": 3 @@ -154,9 +155,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "Reference dipole: -0.00013457396468166113\n", - "Displaced dipole: 0.017612221719784483\n", - "Polarizability : 1.7746795684466143\n" + "Reference dipole: -0.00013457418391666875\n", + "Displaced dipole: 0.017612221540890136\n", + "Polarizability : 1.7746795724806803\n" ] } ], @@ -208,24 +209,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "WARNING: using KrylovKit.basis in module ##388 conflicts with an existing identifier.\n", - "[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920931091e-01\n", - "[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766553477337e-03\n", - "[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852761582626e-04\n", - "[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694608884834e-06\n", - "[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088786819753e-08\n", - "[ Info: GMRES linsolve in iter 1; step 6: normres = 6.298788559791e-11\n", - "[ Info: GMRES linsolve in iter 1; step 7: normres = 1.371911607612e-12\n", - "[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 1.371911607612e-12\n", - "[ Info: GMRES linsolve in iter 2; step 1: normres = 8.800002649982e-10\n", - "[ Info: GMRES linsolve in iter 2; step 2: normres = 7.826318336674e-11\n", - "[ Info: GMRES linsolve in iter 2; step 3: normres = 1.420155274764e-12\n", - "[ Info: GMRES linsolve in iter 2; finished at step 3: normres = 1.420155274764e-12\n", - "┌ Info: GMRES linsolve converged at iteration 2, step 3:\n", - "│ * norm of residual = 1.4201526753151771e-12\n", - "└ * number of operations = 12\n", - "Non-interacting polarizability: 1.9257125367373609\n", - "Interacting polarizability: 1.7736548681999424\n" + "WARNING: using KrylovKit.basis in module ##316 conflicts with an existing identifier.\n", + "[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920658847e-01\n", + "[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766551266600e-03\n", + "[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852767464120e-04\n", + "[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694593935934e-06\n", + "[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088787426761e-08\n", + "[ Info: GMRES linsolve in iter 1; step 6: normres = 6.273315973830e-11\n", + "[ Info: GMRES linsolve in iter 1; step 7: normres = 6.448039465958e-13\n", + "[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 6.448039465958e-13\n", + "[ Info: GMRES linsolve in iter 2; step 1: normres = 1.090493623192e-09\n", + "[ Info: GMRES linsolve in iter 2; step 2: normres = 3.624099093835e-11\n", + "[ Info: GMRES linsolve in iter 2; step 3: normres = 4.762174248227e-12\n", + "[ Info: GMRES linsolve in iter 2; step 4: normres = 5.947146207185e-14\n", + "[ Info: GMRES linsolve in iter 2; finished at step 4: normres = 5.947146207185e-14\n", + "┌ Info: GMRES linsolve converged at iteration 2, step 4:\n", + "│ * norm of residual = 5.936208360312715e-14\n", + "└ * number of operations = 13\n", + "Non-interacting polarizability: 1.9257125533755957\n", + "Interacting polarizability: 1.7736548737192661\n" ] } ], @@ -272,11 +274,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/polarizability/index.html b/dev/examples/polarizability/index.html index 8639c2b9d1..49422928e7 100644 --- a/dev/examples/polarizability/index.html +++ b/dev/examples/polarizability/index.html @@ -1,5 +1,5 @@ -Polarizability by linear response · DFTK.jl

Polarizability by linear response

We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment

\[μ = ∫ r ρ(r) dr\]

with respect to a small uniform electric field $E = -x$.

We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).

As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,

using DFTK
+Polarizability by linear response · DFTK.jl

Polarizability by linear response

We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment

\[μ = ∫ r ρ(r) dr\]

with respect to a small uniform electric field $E = -x$.

We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).

As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,

using DFTK
 using LinearAlgebra
 
 a = 10.
@@ -20,19 +20,19 @@
 end;

Using finite differences

We first compute the polarizability by finite differences. First compute the dipole moment at rest:

model = model_LDA(lattice, atoms, positions; symmetries=false)
 basis = PlaneWaveBasis(model; Ecut, kgrid)
 res   = self_consistent_field(basis; tol)
-μref  = dipole(basis, res.ρ)
-0.00013457396098268077

Then in a small uniform field:

ε = .01
+μref  = dipole(basis, res.ρ)
-0.00013457374455931885

Then in a small uniform field:

ε = .01
 model_ε = model_LDA(lattice, atoms, positions;
                     extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],
                     symmetries=false)
 basis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)
 res_ε   = self_consistent_field(basis_ε; tol)
-με = dipole(basis_ε, res_ε.ρ)
0.017612221157922197
polarizability = (με - μref) / ε
+με = dipole(basis_ε, res_ε.ρ)
0.017612220425901166
polarizability = (με - μref) / ε
 
 println("Reference dipole:  $μref")
 println("Displaced dipole:  $με")
-println("Polarizability :   $polarizability")
Reference dipole:  -0.00013457396098268077
-Displaced dipole:  0.017612221157922197
-Polarizability :   1.774679511890488

The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).

Using linear response

Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, $χ_0$ is the independent-particle polarizability, and $K$ the Hartree-exchange-correlation kernel. We denote with $δV_{\rm ext}$ an external perturbing potential (like in this case the uniform electric field). Then:

\[δρ = χ_0 δV = χ_0 (δV_{\rm ext} + K δρ),\]

which implies

\[δρ = (1-χ_0 K)^{-1} χ_0 δV_{\rm ext}.\]

From this we identify the polarizability operator to be $χ = (1-χ_0 K)^{-1} χ_0$. Numerically, we apply $χ$ to $δV = -x$ by solving a linear equation (the Dyson equation) iteratively.

using KrylovKit
+println("Polarizability :   $polarizability")
Reference dipole:  -0.00013457374455931885
+Displaced dipole:  0.017612220425901166
+Polarizability :   1.7746794170460485

The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).

Using linear response

Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, $χ_0$ is the independent-particle polarizability, and $K$ the Hartree-exchange-correlation kernel. We denote with $δV_{\rm ext}$ an external perturbing potential (like in this case the uniform electric field). Then:

\[δρ = χ_0 δV = χ_0 (δV_{\rm ext} + K δρ),\]

which implies

\[δρ = (1-χ_0 K)^{-1} χ_0 δV_{\rm ext}.\]

From this we identify the polarizability operator to be $χ = (1-χ_0 K)^{-1} χ_0$. Numerically, we apply $χ$ to $δV = -x$ by solving a linear equation (the Dyson equation) iteratively.

using KrylovKit
 
 # Apply ``(1- χ_0 K)``
 function dielectric_operator(δρ)
@@ -54,20 +54,20 @@
 
 println("Non-interacting polarizability: $(dipole(basis, δρ_nointeract))")
 println("Interacting polarizability:     $(dipole(basis, δρ))")
WARNING: using KrylovKit.basis in module Main conflicts with an existing identifier.
-[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920817265e-01
-[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766551630817e-03
-[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852770000728e-04
-[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694603157853e-06
-[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088787325467e-08
-[ Info: GMRES linsolve in iter 1; step 6: normres = 6.282288467599e-11
-[ Info: GMRES linsolve in iter 1; step 7: normres = 9.677619707464e-13
-[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 9.677619707464e-13
-[ Info: GMRES linsolve in iter 2; step 1: normres = 8.163670776069e-11
-[ Info: GMRES linsolve in iter 2; step 2: normres = 1.311261916013e-11
-[ Info: GMRES linsolve in iter 2; step 3: normres = 2.820181044266e-13
-[ Info: GMRES linsolve in iter 2; finished at step 3: normres = 2.820181044266e-13
+[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920789473e-01
+[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766551549803e-03
+[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852768908595e-04
+[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694603516728e-06
+[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088787865444e-08
+[ Info: GMRES linsolve in iter 1; step 6: normres = 6.285959358150e-11
+[ Info: GMRES linsolve in iter 1; step 7: normres = 1.071219276974e-12
+[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 1.071219276974e-12
+[ Info: GMRES linsolve in iter 2; step 1: normres = 1.007853914791e-10
+[ Info: GMRES linsolve in iter 2; step 2: normres = 1.482597235145e-11
+[ Info: GMRES linsolve in iter 2; step 3: normres = 3.267522355230e-13
+[ Info: GMRES linsolve in iter 2; finished at step 3: normres = 3.267522355230e-13
 ┌ Info: GMRES linsolve converged at iteration 2, step 3:
-*  norm of residual = 2.8202859689165873e-13
+*  norm of residual = 3.267419041203177e-13
 *  number of operations = 12
-Non-interacting polarizability: 1.925712521347353
-Interacting polarizability:     1.7736548501359588

As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.

+Non-interacting polarizability: 1.925712538796206 +Interacting polarizability: 1.773654864262911

As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.

diff --git a/dev/examples/pseudopotentials.ipynb b/dev/examples/pseudopotentials.ipynb index 3d594f74f1..5d3e89b291 100644 --- a/dev/examples/pseudopotentials.ipynb +++ b/dev/examples/pseudopotentials.ipynb @@ -86,8 +86,8 @@ "output_type": "stream", "text": [ "┌ Warning: using Pkg instead of using LazyArtifacts is deprecated\n", - "│ caller = eval at boot.jl:370 [inlined]\n", - "└ @ Core ./boot.jl:370\n", + "│ caller = eval at boot.jl:385 [inlined]\n", + "└ @ Core ./boot.jl:385\n", " Downloading artifact: pd_nc_sr_lda_standard_0.4.1_upf\n" ] } @@ -178,17 +178,17 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.920962975442 -0.69 5.6 \n", - " 2 -7.925541846635 -2.34 -1.22 1.8 229ms\n", - " 3 -7.926169746022 -3.20 -2.43 2.8 266ms\n", - " 4 -7.926189673327 -4.70 -3.03 4.0 320ms\n", - " 5 -7.926189831135 -6.80 -4.21 2.5 245ms\n" + " 1 -7.921057424197 -0.69 5.8 395ms\n", + " 2 -7.925551542965 -2.35 -1.22 1.8 214ms\n", + " 3 -7.926172328844 -3.21 -2.42 2.9 260ms\n", + " 4 -7.926189260638 -4.77 -3.04 3.2 290ms\n", + " 5 -7.926189825842 -6.25 -4.10 2.4 260ms\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1590124 \n AtomicLocal -2.1424683\n AtomicNonlocal 1.6043138 \n Ewald -8.4004648\n PspCorrection -0.2948928\n Hartree 0.5515634 \n Xc -2.4000912\n Entropy -0.0031624\n\n total -7.926189831135" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1589921 \n AtomicLocal -2.1423798\n AtomicNonlocal 1.6042586 \n Ewald -8.4004648\n PspCorrection -0.2948928\n Hartree 0.5515443 \n Xc -2.4000848\n Entropy -0.0031626\n\n total -7.926189825842" }, "metadata": {}, "execution_count": 4 @@ -210,18 +210,18 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -8.515377920081 -0.93 6.0 \n", - " 2 -8.518499462958 -2.51 -1.44 1.5 241ms\n", - " 3 -8.518870248862 -3.43 -2.77 3.4 300ms\n", - " 4 -8.518884640635 -4.84 -3.21 4.8 418ms\n", - " 5 -8.518884701483 -7.22 -3.58 2.1 236ms\n", - " 6 -8.518884734376 -7.48 -4.87 1.6 213ms\n" + " 1 -8.515482904357 -0.93 6.4 1.16s\n", + " 2 -8.518511441333 -2.52 -1.44 1.8 1.02s\n", + " 3 -8.518860909701 -3.46 -2.83 3.0 269ms\n", + " 4 -8.518884583143 -4.63 -3.19 4.8 386ms\n", + " 5 -8.518884691825 -6.96 -3.53 2.1 230ms\n", + " 6 -8.518884733267 -7.38 -4.50 1.5 210ms\n" ] }, { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.0954243 \n AtomicLocal -2.3650980\n AtomicNonlocal 1.3082559 \n Ewald -8.4004648\n PspCorrection 0.3951970 \n Hartree 0.5521863 \n Xc -3.1011662\n Entropy -0.0032193\n\n total -8.518884734376" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.0954098 \n AtomicLocal -2.3650561\n AtomicNonlocal 1.3082368 \n Ewald -8.4004648\n PspCorrection 0.3951970 \n Hartree 0.5521718 \n Xc -3.1011597\n Entropy -0.0032196\n\n total -8.518884733267" }, "metadata": {}, "execution_count": 5 @@ -249,410 +249,410 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=116}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -673,11 +673,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/pseudopotentials/6f7d6b20.svg b/dev/examples/pseudopotentials/6f7d6b20.svg deleted file mode 100644 index 564255f364..0000000000 --- a/dev/examples/pseudopotentials/6f7d6b20.svg +++ /dev/null @@ -1,200 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev/examples/pseudopotentials/a0eeed0b.svg b/dev/examples/pseudopotentials/a0eeed0b.svg new file mode 100644 index 0000000000..9699c833f4 --- /dev/null +++ b/dev/examples/pseudopotentials/a0eeed0b.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/pseudopotentials/index.html b/dev/examples/pseudopotentials/index.html index 4a1061799b..1ff3fd5994 100644 --- a/dev/examples/pseudopotentials/index.html +++ b/dev/examples/pseudopotentials/index.html @@ -1,5 +1,5 @@ -Pseudopotentials · DFTK.jl

Pseudopotentials

In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.

Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.

In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated ("frozen") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.

Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.

In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.

using DFTK
+Pseudopotentials · DFTK.jl

Pseudopotentials

In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.

Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.

In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated ("frozen") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.

Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.

In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.

using DFTK
 using Unitful
 using Plots
 using LazyArtifacts

Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.

Using the PseudoLibrary in your own calculations

Instructions for using the PseudoLibrary in your own calculations can be found in its documentation.

We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.

psp_hgh  = load_psp("hgh/lda/si-q4.hgh");
@@ -21,24 +21,24 @@
     (; scfres, bandplot)
 end;

The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.

result_hgh = run_bands(psp_hgh)
 result_hgh.scfres.energies
Energy breakdown (in Ha):
-    Kinetic             3.1590090 
-    AtomicLocal         -2.1424674
-    AtomicNonlocal      1.6043161 
+    Kinetic             3.1590214 
+    AtomicLocal         -2.1424375
+    AtomicNonlocal      1.6042731 
     Ewald               -8.4004648
     PspCorrection       -0.2948928
-    Hartree             0.5515638 
-    Xc                  -2.4000914
-    Entropy             -0.0031623
+    Hartree             0.5515663 
+    Xc                  -2.4000932
+    Entropy             -0.0031622
 
-    total               -7.926189833550
result_upf = run_bands(psp_upf)
+    total               -7.926189820256
result_upf = run_bands(psp_upf)
 result_upf.scfres.energies
Energy breakdown (in Ha):
-    Kinetic             3.0954262 
-    AtomicLocal         -2.3651005
-    AtomicNonlocal      1.3082561 
+    Kinetic             3.0954127 
+    AtomicLocal         -2.3650678
+    AtomicNonlocal      1.3082437 
     Ewald               -8.4004648
     PspCorrection       0.3951970 
-    Hartree             0.5521871 
-    Xc                  -3.1011666
-    Entropy             -0.0032193
+    Hartree             0.5521753 
+    Xc                  -3.1011613
+    Entropy             -0.0032195
 
-    total               -8.518884734252

But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:

plot(result_hgh.bandplot, result_upf.bandplot, titles=["HGH" "UPF"], size=(800, 400))
Example block output
+ total -8.518884733633

But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:

plot(result_hgh.bandplot, result_upf.bandplot, titles=["HGH" "UPF"], size=(800, 400))
Example block output
diff --git a/dev/examples/scf_callbacks.ipynb b/dev/examples/scf_callbacks.ipynb index dc257f0047..32d5869b24 100644 --- a/dev/examples/scf_callbacks.ipynb +++ b/dev/examples/scf_callbacks.ipynb @@ -45,16 +45,11 @@ "DFTK already defines a few callback functions for standard\n", "tasks. One example is the usual convergence table,\n", "which is defined in the callback `ScfDefaultCallback`.\n", - "Another example is `ScfPlotTrace`, which records the total\n", - "energy at each iteration and uses it to plot the convergence\n", - "of the SCF graphically once it is converged.\n", - "For details and other callbacks\n", - "see [`src/scf/scf_callbacks.jl`](https://dftk.org/blob/master/src/scf/scf_callbacks.jl).\n", - "\n", - "!!! note \"Callbacks are not exported\"\n", - " Callbacks are not exported from the DFTK namespace as of now,\n", - " so you will need to use them, e.g., as `DFTK.ScfDefaultCallback`\n", - " and `DFTK.ScfPlotTrace`." + "Another example is `ScfSaveCheckpoints`, which stores the state\n", + "of an SCF at each iterations to allow resuming from a failed\n", + "calculation at a later point.\n", + "See Saving SCF results on disk and SCF checkpoints for details\n", + "how to use checkpointing with DFTK." ], "metadata": {} }, @@ -63,7 +58,17 @@ "source": [ "In this example we define a custom callback, which plots\n", "the change in density at each SCF iteration after the SCF\n", - "has finished. For this we first define the empty plot canvas\n", + "has finished. This example is a bit artificial, since the norms\n", + "of all density differences is available as `scfres.history_Δρ`\n", + "after the SCF has finished and could be directly plotted, but\n", + "the following nicely illustrates the use of callbacks in DFTK." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To enable plotting we first define the empty canvas\n", "and an empty container for all the density differences:" ], "metadata": {} @@ -106,7 +111,7 @@ " end\n", " info\n", "end\n", - "callback = DFTK.ScfDefaultCallback() ∘ plot_callback;" + "callback = ScfDefaultCallback() ∘ plot_callback;" ], "metadata": {}, "execution_count": 3 @@ -115,9 +120,11 @@ "cell_type": "markdown", "source": [ "Notice that for constructing the `callback` function we chained the `plot_callback`\n", - "(which does the plotting) with the `ScfDefaultCallback`, such that when using\n", - "the `plot_callback` function with `self_consistent_field` we still get the usual\n", - "convergence table printed. We run the SCF with this callback …" + "(which does the plotting) with the `ScfDefaultCallback`. The latter is the function\n", + "responsible for printing the usual convergence table. Therefore if we simply did\n", + "`callback=plot_callback` the SCF would go silent. The chaining of both callbacks\n", + "(`plot_callback` for plotting and `ScfDefaultCallback()` for the convergence table)\n", + "makes sure both features are enabled. We run the SCF with the chained callback …" ], "metadata": {} }, @@ -129,13 +136,14 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) α Diag Δtime\n", "--- --------------- --------- --------- ---- ---- ------\n", - " 1 -7.774186541238 -0.70 0.80 4.8 \n", - " 2 -7.779024644336 -2.32 -1.52 0.80 1.0 18.3ms\n", - " 3 -7.779320020045 -3.53 -2.58 0.80 1.5 19.1ms\n", - " 4 -7.779350352503 -4.52 -2.93 0.80 2.5 22.2ms\n", - " 5 -7.779350740464 -6.41 -3.26 0.80 1.0 17.9ms\n", - " 6 -7.779350850577 -6.96 -4.07 0.80 1.0 18.1ms\n", - " 7 -7.779350856071 -8.26 -5.26 0.80 1.8 76.3ms\n" + " 1 -7.775334187380 -0.70 0.80 4.5 92.0ms\n", + " 2 -7.779127312993 -2.42 -1.51 0.80 1.0 118ms\n", + " 3 -7.779317157879 -3.72 -2.60 0.80 1.2 18.0ms\n", + " 4 -7.779349868783 -4.49 -2.81 0.80 2.5 20.7ms\n", + " 5 -7.779350314088 -6.35 -2.87 0.80 1.0 17.1ms\n", + " 6 -7.779350838982 -6.28 -4.16 0.80 1.0 17.2ms\n", + " 7 -7.779350855980 -7.77 -4.46 0.80 2.5 21.1ms\n", + " 8 -7.779350856114 -9.87 -5.12 0.80 1.0 17.5ms\n" ] } ], @@ -159,174 +167,170 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -363,11 +367,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/scf_callbacks/1dee496a.svg b/dev/examples/scf_callbacks/1dee496a.svg deleted file mode 100644 index 1c8775a7ee..0000000000 --- a/dev/examples/scf_callbacks/1dee496a.svg +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dev/examples/scf_callbacks/e34b9e8c.svg b/dev/examples/scf_callbacks/e34b9e8c.svg new file mode 100644 index 0000000000..793e9d5fc8 --- /dev/null +++ b/dev/examples/scf_callbacks/e34b9e8c.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/scf_callbacks/index.html b/dev/examples/scf_callbacks/index.html index b06875bff3..0abd373388 100644 --- a/dev/examples/scf_callbacks/index.html +++ b/dev/examples/scf_callbacks/index.html @@ -1,10 +1,10 @@ -Monitoring self-consistent field calculations · DFTK.jl

Monitoring self-consistent field calculations

The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.

This example discusses a few aspects of the callback function taking again our favourite silicon example.

We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.

using DFTK
+Monitoring self-consistent field calculations · DFTK.jl

Monitoring self-consistent field calculations

The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.

This example discusses a few aspects of the callback function taking again our favourite silicon example.

We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.

using DFTK
 using ASEconvert
 
 system = pyconvert(AbstractSystem, ase.build.bulk("Si"))
 model  = model_LDA(attach_psp(system; Si="hgh/pbe/si-q4.hgh"))
-basis  = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);

DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfPlotTrace, which records the total energy at each iteration and uses it to plot the convergence of the SCF graphically once it is converged. For details and other callbacks see src/scf/scf_callbacks.jl.

Callbacks are not exported

Callbacks are not exported from the DFTK namespace as of now, so you will need to use them, e.g., as DFTK.ScfDefaultCallback and DFTK.ScfPlotTrace.

In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. For this we first define the empty plot canvas and an empty container for all the density differences:

using Plots
+basis  = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);

DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfSaveCheckpoints, which stores the state of an SCF at each iterations to allow resuming from a failed calculation at a later point. See Saving SCF results on disk and SCF checkpoints for details how to use checkpointing with DFTK.

In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. This example is a bit artificial, since the norms of all density differences is available as scfres.history_Δρ after the SCF has finished and could be directly plotted, but the following nicely illustrates the use of callbacks in DFTK.

To enable plotting we first define the empty canvas and an empty container for all the density differences:

using Plots
 p = plot(; yaxis=:log)
 density_differences = Float64[];

The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.

using LinearAlgebra
 
@@ -16,12 +16,13 @@
     end
     info
 end
-callback = DFTK.ScfDefaultCallback() ∘ plot_callback;

Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback, such that when using the plot_callback function with self_consistent_field we still get the usual convergence table printed. We run the SCF with this callback …

scfres = self_consistent_field(basis; tol=1e-5, callback);
n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
+callback = ScfDefaultCallback() ∘ plot_callback;

Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback. The latter is the function responsible for printing the usual convergence table. Therefore if we simply did callback=plot_callback the SCF would go silent. The chaining of both callbacks (plot_callback for plotting and ScfDefaultCallback() for the convergence table) makes sure both features are enabled. We run the SCF with the chained callback …

scfres = self_consistent_field(basis; tol=1e-5, callback);
n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ----   ------
-  1   -7.774206027587                   -0.70   0.80    4.8
-  2   -7.779005724711       -2.32       -1.52   0.80    1.0   18.3ms
-  3   -7.779320254333       -3.50       -2.60   0.80    1.8   19.4ms
-  4   -7.779350458632       -4.52       -2.95   0.80    2.5   22.4ms
-  5   -7.779350745016       -6.54       -3.25   0.80    1.0   18.1ms
-  6   -7.779350851954       -6.97       -4.58   0.80    1.0   18.2ms
-  7   -7.779350856129       -8.38       -5.37   0.80    2.5   22.9ms

… and show the plot

p
Example block output

The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.

Debugging with callbacks

Very handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.

+ 1 -7.775312616529 -0.70 0.80 4.8 96.3ms + 2 -7.779130343900 -2.42 -1.51 0.80 1.0 71.8ms + 3 -7.779315498118 -3.73 -2.61 0.80 1.0 17.6ms + 4 -7.779349917568 -4.46 -2.81 0.80 2.5 21.3ms + 5 -7.779350277517 -6.44 -2.86 0.80 1.0 17.2ms + 6 -7.779350840311 -6.25 -4.30 0.80 1.0 17.3ms + 7 -7.779350856016 -7.80 -4.55 0.80 2.5 21.1ms + 8 -7.779350856113 -10.01 -5.11 0.80 1.0 17.4ms

… and show the plot

p
Example block output

The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.

Debugging with callbacks

Very handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.

diff --git a/dev/examples/supercells.ipynb b/dev/examples/supercells.ipynb index 3af23e3668..680af8cfb6 100644 --- a/dev/examples/supercells.ipynb +++ b/dev/examples/supercells.ipynb @@ -161,16 +161,17 @@ "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -8.298244106733 -0.85 5.1 \n", - " 2 -8.300183646936 -2.71 -1.26 1.6 78.9ms\n", - " 3 -8.300431271123 -3.61 -1.89 2.4 132ms\n", - " 4 -8.300461400625 -4.52 -2.70 2.6 92.1ms\n", - " 5 -8.300464439393 -5.52 -3.27 2.2 92.8ms\n", - " 6 -8.300464562103 -6.91 -3.40 5.4 127ms\n", - " 7 -8.300464596816 -7.46 -3.55 7.0 164ms\n", - " 8 -8.300464621188 -7.61 -3.70 1.4 127ms\n", - " 9 -8.300464637519 -7.79 -3.89 1.4 82.3ms\n", - " 10 -8.300464641613 -8.39 -4.04 2.1 91.4ms\n" + " 1 -8.298704818508 -0.85 5.5 200ms\n", + " 2 -8.300232652494 -2.82 -1.25 1.1 107ms\n", + " 3 -8.300440299198 -3.68 -1.89 2.6 104ms\n", + " 4 -8.300460310923 -4.70 -2.77 1.9 100ms\n", + " 5 -8.300464331131 -5.40 -3.17 2.4 125ms\n", + " 6 -8.300464534986 -6.69 -3.34 1.2 92.1ms\n", + " 7 -8.300464586603 -7.29 -3.48 1.1 84.8ms\n", + " 8 -8.300464616194 -7.53 -3.62 1.1 84.3ms\n", + " 9 -8.300464635606 -7.71 -3.81 1.1 87.1ms\n", + " 10 -8.300464639397 -8.42 -3.91 1.0 83.1ms\n", + " 11 -8.300464643061 -8.44 -4.15 1.0 83.5ms\n" ] } ], @@ -191,13 +192,14 @@ "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -16.64157777401 -0.70 5.6 \n", - " 2 -16.67847578292 -1.43 -1.14 1.4 220ms\n", - " 3 -16.67920411635 -3.14 -1.88 2.8 230ms\n", - " 4 -16.67927929492 -4.12 -2.75 3.4 244ms\n", - " 5 -16.67928604172 -5.17 -3.09 4.8 321ms\n", - " 6 -16.67928620763 -6.78 -3.54 1.6 195ms\n", - " 7 -16.67928621973 -7.92 -4.02 2.2 207ms\n" + " 1 -16.67583787658 -0.70 6.2 484ms\n", + " 2 -16.67878120637 -2.53 -1.14 1.6 223ms\n", + " 3 -16.67923408556 -3.34 -1.87 1.8 232ms\n", + " 4 -16.67927416408 -4.40 -2.75 2.5 242ms\n", + " 5 -16.67928556227 -4.94 -3.21 4.6 352ms\n", + " 6 -16.67928615171 -6.23 -3.49 2.8 262ms\n", + " 7 -16.67928621418 -7.20 -3.94 1.5 209ms\n", + " 8 -16.67928621966 -8.26 -4.52 2.1 238ms\n" ] } ], @@ -218,13 +220,16 @@ "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -33.32674246069 -0.56 7.8 \n", - " 2 -33.33429759709 -2.12 -1.00 1.1 697ms\n", - " 3 -33.33600789345 -2.77 -1.72 5.9 949ms\n", - " 4 -33.33690567848 -3.05 -2.55 7.6 1.03s\n", - " 5 -33.33694208447 -4.44 -3.14 4.9 1.02s\n", - " 6 -33.33694370674 -5.79 -3.91 3.8 841ms\n", - " 7 -33.33694378148 -7.13 -4.44 5.2 1.04s\n" + " 1 -33.32861655837 -0.56 8.2 1.51s\n", + " 2 -33.33483453792 -2.21 -1.00 1.2 694ms\n", + " 3 -33.33602745344 -2.92 -1.72 7.4 1.09s\n", + " 4 -33.33614750408 -3.92 -2.63 1.8 763ms\n", + " 5 -33.33686859245 -3.14 -2.39 8.8 1.41s\n", + " 6 -33.33689295218 -4.61 -2.48 1.1 645ms\n", + " 7 -33.33694312262 -4.30 -3.64 1.0 659ms\n", + " 8 -33.33694366412 -6.27 -3.68 5.5 1.10s\n", + " 9 -33.33694367910 -7.82 -3.74 1.0 615ms\n", + " 10 -33.33694375597 -7.11 -4.10 1.0 633ms\n" ] } ], @@ -254,13 +259,13 @@ "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -8.298459165709 -0.85 5.0 \n", - " 2 -8.300271198002 -2.74 -1.59 1.4 65.9ms\n", - " 3 -8.300428169260 -3.80 -2.56 4.0 93.7ms\n", - " 4 -8.300384556845 + -4.36 -2.30 4.0 111ms\n", - " 5 -8.300464226023 -4.10 -3.39 1.0 66.2ms\n", - " 6 -8.300464553803 -6.48 -3.77 3.5 111ms\n", - " 7 -8.300464639360 -7.07 -4.24 1.4 81.0ms\n" + " 1 -8.298637898498 -0.85 5.5 334ms\n", + " 2 -8.300287944013 -2.78 -1.59 1.0 89.2ms\n", + " 3 -8.300437635960 -3.82 -2.64 2.0 95.4ms\n", + " 4 -8.300421411124 + -4.79 -2.43 3.5 153ms\n", + " 5 -8.300464339245 -4.37 -3.38 1.0 84.3ms\n", + " 6 -8.300464592139 -6.60 -3.84 1.6 100ms\n", + " 7 -8.300464638949 -7.33 -4.28 2.0 101ms\n" ] } ], @@ -281,20 +286,22 @@ "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -33.32635470670 -0.56 6.6 \n", - " 2 -33.31323801544 + -1.88 -1.27 1.0 553ms\n", - " 3 -14.09656831563 + 1.28 -0.42 6.2 1.21s\n", - " 4 -33.32340674795 1.28 -1.66 5.8 1.12s\n", - " 5 -33.24148344790 + -1.09 -1.35 3.5 923ms\n", - " 6 -32.57799706724 + -0.18 -1.12 3.8 916ms\n", - " 7 -33.32028174173 -0.13 -1.94 4.2 861ms\n", - " 8 -33.33659862224 -1.79 -2.38 3.1 747ms\n", - " 9 -33.33653834559 + -4.22 -2.58 2.8 777ms\n", - " 10 -33.33678131046 -3.61 -2.77 2.4 734ms\n", - " 11 -33.33691910813 -3.86 -3.25 2.0 646ms\n", - " 12 -33.33694260793 -4.63 -3.59 3.1 881ms\n", - " 13 -33.33694321814 -6.21 -3.86 2.8 706ms\n", - " 14 -33.33694362731 -6.39 -4.27 2.4 708ms\n" + " 1 -33.32620523150 -0.56 7.8 1.82s\n", + " 2 -33.32209712951 + -2.39 -1.27 1.0 569ms\n", + " 3 -19.87990693618 + 1.13 -0.50 6.2 1.28s\n", + " 4 -33.27803305378 1.13 -1.63 7.1 1.46s\n", + " 5 -33.20276500748 + -1.12 -1.30 2.8 886ms\n", + " 6 -32.94655365662 + -0.59 -1.27 4.2 1.01s\n", + " 7 -33.30362820505 -0.45 -1.78 3.8 894ms\n", + " 8 -33.33577184720 -1.49 -2.22 2.0 678ms\n", + " 9 -33.33601949257 -3.61 -2.36 2.6 849ms\n", + " 10 -33.33670566731 -3.16 -2.76 2.1 696ms\n", + " 11 -33.33691213250 -3.69 -3.13 2.8 865ms\n", + " 12 -33.33693790794 -4.59 -3.52 3.2 1.10s\n", + " 13 -33.33694259213 -5.33 -3.72 3.4 858ms\n", + " 14 -33.33694319484 -6.22 -3.91 2.2 719ms\n", + " 15 -33.33694232987 + -6.06 -3.96 3.1 802ms\n", + " 16 -33.33694353407 -5.92 -4.29 2.9 794ms\n" ] } ], @@ -327,11 +334,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/supercells/index.html b/dev/examples/supercells/index.html index 03edb76901..5d26f41e56 100644 --- a/dev/examples/supercells/index.html +++ b/dev/examples/supercells/index.html @@ -1,5 +1,5 @@ -Creating and modelling metallic supercells · DFTK.jl

Creating and modelling metallic supercells

In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An $n$-fold repetition along one of the axes of the original lattice.

The following code achieves this for aluminium:

using DFTK
+Creating and modelling metallic supercells · DFTK.jl

Creating and modelling metallic supercells

In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An $n$-fold repetition along one of the axes of the original lattice.

The following code achieves this for aluminium:

using DFTK
 using LinearAlgebra
 using ASEconvert
 
@@ -32,63 +32,64 @@
 @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
 n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -8.298423781992                   -0.85    4.8
-  2   -8.300196346477       -2.75       -1.26    1.2   96.2ms
-  3   -8.300432477581       -3.63       -1.89    2.8    194ms
-  4   -8.300461844811       -4.53       -2.71    2.4    116ms
-  5   -8.300464321230       -5.61       -3.23    2.4    125ms
-  6   -8.300464474068       -6.82       -3.35   11.0    238ms
-  7   -8.300464550358       -7.12       -3.49    3.1    132ms
-  8   -8.300464597301       -7.33       -3.62    1.4    116ms
-  9   -8.300464632023       -7.46       -3.83    4.1    163ms
- 10   -8.300464640744       -8.06       -4.01    1.5    177ms
self_consistent_field(aluminium_setup(2); tol=1e-4);
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
+  1   -8.298715781327                   -0.85    4.9    219ms
+  2   -8.300226380700       -2.82       -1.26    1.6   94.8ms
+  3   -8.300438399453       -3.67       -1.89    3.0    118ms
+  4   -8.300459665994       -4.67       -2.74    1.2    149ms
+  5   -8.300464228494       -5.34       -3.14    2.8    124ms
+  6   -8.300464480291       -6.60       -3.32    1.4   95.8ms
+  7   -8.300464568779       -7.05       -3.48    1.0   85.7ms
+  8   -8.300464607206       -7.42       -3.61    1.0   84.3ms
+  9   -8.300464634475       -7.56       -3.81    1.0   83.1ms
+ 10   -8.300464639814       -8.27       -3.94    1.4   92.1ms
+ 11   -8.300464643570       -8.43       -4.27    1.0   86.6ms
self_consistent_field(aluminium_setup(2); tol=1e-4);
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
 @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
 n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -16.67397821255                   -0.70    6.5
-  2   -16.67851987256       -2.34       -1.14    1.4    243ms
-  3   -16.67920359857       -3.17       -1.87    2.8    370ms
-  4   -16.67927684115       -4.14       -2.76    2.8    295ms
-  5   -16.67928588000       -5.04       -3.17    5.2    421ms
-  6   -16.67928620528       -6.49       -3.48    3.1    391ms
-  7   -16.67928621940       -7.85       -3.96    2.2    254ms
-  8   -16.67928622162       -8.65       -4.58    2.6    301ms
self_consistent_field(aluminium_setup(4); tol=1e-4);
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
+  1   -16.67505354767                   -0.70    6.9    543ms
+  2   -16.67808644539       -2.52       -1.14    1.0    209ms
+  3   -16.67923508855       -2.94       -1.87    2.4    247ms
+  4   -16.67927628332       -4.39       -2.72    3.6    317ms
+  5   -16.67928550662       -5.04       -3.11    3.4    337ms
+  6   -16.67928615643       -6.19       -3.48    1.8    234ms
+  7   -16.67928621026       -7.27       -3.97    1.6    212ms
+  8   -16.67928622034       -8.00       -4.60    4.2    367ms
self_consistent_field(aluminium_setup(4); tol=1e-4);
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
 @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
 n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -33.32489700325                   -0.56    7.0
-  2   -33.33255817445       -2.12       -1.00    1.2    792ms
-  3   -33.33411198567       -2.81       -1.74    4.2    1.08s
-  4   -33.33613398593       -2.69       -2.28    6.9    1.05s
-  5   -33.33691855008       -3.11       -2.54    9.4    1.45s
-  6   -33.33693865405       -4.70       -2.90    1.5    775ms
-  7   -33.33694370923       -5.30       -3.78    4.0    1.09s
-  8   -33.33694376578       -7.25       -4.08    3.9    952ms

When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:

self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
+  1   -33.32843106099                   -0.56    7.5    1.48s
+  2   -33.33470181424       -2.20       -1.00    2.1    781ms
+  3   -33.33600522964       -2.88       -1.72    5.0    1.14s
+  4   -33.33615545353       -3.82       -2.63    1.1    766ms
+  5   -33.33689847914       -3.13       -2.48    9.4    1.51s
+  6   -33.33691759854       -4.72       -2.61    3.1    786ms
+  7   -33.33694311366       -4.59       -3.56    1.0    684ms
+  8   -33.33694368368       -6.24       -3.80    4.0    993ms
+  9   -33.33694374605       -7.21       -4.01    1.6    688ms

When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:

self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
 @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
 n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -8.298632644442                   -0.85    5.2
-  2   -8.300279921653       -2.78       -1.58    1.0   79.4ms
-  3   -8.300390844104       -3.95       -2.35    3.1    107ms
-  4   -8.300325247965   +   -4.18       -2.18    2.4    168ms
-  5   -8.300463987342       -3.86       -3.45    1.0   78.5ms
-  6   -8.300464516387       -6.28       -3.69    3.5    136ms
-  7   -8.300464631062       -6.94       -4.07    1.2   65.4ms
self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
+  1   -8.298688361617                   -0.85    5.5    262ms
+  2   -8.300296920597       -2.79       -1.59    1.2   93.5ms
+  3   -8.300435823113       -3.86       -2.58    1.6    100ms
+  4   -8.300391032677   +   -4.35       -2.32    4.2    184ms
+  5   -8.300464245679       -4.14       -3.45    1.0   92.3ms
+  6   -8.300464576029       -6.48       -3.80    4.5    171ms
+  7   -8.300464638477       -7.20       -4.30    1.1   98.2ms
self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());
┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
 @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
 n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -33.32591987878                   -0.56    6.9
-  2   -33.33196755761       -2.22       -1.28    1.0    654ms
-  3   -32.99446795154   +   -0.47       -1.23    6.9    1.26s
-  4   -30.35044884728   +    0.42       -0.83    5.6    1.28s
-  5   -33.16428840987        0.45       -1.32    4.9    1.15s
-  6   -33.33179475206       -0.78       -2.07    2.5    846ms
-  7   -32.99147719730   +   -0.47       -1.29    4.0    1.21s
-  8   -33.32624456392       -0.48       -1.97    5.6    1.27s
-  9   -33.33485206260       -2.07       -2.20    2.2    804ms
- 10   -33.33663873373       -2.75       -2.58    2.4    799ms
- 11   -33.33688212977       -3.61       -2.91    2.8    858ms
- 12   -33.33693843113       -4.25       -3.24    2.9    953ms
- 13   -33.33694070770       -5.64       -3.43    2.9    719ms
- 14   -33.33694268428       -5.70       -3.70    1.6    716ms
- 15   -33.33694341257       -6.14       -4.10    2.4    835ms

For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.

+ 1 -33.32635736954 -0.56 7.2 1.58s + 2 -33.31087965366 + -1.81 -1.27 1.0 614ms + 3 -12.17471114965 + 1.33 -0.40 6.8 1.52s + 4 -33.29942662338 1.32 -1.45 6.8 1.44s + 5 -33.29740124687 + -2.69 -1.48 3.0 965ms + 6 -33.21608685178 + -1.09 -1.52 2.6 853ms + 7 -33.23203257547 -1.80 -1.55 3.4 943ms + 8 -33.33667621036 -0.98 -2.40 2.6 807ms + 9 -33.33676074720 -4.07 -2.79 4.9 1.14s + 10 -33.33673585779 + -4.60 -2.63 2.4 868ms + 11 -33.33689595719 -3.80 -3.16 2.0 742ms + 12 -33.33693756398 -4.38 -3.50 3.1 879ms + 13 -33.33693952340 -5.71 -3.62 2.8 862ms + 14 -33.33694322933 -5.43 -4.03 1.8 716ms

For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.

diff --git a/dev/examples/wannier.ipynb b/dev/examples/wannier.ipynb index 361957cd6f..cbc1e386e8 100644 --- a/dev/examples/wannier.ipynb +++ b/dev/examples/wannier.ipynb @@ -29,12 +29,13 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -11.14943445823 -0.67 8.6 \n", - " 2 -11.15007367341 -3.19 -1.40 1.0 258ms\n", - " 3 -11.15010744365 -4.47 -2.77 3.4 297ms\n", - " 4 -11.15010941077 -5.71 -3.30 4.6 477ms\n", - " 5 -11.15010943271 -7.66 -4.15 3.0 299ms\n", - " 6 -11.15010943371 -9.00 -5.04 3.6 395ms\n" + " 1 -11.14943267934 -0.67 8.2 453ms\n", + " 2 -11.15007322835 -3.19 -1.40 1.0 223ms\n", + " 3 -11.15010742909 -4.47 -2.77 2.8 246ms\n", + " 4 -11.15010938110 -5.71 -3.32 4.6 373ms\n", + " 5 -11.15010943006 -7.31 -4.29 3.0 262ms\n", + " 6 -11.15010943372 -8.44 -4.97 3.8 321ms\n", + " 7 -11.15010943375 -10.47 -5.43 3.8 288ms\n" ] } ], @@ -75,984 +76,984 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=123}", - "image/png": "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", + "image/png": "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QkgQxA+cPn366tWrTKcgCGkho0YJgvgBOzs7U1PTEydOMB2EIKSCfCMkiPqTl5dXXl4uWtvCwsIPHz5IJEZubm5BQcG3ni0oKMjPz69jV58+ffr48eP3d/j06ZNw+QiifpFCSBAiunTpkqam5rNnz+iHBw4c0NTUFEzeW1xcrKOjs3//fgD5+fkuLi5qamo6OjoqKipWVlanTp2id3v58qWmpmatxdtOnz6tqan54MED+uHZs2d/+uknDQ0NfX39li1bRkZGfjXPlStXNDU1//7775ob/f399fT0BGVvz549LVu21NXV1dLSsra2vnbtWs2d9+/fb2ZmpqWlpa2traWltXnzZgAdO3ZMTk4+d+6cpqampqamu7s7vfPly5fbtWunqampp6fXqlWro0ePCvrZunWrpqbmvXv3OnTooKmp6ebmJtxfliDqGUUQhEgKCgrk5OR27dpFPxw5cqSCgkLnzp3phxcuXACQmppKUVRWVta0adP+/PPPtLS0mzdvurq6cjic+/fv03t269atZ8+eNXseOnSohYUF/fOZM2fYbLaHh8etW7fu37/v6enJYrGio6O/zFNVVaWvrz9p0qSaGy0tLZ2cnOif/f392Wz20qVLExMTb9++7eTkxOVy09LS6GcDAgIAjBs37tq1a6mpqREREQEBARRF3bhxo02bNvb29levXr169WpycjJFUXfu3JGXl+/Vq9e1a9cSEhKcnZ1ZLNapU6forjZs2ADA1NQ0MDAwISEhLi5OzD81QUgVKYQEITo7Ozs3NzeKoqqrq7W1tT09PeXk5AoKCiiKmj9/vp6eHp/P/7JVVVWVkZGRt7c3/XD37t0Anj59Sj98//49h8PZuHEjRVF8Pr9169YDBw6s2bx37979+/f/ap758+erqqoWFxfTD+Pj4wGcPn2aoqjCwkIVFZU5c+YIdi4vLzcxMZk1axZFUUVFRaqqqo6Ojl/t1tbWduTIkTW3ODk5NW/evKioiH7I4/HatGnz888/0w/pQrh79+5v/d0IokEhp0YJQnQODg5xcXHV1dXJycn5+flLly5VUVGhzzfGxsY6ODiwWCx6z+Li4v3793t7e8+YMWP27Nl8Pj8jI4N+auzYsVwuNyIign4YHh7O5/PHjRsH4OXLlxkZGRYWFjE1GBkZpaamfjXPz19OfQAABD9JREFU5MmTS0pKoqKi6IdhYWFaWlpDhw4FEB8f//nzZyMjI0E/N27cMDExefToEYDbt2+XlJRMmTKljr94cnLykCFDBIsjysnJjRw5MjU1teblQCcnp7r/JQmCQWRhXoIQnYODw6ZNm5KTk+Pi4qytrY2MjOzt7WNjY+3t7R89ejRv3jx6t4cPHzo4OHC53P79+2tpaXE4HHl5+aKiIvpZdXV1Jyenw4cP+/r6stnsw4cPDxo0yMjICAA9OiY0NFRQJgX4fH7Nld5o1tbWNjY2YWFh7u7u5eXlx48f9/DwUFRUFHTl5+dXqxW98FteXh4A+qA/xOfz37x506JFi5obDQwMKIoqKCgQLBQsWCWOIBo4UggJQnT29vZKSkqxsbFxcXEODg4AHBwc9u3bZ29vz+fz+/XrR++2devWZs2apaamClZXv3jxYs1+PDw8IiMjr1+/rq6unpKS4uPjQ2+nFzoODAycPn16HSN5eHgsWLAgOzs7ISGhsLDQw8OjZldRUVG//PLLl63oFW7rOCqVzWZzuVy6dgrk5uYKjiLYrY6ZCYJZ5F8qQYhOSUmpW7duly5dunnzpqAQPn36NCwsrHXr1q1ataJ3y8zMtLKyElTBFy9e1FpidODAgcbGxmFhYWFhYerq6iNGjKC3W1lZ6erqCnUDn7u7u7y8fHh4eFhYGP0Fkd7eo0cPeXn548ePf7VV165dFRUVv/WsqqpqWVlZzS3dunWLiYmpqKgQbDl//ry5ubm2tnbdoxJEQ8H0RUqCkG1r164FwOFw6JEjfD5fV1cXwLRp0wT7zJs3j8vlRkdHl5eXJyYm2tjYqKqqDhgwoGY/f/zxh6qqqra29syZM2tu37dvH4DJkyc/ffq0tLQ0IyMjLCyMHkrzLS4uLkZGRnJyckFBQTW3L168mM1mr1ixIjMzs7S09OnTp9u2bQsJCaGf9fb2ZrPZy5Yty8zMLCkpSUhICAsLo5/y9PTU0NA4depUYmLiixcvKIq6fPkyi8UaPXp0VlbW27dv586dC2Dfvn30/vRgGZH+nATBAPKPlSDEkpCQAKDm/Q9jxowBcOzYMcGWvLy8nj170h89FRUV165d279//1qFUPAd8datW7UOceDAAX19fcGHVx0dnVoVrhZ6sAyHw3n37l3N7dXV1WvWrBGMcAFgYmJy/Phx+lkej7ds2TIul0s/xeFw/vjjD/qpN2/eDB06lD596uzsTG88dOiQ4HKgsrKyn5+f4ECkEBKyhUyxRhD1gaKozMzMgoICCwuLmqWojvh8fnp6enFxsZ6eHv1tT+QkVVVVT548qaioMDAwMDQ0rPUs/U2RzWabmJgI6ty3VFZWpqWl8Xi8n376SVlZWeRIBMEsUggJgiCIJo0MliEIgiCaNFIICYIgiCaNFEKCIAiiSSOFkCAIgmjSSCEkCIIgmjRSCAmCIIgm7f8AhSZKZGZdQj4AAAAASUVORK5CYII=", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -1190,13 +1191,13 @@ "Finite difference condition satisfied\n", "\n", "[ Info: Reading mmn file: wannier/graphene.mmn\n", - " header = Generated by DFTK at 2023-12-25T09:02:24.933\n", + " header = Generated by DFTK at 2024-01-15T11:40:26.501\n", " n_bands = 15\n", " n_bvecs = 8\n", " n_kpts = 25\n", "\n", "[ Info: Reading wannier/graphene.amn\n", - " header = Generated by DFTK at 2023-12-25T09:02:21.670\n", + " header = Generated by DFTK at 2024-01-15T11:40:23.039\n", " n_bands = 15\n", " n_wann = 5\n", " n_kpts = 25\n", @@ -1245,10 +1246,10 @@ "text": [ "[ Info: Initial spread\n", " WF center [rx, ry, rz]/Å spread/Ų\n", - " 1 0.00000 0.76239 0.00000 0.62113\n", - " 2 0.66025 -0.38120 0.00000 0.62113\n", + " 1 -0.00000 0.76239 -0.00000 0.62113\n", + " 2 0.66025 -0.38120 -0.00000 0.62113\n", " 3 -0.66025 -0.38120 -0.00000 0.62113\n", - " 4 0.00000 0.00000 0.00000 1.19369\n", + " 4 0.00000 0.00000 -0.00000 1.19369\n", " 5 0.00000 1.52478 0.00000 1.19369\n", "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", " ΩI = 3.81157\n", @@ -1261,10 +1262,10 @@ "[ Info: Initial spread (with states freezed)\n", " WF center [rx, ry, rz]/Å spread/Ų\n", " 1 -0.00000 0.76239 0.00000 0.64218\n", - " 2 0.66025 -0.38120 0.00000 0.64218\n", + " 2 0.66025 -0.38120 -0.00000 0.64218\n", " 3 -0.66025 -0.38120 -0.00000 0.64218\n", - " 4 -0.00000 0.00000 0.00000 1.13077\n", - " 5 -0.00000 1.52478 -0.00000 1.13077\n", + " 4 -0.00000 -0.00000 -0.00000 1.13078\n", + " 5 0.00000 1.52478 0.00000 1.13078\n", "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", " ΩI = 3.46548\n", " Ω̃ = 0.72262\n", @@ -1274,35 +1275,35 @@ "\n", "\n", "Iter Function value Gradient norm \n", - " 0 4.188096e+00 1.401803e+00\n", - " * time: 0.0017218589782714844\n", - " 1 3.807531e+00 8.825717e-02\n", - " * time: 0.20724987983703613\n", - " 2 3.768217e+00 2.015978e-02\n", - " * time: 0.21404695510864258\n", - " 3 3.765764e+00 2.446944e-03\n", - " * time: 0.22078704833984375\n", - " 4 3.765725e+00 2.711417e-04\n", - " * time: 0.22748088836669922\n", - " 5 3.765724e+00 3.155848e-05\n", - " * time: 0.23720002174377441\n", - " 6 3.765724e+00 1.434231e-05\n", - " * time: 0.24677300453186035\n", - " 7 3.765724e+00 1.359807e-06\n", - " * time: 0.25345301628112793\n", + " 0 4.188101e+00 1.401803e+00\n", + " * time: 0.001260995864868164\n", + " 1 3.807536e+00 8.825703e-02\n", + " * time: 0.5588490962982178\n", + " 2 3.768223e+00 2.015970e-02\n", + " * time: 0.5637609958648682\n", + " 3 3.765770e+00 2.446953e-03\n", + " * time: 0.5686740875244141\n", + " 4 3.765731e+00 2.711482e-04\n", + " * time: 0.5735650062561035\n", + " 5 3.765730e+00 3.155845e-05\n", + " * time: 0.5805330276489258\n", + " 6 3.765730e+00 1.434249e-05\n", + " * time: 0.5888051986694336\n", + " 7 3.765730e+00 1.359777e-06\n", + " * time: 0.5964632034301758\n", "[ Info: Final spread\n", " WF center [rx, ry, rz]/Å spread/Ų\n", " 1 -0.00000 0.76239 -0.00000 0.64174\n", - " 2 0.66025 -0.38120 0.00000 0.64174\n", + " 2 0.66025 -0.38120 -0.00000 0.64174\n", " 3 -0.66025 -0.38120 -0.00000 0.64174\n", - " 4 0.00000 0.00000 0.00000 0.92025\n", + " 4 -0.00000 -0.00000 0.00000 0.92025\n", " 5 -0.00000 1.52478 -0.00000 0.92025\n", "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", " ΩI = 3.02222\n", " Ω̃ = 0.74351\n", " ΩOD = 0.73886\n", " ΩD = 0.00465\n", - " Ω = 3.76572\n", + " Ω = 3.76573\n", "\n", "\n" ] @@ -1310,7 +1311,7 @@ { "output_type": "display_data", "data": { - "text/plain": " * Status: success\n\n * Candidate solution\n Final objective value: 3.765724e+00\n\n * Found with\n Algorithm: L-BFGS\n\n * Convergence measures\n |x - x'| = 1.07e-05 ≰ 0.0e+00\n |x - x'|/|x'| = 1.07e-05 ≰ 0.0e+00\n |f(x) - f(x')| = 2.58e-09 ≰ 0.0e+00\n |f(x) - f(x')|/|f(x')| = 6.86e-10 ≤ 1.0e-07\n |g(x)| = 1.36e-06 ≤ 1.0e-05\n\n * Work counters\n Seconds run: 0 (vs limit Inf)\n Iterations: 7\n f(x) calls: 17\n ∇f(x) calls: 18\n" + "text/plain": " * Status: success\n\n * Candidate solution\n Final objective value: 3.765730e+00\n\n * Found with\n Algorithm: L-BFGS\n\n * Convergence measures\n |x - x'| = 1.07e-05 ≰ 0.0e+00\n |x - x'|/|x'| = 1.07e-05 ≰ 0.0e+00\n |f(x) - f(x')| = 2.58e-09 ≰ 0.0e+00\n |f(x) - f(x')|/|f(x')| = 6.86e-10 ≤ 1.0e-07\n |g(x)| = 1.36e-06 ≤ 1.0e-05\n\n * Work counters\n Seconds run: 1 (vs limit Inf)\n Iterations: 7\n f(x) calls: 17\n ∇f(x) calls: 18\n" }, "metadata": {} } @@ -1334,7 +1335,7 @@ { "output_type": "execute_result", "data": { - "text/plain": " WF center [rx, ry, rz]/Å spread/Ų\n 1 -0.00000 0.76239 -0.00000 0.64174\n 2 0.66025 -0.38120 0.00000 0.64174\n 3 -0.66025 -0.38120 -0.00000 0.64174\n 4 0.00000 0.00000 0.00000 0.92025\n 5 -0.00000 1.52478 -0.00000 0.92025\nSum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n ΩI = 3.02222\n Ω̃ = 0.74351\n ΩOD = 0.73886\n ΩD = 0.00465\n Ω = 3.76572\n" + "text/plain": " WF center [rx, ry, rz]/Å spread/Ų\n 1 -0.00000 0.76239 -0.00000 0.64174\n 2 0.66025 -0.38120 -0.00000 0.64174\n 3 -0.66025 -0.38120 -0.00000 0.64174\n 4 -0.00000 -0.00000 0.00000 0.92025\n 5 -0.00000 1.52478 -0.00000 0.92025\nSum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n ΩI = 3.02222\n Ω̃ = 0.74351\n ΩOD = 0.73886\n ΩD = 0.00465\n Ω = 3.76573\n" }, "metadata": {}, "execution_count": 7 @@ -1432,7 +1433,7 @@ " center1 = center + offset\n", " center2 = center - offset\n", " # Build the custom projector\n", - " (basis, qs) -> DFTK.GaussianWannierProjection(center1)(basis, qs) - DFTK.GaussianWannierProjection(center2)(basis, qs)\n", + " (basis, ps) -> DFTK.GaussianWannierProjection(center1)(basis, ps) - DFTK.GaussianWannierProjection(center2)(basis, ps)\n", "end\n", "# Feed to Wannier via the `projections` as before..." ], @@ -1518,11 +1519,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/examples/wannier/b58c4f98.svg b/dev/examples/wannier/b58c4f98.svg new file mode 100644 index 0000000000..76ca1ae3f0 --- /dev/null +++ b/dev/examples/wannier/b58c4f98.svg @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/wannier/index.html b/dev/examples/wannier/index.html index f5f74fac52..922869a25c 100644 --- a/dev/examples/wannier/index.html +++ b/dev/examples/wannier/index.html @@ -1,5 +1,5 @@ -Wannierization using Wannier.jl or Wannier90 · DFTK.jl

Wannierization using Wannier.jl or Wannier90

DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).

No guarantees on Wannier interface

This code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!

This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.

using DFTK
+Wannierization using Wannier.jl or Wannier90 · DFTK.jl

Wannierization using Wannier.jl or Wannier90

DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).

No guarantees on Wannier interface

This code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!

This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.

using DFTK
 using Plots
 using Unitful
 using UnitfulAtomic
@@ -18,13 +18,14 @@
 nbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)
 scfres = self_consistent_field(basis; nbandsalg, tol=1e-5);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -11.14941187424                   -0.67    8.2
-  2   -11.15007175570       -3.18       -1.40    1.0    221ms
-  3   -11.15010722954       -4.45       -2.77    3.0    285ms
-  4   -11.15010941128       -5.66       -3.29    4.8    558ms
-  5   -11.15010943270       -7.67       -4.12    2.8    286ms
-  6   -11.15010943370       -9.00       -5.03    3.4    380ms

Plot bandstructure of the system

bands = compute_bands(scfres; kline_density=10)
-plot_bandstructure(bands)
Example block output

Wannierization with Wannier.jl

Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder "wannierjl" under the prefix "wannier" (i.e. "wannierjl/wannier.win", "wannierjl/wannier.wout", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.

We now produce a simple Wannier model for 5 MLFWs.

For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:

  • 3 bond-centered 2s hydrogenic orbitals for the expected σ bonds
  • 2 atom-centered 2pz hydrogenic orbitals for the expected π bands
using Wannier # Needed to make Wannier.Model available

From chemical intuition, we know that the bonds with the lowest energy are:

  • the 3 σ bonds,
  • the π and π* bonds.

We provide relevant initial projections to help Wannierization converge to functions with a similar shape.

s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)
+  1   -11.14942829873                   -0.67    8.8    623ms
+  2   -11.15007293316       -3.19       -1.40    1.0    214ms
+  3   -11.15010737895       -4.46       -2.77    3.8    334ms
+  4   -11.15010937008       -5.70       -3.32    4.2    397ms
+  5   -11.15010942849       -7.23       -4.33    2.8    321ms
+  6   -11.15010943372       -8.28       -4.88    4.6    399ms
+  7   -11.15010943375      -10.50       -5.36    3.8    333ms

Plot bandstructure of the system

bands = compute_bands(scfres; kline_density=10)
+plot_bandstructure(bands)
Example block output

Wannierization with Wannier.jl

Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder "wannierjl" under the prefix "wannier" (i.e. "wannierjl/wannier.win", "wannierjl/wannier.wout", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.

We now produce a simple Wannier model for 5 MLFWs.

For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:

  • 3 bond-centered 2s hydrogenic orbitals for the expected σ bonds
  • 2 atom-centered 2pz hydrogenic orbitals for the expected π bands
using Wannier # Needed to make Wannier.Model available

From chemical intuition, we know that the bonds with the lowest energy are:

  • the 3 σ bonds,
  • the π and π* bonds.

We provide relevant initial projections to help Wannierization converge to functions with a similar shape.

s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)
 pz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)
 projections = [
     # Note: fractional coordinates for the centers!
@@ -71,13 +72,13 @@
   7       0.00000    0.00000   -0.62832    1.26651
   8       0.00000    0.00000    0.62832    1.26651

Once we have the wannier_model, we can use the functions in the Wannier.jl package:

Compute MLWF:

U = disentangle(wannier_model, max_iter=200);
[ Info: Initial spread
   WF     center [rx, ry, rz]/Š             spread/Ų
-   1    -0.00000     0.76239    -0.00000     0.62113
-   2     0.66025    -0.38120    -0.00000     0.62113
-   3    -0.66025    -0.38120    -0.00000     0.62113
-   4     0.00000    -0.00000    -0.00000     1.19369
-   5     0.00000     1.52478     0.00000     1.19369
+   1     0.00000     0.76239     0.00000     0.62113
+   2     0.66025    -0.38120     0.00000     0.62113
+   3    -0.66025    -0.38120     0.00000     0.62113
+   4    -0.00000    -0.00000     0.00000     1.19369
+   5    -0.00000     1.52478     0.00000     1.19369
 Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
-   ΩI  =     3.81156
+   ΩI  =     3.81157
    Ω̃   =     0.43920
    ΩOD =     0.43823
    ΩD  =     0.00097
@@ -86,11 +87,11 @@
 
 [ Info: Initial spread (with states freezed)
   WF     center [rx, ry, rz]/Š             spread/Ų
-   1    -0.00000     0.76239    -0.00000     0.64218
-   2     0.66025    -0.38120    -0.00000     0.64218
-   3    -0.66025    -0.38120    -0.00000     0.64218
-   4     0.00000    -0.00000    -0.00000     1.13077
-   5     0.00000     1.52478     0.00000     1.13077
+   1     0.00000     0.76239    -0.00000     0.64218
+   2     0.66025    -0.38120     0.00000     0.64218
+   3    -0.66025    -0.38120     0.00000     0.64218
+   4    -0.00000    -0.00000    -0.00000     1.13078
+   5    -0.00000     1.52478     0.00000     1.13078
 Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    ΩI  =     3.46548
    Ω̃   =     0.72262
@@ -100,47 +101,47 @@
 
 
 Iter     Function value   Gradient norm
-     0     4.188095e+00     1.401803e+00
- * time: 0.0014600753784179688
-     1     3.807531e+00     8.825718e-02
- * time: 0.008118867874145508
-     2     3.768217e+00     2.015976e-02
- * time: 0.014705896377563477
-     3     3.765764e+00     2.446942e-03
- * time: 0.080841064453125
-     4     3.765725e+00     2.711407e-04
- * time: 0.08771991729736328
-     5     3.765724e+00     3.155862e-05
- * time: 0.09731888771057129
-     6     3.765724e+00     1.434267e-05
- * time: 0.10704994201660156
-     7     3.765724e+00     1.360123e-06
- * time: 0.11387300491333008
+     0     4.188101e+00     1.401803e+00
+ * time: 0.0015399456024169922
+     1     3.807537e+00     8.825712e-02
+ * time: 0.008563995361328125
+     2     3.768224e+00     2.015971e-02
+ * time: 0.015429973602294922
+     3     3.765770e+00     2.446955e-03
+ * time: 0.022244930267333984
+     4     3.765731e+00     2.711481e-04
+ * time: 0.02910590171813965
+     5     3.765731e+00     3.155845e-05
+ * time: 0.03896594047546387
+     6     3.765731e+00     1.434274e-05
+ * time: 0.04883694648742676
+     7     3.765731e+00     1.359838e-06
+ * time: 0.055793046951293945
 [ Info: Final spread
   WF     center [rx, ry, rz]/Š             spread/Ų
    1    -0.00000     0.76239    -0.00000     0.64174
-   2     0.66025    -0.38120    -0.00000     0.64174
-   3    -0.66025    -0.38120    -0.00000     0.64174
-   4    -0.00000    -0.00000    -0.00000     0.92025
-   5     0.00000     1.52478     0.00000     0.92025
+   2     0.66025    -0.38120     0.00000     0.64174
+   3    -0.66025    -0.38120     0.00000     0.64174
+   4     0.00000    -0.00000    -0.00000     0.92025
+   5    -0.00000     1.52478     0.00000     0.92025
 Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    ΩI  =     3.02222
    Ω̃   =     0.74351
    ΩOD =     0.73886
    ΩD  =     0.00465
-   Ω   =     3.76572

Inspect localization before and after Wannierization:

omega(wannier_model)
+   Ω   =     3.76573

Inspect localization before and after Wannierization:

omega(wannier_model)
 omega(wannier_model, U)
  WF     center [rx, ry, rz]/Š             spread/Ų
    1    -0.00000     0.76239    -0.00000     0.64174
-   2     0.66025    -0.38120    -0.00000     0.64174
-   3    -0.66025    -0.38120    -0.00000     0.64174
-   4    -0.00000    -0.00000    -0.00000     0.92025
-   5     0.00000     1.52478     0.00000     0.92025
+   2     0.66025    -0.38120     0.00000     0.64174
+   3    -0.66025    -0.38120     0.00000     0.64174
+   4     0.00000    -0.00000    -0.00000     0.92025
+   5    -0.00000     1.52478     0.00000     0.92025
 Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    ΩI  =     3.02222
    Ω̃   =     0.74351
    ΩOD =     0.73886
    ΩD  =     0.00465
-   Ω   =     3.76572
+   Ω   =     3.76573
 

Build a Wannier interpolation model:

kpath = irrfbz_path(model)
 interp_model = Wannier.InterpModel(wannier_model; kpath=kpath)

 recip_lattice: Å⁻¹
@@ -177,7 +178,7 @@
     center1 = center + offset
     center2 = center - offset
     # Build the custom projector
-    (basis, qs) -> DFTK.GaussianWannierProjection(center1)(basis, qs) - DFTK.GaussianWannierProjection(center2)(basis, qs)
+    (basis, ps) -> DFTK.GaussianWannierProjection(center1)(basis, ps) - DFTK.GaussianWannierProjection(center2)(basis, ps)
 end
 # Feed to Wannier via the `projections` as before...
pz_guess (generic function with 1 method)

This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.

Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.

Wannierization with Wannier90

We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:

using wannier90_jll  # Needed to make run_wannier90 available
 run_wannier90(scfres;
@@ -197,4 +198,4 @@
               wannier_plot_supercell=5,
               write_xyz=true,
               translate_home_cell=true,
-             );

As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.

(Delete temporary files.)

rm("wannier", recursive=true)
+ );

As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.

(Delete temporary files.)

rm("wannier", recursive=true)
diff --git a/dev/features/index.html b/dev/features/index.html index 87eaa2bd16..258721d96f 100644 --- a/dev/features/index.html +++ b/dev/features/index.html @@ -1,2 +1,2 @@ -DFTK features · DFTK.jl

DFTK features

  • Runs out of the box on Linux, macOS and Windows

Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

+DFTK features · DFTK.jl

DFTK features

  • Runs out of the box on Linux, macOS and Windows

Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

diff --git a/dev/guide/installation/index.html b/dev/guide/installation/index.html index 8adfbdfdde..33140ff0b8 100644 --- a/dev/guide/installation/index.html +++ b/dev/guide/installation/index.html @@ -1,5 +1,4 @@ -Installation · DFTK.jl

Installation

In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.6 is required for DFTK.

Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:

import Pkg
-Pkg.add("DFTK")

which will install the latest DFTK release. Alternatively (if you like to be fully up to date) install the master branch:

import Pkg
-Pkg.add(name="DFTK", rev="master")

DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box.

That's it. With this you are all set to run the code in the Tutorial or the examples directory.

DFTK version compatibility

We follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.

While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are

You can install these packages using

import Pkg
-Pkg.add(["AtomsIO", "AtomsIOPython", "ASEconvert"])
Python dependencies in Julia

There are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.

Installation for DFTK development

If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.

+Installation · DFTK.jl

Installation

In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.9 is required for DFTK.

Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:

import Pkg
+Pkg.add("DFTK")

which will install the latest DFTK release. DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box. With this you are all set to run the code in the Tutorial or the examples directory.

For obtaining a good user experience as well as peak performance some optional steps see the next sections on Recommended packages and Selecting the employed linear algebra and FFT backend. See also the details on Using DFTK on compute clusters if you are not installing DFTK on a laptop or workstation.

DFTK version compatibility

We follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.

While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are

You can install these packages using

import Pkg
+Pkg.add(["AtomsIO", "AtomsIOPython", "ASEconvert"])
Python dependencies in Julia

There are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.

Optional: Selecting the employed linear algebra and FFT backend

The default Julia setup uses the BLAS, LAPACK, MPI and FFT libraries shipped as part of the Julia package ecosystem. The default setup works, but to obtain peak performance for your hardware additional steps may be necessary, e.g. to employ the vendor-specific BLAS or FFT libraries. See the documentation of the MKL, FFTW, MPI and libblastrampoline packages for details on switching the underlying backend library. If you want to obtain a summary of the backend libraries currently employed by DFTK run the DFTK.versioninfo() command. See also Using DFTK on compute clusters, where some of this is explained in more details.

Installation for DFTK development

If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.

diff --git a/dev/guide/introductory_resources/index.html b/dev/guide/introductory_resources/index.html index 32fb15e0ee..7a2d8357bf 100644 --- a/dev/guide/introductory_resources/index.html +++ b/dev/guide/introductory_resources/index.html @@ -1,2 +1,2 @@ -Introductory resources · DFTK.jl

Introductory resources

This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.

Workshop material and tutorials

Textbooks

Recordings

+Introductory resources · DFTK.jl

Introductory resources

This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.

Workshop material and tutorials

Textbooks

Recordings

diff --git a/dev/guide/periodic_problems.ipynb b/dev/guide/periodic_problems.ipynb index 339ae69a1c..b2c18575b5 100644 --- a/dev/guide/periodic_problems.ipynb +++ b/dev/guide/periodic_problems.ipynb @@ -307,7 +307,7 @@ "output_type": "stream", "text": [ "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", - "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:33\n" + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:14\n" ] }, { @@ -319,272 +319,274 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ] }, @@ -662,97 +664,97 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -789,90 +791,90 @@ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ] }, @@ -927,276 +929,276 @@ "output_type": "stream", "text": [ "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", - "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:33\n" + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:14\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=6}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ] }, @@ -1240,11 +1242,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/guide/periodic_problems.jl b/dev/guide/periodic_problems.jl index 0230495ab2..59cc7f81d3 100644 --- a/dev/guide/periodic_problems.jl +++ b/dev/guide/periodic_problems.jl @@ -1,6 +1,4 @@ # # [Problems and plane-wave discretisations](@id periodic-problems) -#md # [![](https://mybinder.org/badge_logo.svg)](@__BINDER_ROOT_URL__/guide/@__NAME__.ipynb) -#md # [![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](@__NBVIEWER_ROOT_URL__/guide/@__NAME__.ipynb) # In this example we want to show how DFTK can be used to solve simple one-dimensional # periodic problems. Along the lines this notebook serves as a concise introduction into diff --git a/dev/guide/periodic_problems/367cf4e3.svg b/dev/guide/periodic_problems/57884762.svg similarity index 91% rename from dev/guide/periodic_problems/367cf4e3.svg rename to dev/guide/periodic_problems/57884762.svg index 038639e341..ccab0c4b55 100644 --- a/dev/guide/periodic_problems/367cf4e3.svg +++ b/dev/guide/periodic_problems/57884762.svg @@ -1,43 +1,43 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/periodic_problems/46379f45.svg b/dev/guide/periodic_problems/71e8ef86.svg similarity index 77% rename from dev/guide/periodic_problems/46379f45.svg rename to dev/guide/periodic_problems/71e8ef86.svg index efe7428fc4..520d404736 100644 --- a/dev/guide/periodic_problems/46379f45.svg +++ b/dev/guide/periodic_problems/71e8ef86.svg @@ -1,130 +1,130 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/periodic_problems/b9bb328d.svg b/dev/guide/periodic_problems/b9bb328d.svg new file mode 100644 index 0000000000..5776f7ff58 --- /dev/null +++ b/dev/guide/periodic_problems/b9bb328d.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/periodic_problems/f33b0c26.svg b/dev/guide/periodic_problems/f33b0c26.svg new file mode 100644 index 0000000000..b842660017 --- /dev/null +++ b/dev/guide/periodic_problems/f33b0c26.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/periodic_problems/index.html b/dev/guide/periodic_problems/index.html index 5177baa4f5..75bce8fcb9 100644 --- a/dev/guide/periodic_problems/index.html +++ b/dev/guide/periodic_problems/index.html @@ -1,5 +1,5 @@ -Problems and plane-wave discretisations · DFTK.jl

Problems and plane-wave discretisations

In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.

Periodicity and lattices

A periodic problem is characterized by being invariant to certain translations. For example the $\sin$ function is periodic with periodicity $2π$, i.e.

\[ \sin(x) = \sin(x + 2πm) \quad ∀ m ∈ \mathbb{Z},\]

This is nothing else than saying that any translation by an integer multiple of $2π$ keeps the $\sin$ function invariant. More formally, one can use the translation operator $T_{2πm}$ to write this as:

\[ T_{2πm} \, \sin(x) = \sin(x - 2πm) = \sin(x).\]

Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function $f : \mathbb{R} → \mathbb{R}$, but a priori the solution is known to be periodic with periodicity $a$. As a consequence of said periodicity it is sufficient to determine the values of $f$ for all $x$ from the interval $[-a/2, a/2)$ to uniquely define $f$ on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.

Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice

        -3a/2      -a/2      +a/2     +3a/2
+Problems and plane-wave discretisations · DFTK.jl

Problems and plane-wave discretisations

In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.

Periodicity and lattices

A periodic problem is characterized by being invariant to certain translations. For example the $\sin$ function is periodic with periodicity $2π$, i.e.

\[ \sin(x) = \sin(x + 2πm) \quad ∀ m ∈ \mathbb{Z},\]

This is nothing else than saying that any translation by an integer multiple of $2π$ keeps the $\sin$ function invariant. More formally, one can use the translation operator $T_{2πm}$ to write this as:

\[ T_{2πm} \, \sin(x) = \sin(x - 2πm) = \sin(x).\]

Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function $f : \mathbb{R} → \mathbb{R}$, but a priori the solution is known to be periodic with periodicity $a$. As a consequence of said periodicity it is sufficient to determine the values of $f$ for all $x$ from the interval $[-a/2, a/2)$ to uniquely define $f$ on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.

Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice

        -3a/2      -a/2      +a/2     +3a/2
        ... |---------|---------|---------| ...
                 a         a         a

with lattice constant $a$. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding $f$ it is thus sufficient to consider only the problem inside a unit cell $[-a/2, a/2)$ (this is the convention used by DFTK, but this is arbitrary, and for instance $[0,a)$ would have worked just as well).

Periodic operators and the Bloch transform

Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian

\[ H = -\frac12 Δ.\]

In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case $H$ one can easily show exactly that, i.e.

\[ T_{ma} H = H T_{ma} \quad ∀ m ∈ \mathbb{Z}.\]

We note in passing that the free-electron model is actually very special in the sense that the choice of $a$ is completely arbitrary here. In other words $H$ is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations $a$ and we will take this viewpoint here.

Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem

\[ H ψ_{kn} = ε_{kn} ψ_{kn}\]

satisfy a factorization

\[ ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x)\]

into a plane wave $e^{i k⋅x}$ and a lattice-periodic function

\[ T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \quad ∀ m ∈ \mathbb{Z}.\]

In this $n$ is a labeling integer index and $k$ is a real number, whose details will be clarified in the next section. The index $n$ is sometimes also called the band index and functions $ψ_{kn}$ satisfying this factorization are also known as Bloch functions or Bloch states.

Consider the application of $2H = -Δ = - \frac{d^2}{d x^2}$ to such a Bloch wave. First we notice for any function $f$

\[ -i∇ \left( e^{i k⋅x} f \right) = -i\frac{d}{dx} \left( e^{i k⋅x} f \right) @@ -50,10 +50,10 @@ using UnitfulAtomic using Plots -plot_bandstructure(basis; n_bands=6, kline_density=100)

Example block output
Selection of k-point grids in `PlaneWaveBasis` construction

You might wonder why we only selected a single $k$-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different $k$-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.

Adding potentials

So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.

  • The modified problem we will look at consists of diagonalizing

    \[H_k = \frac12 (-i \nabla + k)^2 + V\]

    for all $k \in B$ with a periodic potential $V$ interacting with the electrons.

  • A number of "standard" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct

We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.

A single potential looks like:

using Plots
+plot_bandstructure(basis; n_bands=6, kline_density=100)
Example block output
Selection of k-point grids in `PlaneWaveBasis` construction

You might wonder why we only selected a single $k$-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different $k$-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.

Adding potentials

So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.

  • The modified problem we will look at consists of diagonalizing

    \[H_k = \frac12 (-i \nabla + k)^2 + V\]

    for all $k \in B$ with a periodic potential $V$ interacting with the electrons.

  • A number of "standard" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct

We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.

A single potential looks like:

using Plots
 using LinearAlgebra
 nucleus = ElementGaussian(0.3, 10.0)
-plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))
Example block output

With this element at hand we can easily construct a setting where two potentials of this form are located at positions $20$ and $80$ inside the lattice $[0, 100]$:

using LinearAlgebra
+plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))
Example block output

With this element at hand we can easily construct a setting where two potentials of this form are located at positions $20$ and $80$ inside the lattice $[0, 100]$:

using LinearAlgebra
 
 # Define the 1D lattice [0, 100]
 lattice = diagm([100., 0, 0])
@@ -73,7 +73,7 @@
 potential = DFTK.total_local_potential(ham)[:, 1, 1]
 rvecs = collect(r_vectors_cart(basis))[:, 1, 1]  # slice along the x axis
 x = [r[1] for r in rvecs]                        # only keep the x coordinate
-plot(x, potential, label="", xlabel="x", ylabel="V(x)")
Example block output

This potential is the sum of two "atomic" potentials (the two "Gaussian" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.

With this setup, let's look at the bands:

using Unitful
+plot(x, potential, label="", xlabel="x", ylabel="V(x)")
Example block output

This potential is the sum of two "atomic" potentials (the two "Gaussian" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.

With this setup, let's look at the bands:

using Unitful
 using UnitfulAtomic
 
-plot_bandstructure(basis; n_bands=6, kline_density=500)
Example block output

The bands are noticeably different.

  • The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous but has gaps.

  • The two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.

  • The higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense "free electrons" correspond to perfect delocalization.

  • 1Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.
+plot_bandstructure(basis; n_bands=6, kline_density=500)
Example block output

The bands are noticeably different.

  • The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous but has gaps.

  • The two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.

  • The higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense "free electrons" correspond to perfect delocalization.

  • 1Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.
diff --git a/dev/guide/tutorial.ipynb b/dev/guide/tutorial.ipynb index e6a2f15235..adba5f9b98 100644 --- a/dev/guide/tutorial.ipynb +++ b/dev/guide/tutorial.ipynb @@ -75,14 +75,14 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", "--- --------------- --------- --------- ---- ------\n", - " 1 -7.900423073095 -0.70 4.8 \n", - " 2 -7.905000739293 -2.34 -1.52 1.0 443ms\n", - " 3 -7.905177363647 -3.75 -2.53 1.1 62.9ms\n", - " 4 -7.905210631071 -4.48 -2.83 2.9 64.2ms\n", - " 5 -7.905211103968 -6.33 -2.97 1.0 74.3ms\n", - " 6 -7.905211520660 -6.38 -4.68 1.0 43.3ms\n", - " 7 -7.905211531120 -7.98 -4.60 3.1 69.2ms\n", - " 8 -7.905211531386 -9.57 -5.21 1.0 51.2ms\n" + " 1 -7.900483300602 -0.70 4.6 2.58s\n", + " 2 -7.905010583209 -2.34 -1.52 1.0 3.59s\n", + " 3 -7.905178310146 -3.78 -2.53 1.1 53.9ms\n", + " 4 -7.905210512526 -4.49 -2.84 2.8 41.4ms\n", + " 5 -7.905211086428 -6.24 -2.97 1.0 23.2ms\n", + " 6 -7.905211516997 -6.37 -4.57 1.0 23.2ms\n", + " 7 -7.905211531256 -7.85 -4.75 2.5 41.7ms\n", + " 8 -7.905211531393 -9.86 -5.26 1.0 23.9ms\n" ] } ], @@ -123,7 +123,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1020961 \n AtomicLocal -2.1987843\n AtomicNonlocal 1.7296095 \n Ewald -8.3979253\n PspCorrection -0.2946254\n Hartree 0.5530391 \n Xc -2.3986212\n\n total -7.905211531386" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1020976 \n AtomicLocal -2.1987870\n AtomicNonlocal 1.7296101 \n Ewald -8.3979253\n PspCorrection -0.2946254\n Hartree 0.5530400 \n Xc -2.3986216\n\n total -7.905211531393" }, "metadata": {}, "execution_count": 3 @@ -148,7 +148,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "7×8 Matrix{Float64}:\n -0.176942 -0.14744 -0.0911692 … -0.101219 -0.023977 -0.0184079\n 0.261073 0.116915 0.00482509 0.0611643 -0.023977 -0.0184079\n 0.261073 0.23299 0.216733 0.121636 0.155532 0.117747\n 0.261073 0.23299 0.216733 0.212134 0.155532 0.117747\n 0.354532 0.335109 0.317102 0.350436 0.285692 0.417258\n 0.354532 0.389829 0.384601 … 0.436925 0.285692 0.417262\n 0.354533 0.389829 0.384601 0.449229 0.62754 0.443806" + "text/plain": "7×8 Matrix{Float64}:\n -0.176942 -0.147441 -0.0911694 … -0.101219 -0.0239772 -0.0184082\n 0.261073 0.116914 0.00482493 0.0611641 -0.0239772 -0.0184082\n 0.261073 0.232989 0.216733 0.121636 0.155531 0.117747\n 0.261073 0.232989 0.216733 0.212134 0.155531 0.117747\n 0.354532 0.335109 0.317102 0.350436 0.285692 0.417258\n 0.354532 0.389828 0.384601 … 0.436926 0.285692 0.417426\n 0.354533 0.389828 0.384601 0.449228 0.627541 0.443806" }, "metadata": {}, "execution_count": 4 @@ -156,7 +156,7 @@ ], "cell_type": "code", "source": [ - "hcat(scfres.eigenvalues...)" + "stack(scfres.eigenvalues)" ], "metadata": {}, "execution_count": 4 @@ -165,9 +165,7 @@ "cell_type": "markdown", "source": [ "`eigenvalues` is an array (indexed by k-points) of arrays (indexed by\n", - "eigenvalue number). The \"splatting\" operation `...` calls `hcat`\n", - "with all the inner arrays as arguments, which collects them into a\n", - "matrix.\n", + "eigenvalue number).\n", "\n", "The resulting matrix is 7 (number of computed eigenvalues) by 8\n", "(number of irreducible k-points). There are 7 eigenvalues per\n", @@ -198,7 +196,7 @@ ], "cell_type": "code", "source": [ - "hcat(scfres.occupation...)" + "stack(scfres.occupation)" ], "metadata": {}, "execution_count": 5 @@ -218,143 +216,143 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=1}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", "\n" ] }, @@ -384,7 +382,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-5.799988771847248e-16, -2.9817051977961507e-16, 1.8859040078483815e-18]\n [-6.336193560713785e-17, -3.995615749403891e-16, 7.05694301105318e-17]" + "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-2.6486743617758757e-16, -1.7780872107468632e-16, -2.428775292998251e-16]\n [-4.744299256797302e-16, 1.1506415132124619e-17, 3.5182886249597626e-16]" }, "metadata": {}, "execution_count": 7 @@ -412,457 +410,457 @@ "output_type": "stream", "text": [ "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", - "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:45\n" + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:26\n" ] }, { "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=44}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -890,110 +888,110 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=2}", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOydd3gk1Znu3w7qbuWcZ0aanBiYwTPkDIPHGIy5fmzwBa+5BgO79nXaNX6Mjc3a67AsYPva114wdx7C2tgEs4CJThgYhjADTGRylEbSKKvV3ZI63T+qKZUqnspVPd/vL6lV3XVUXXXe837nO98J5PN5EARBEMSJStDtBhAEQRCEm5AQEgRBECc0JIQEQRDECQ0JIUEQBHFCQ0JIEARBnNCQEBIEQRAnNCSEBEEQxAkNCSFBEARxQkNCSBAEQZzQkBASBEEQJzRuCmFPT89//Md/qByQzWYda4xnyefzuVzO7Va4D90MAI7Fj23q3uR2K9yHnggOeigA5PN584VC3RTCw4cP/+EPf1A5IJlMOtYYz5LJZKamptxuhfvQzQDgV5t+deb6M91uhfukUinSQtBDAQBIp9PpdNrkh1BolCAIgjihISEkCIIgTmjC7IdmMpl4PF5bW8u/Mj4+znvSYDBYXV3N/2lwcLC3t3fRokUlJSVWtZUgCIIgLIfJEe7cufOss86qrq5uamoSvn7VVVfNnj17/vz58+fPv/jii/nXv/e97y1atOi6665buHDhtm3bLG4yQRAEQVgHkxBWV1d/+9vffvrpp6V/Wr9+/dDQ0NDQ0KZNhWS2Xbt23X333Zs3b3733XdvuOGGr33ta1a2lyAIgiAshUkI29vbL7vsMpEd5Ein04ODg8JXfv/7369du7azsxPAzTff/Ne//vX48eNWNJUgCIIgrEfHHKEsX/ziF8PhcDAYvOuuuz7zmc8AOHz48IIFC7i/NjU1lZeXHzlyRFZEc7lcIpHYvHkz/8qCBQuEE40EQRAEYTemhPC+++7r7OwMBALPPffcJz7xiZUrV65YsSKRSESjUf6YsrKy8fFx2bcPDg4eOHDgxhtv5H4NBoNf//rXP/rRj/IHKL3xhCKdTmezWfMLZfwO3QwAuBWl8Xjc7Ya4TDKZzGQyweCJnvRODwU+eCgikYjSAbFYTDNn05QQzp07l/vhsssuO/PMM19++eUVK1Y0NzcPDw9zr+fz+eHh4ZaWFtm3NzY2rlixYuPGjSqnqKys5H/+9Kfx7W9j+XIzTfYfnBDGYjG3G+I+wpvhxIR72uk6BIPB0tJSEkLQzcAghCyYDY1y5PP548ePV1VVAVi1atUvf/lL7vVNmzaVl5dz84XmGRjAsWNYvhw7d+5MpVKWfKb3aWxslA0sEwRBEJbAJISpVOrhhx/u7u7O5XL33XdfeXn5tddeOzg4+O///u/nn39+NBp9+OGHR0ZGrrjiCgBXX331bbfd9r3vfe+CCy649dZbb775ZqvcTHk5kkmk0+mTTz555cqVlnymxxkbG1uwYIF6ITqCIAjCDExCmMlkuJSWG2+8cfPmzTU1Nddee21paSkAzvwtW7bsrbfeqqurA1BWVvbyyy//8Ic/3LBhw8c//vF//ud/tqqtZWVIJJDP50OhEL9ao7h58cUX77nnHrdbQRAEUcwwCWFlZeW9994rerGsrOzOO++UPX7x4sUPPvig2aZJ4BwhQRAEQViIn2aby8uRSLjdCIIgCKK48JMQcqFRgiAIgrAQnwkhhUYJgiAIa/GTENIcIUEQBGE5PhNCCo0SBEEQ1mLNgnpn8PIcIVdMJxQKcVUFpPT19R05cqS2tpYvxMqRyWT27t2bTCY7OjoaGhqcaCtBEAQhwE9C6OXQaH19fXt7ezAYHBsbmzt37o033njLLbdwJaASicRNN9303HPPnXTSSQcPHmxtbX3kkUc4Ody0adMnP/nJ6urq6urq999//9prr/3JT37i9r9CEARxYuEzIfSsIwTw/PPPn3TSSZlM5qWXXrr55pt7enq+//3vA7j55psPHjy4f//+urq6bDb75S9/ed26ddu2bSstLf3yl7984403futb3wKQzWYPHjzo9j9BEARxwuGnOcLSUu86Qp5wOHzZZZf953/+5913351MJnt7ex955JFf/OIXXNmdUCh01113JRIJrmpaT0/PvHnzuDeGQiFR1JQgCKLoufxy/P3vLrfBT44wGsXkpPyfNm/GBzteOMHq1aipUTvgzDPPTKVSO3bsiMfjpaWlp556Kv+nWCy2evXqt95669prr73++us///nPP//88+ecc866devmzJlje9MJgiC8xL592LAB55/vZhv8JISlpZiYkP/T//k/OHbMuZZ861u44AK1AyorK4PBYCqVGhkZkabPVFVVJZNJAN/5zncuuOCCJ5988r777vvCF75w5513fvWrX7Wt1QRBEJ6jrw+ul472kxBGo4pCaENlU1Ps378/l8t1dHRUV1f39fUl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", + "image/png": "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ffbZZwN44IEHrr766uuuu442GCMI4gQhk8HQEA4fdrkZfsoRxuOKoVFPUSgUvve9761bt27OnDnLli1ra2v78Y9/zP918+bNmzdv/vCHPyx61/r163O5XNrL5UAEQRCW0tODYBCjoy43w0+OMB5XdIRe4NFHH33xxRePHDmyadOm0dHRp556CkAkErn33ns//OEP9/f3n3feeXv27PnXf/3XW2+9dfny5QDOP//8jRs3nnzyyePj43feeed5553X3Nzs9vcgCIJwiJ4etLe7L4R+coQqxTKu85WvfGV8fPzQoUPJZPJb3/rW9u3bFy9ezP1pw4YNb775ZiaT+cEPfvDXv/71l7/85de//nXuT1/96ld7e3t/9KMfPfzwwx/60IeeeOIJ974BQRCE0wwOor3d/Xlx5Ait4Tvf+Y7KX5cuXfr9739f+vqGDRs2bNhgW6MIgiA8TTqNlhb3i2V85gizWRQKbreDIAiCsIJ0GjU1CIddNjl+EkIA0ah3o6MEQRCELtJpJJOorHQ5Tein0Cj8UzgKYHJysru7m/81Ho9TIQxBEIQQoRC6uOkACaFdvPPOO2vXrl2wYAH369q1ax966CF3m0QQBOEpyBEawcv1Mrlcrre3t6amhp8RH41G9+7d626rCIIgPAtXLOO6EPosR+hZIXz88cfb2to2bty4fPnyL3zhC243hyAIwgeMjZUcYSrlZjN85ghlpxKO58b//eV/z2QzjjVj48KN5849V/jKHXfc8f3vf//KK68EMPFuE3O53I033sj9/LGPfezMM890rIUEQRDeZ3QUlZVq60g7g8+EUNYRDmQGftrx07Gsc1s0RUIRkRB+7GMfu++++4aGhk4++eTTTz+dezEYDK5du5b7ubGx0bHmEQRB+AIuR+j6YinlIIRtVW2dX+h0ozlTTExMpNPpgwcPzpw5k38xGAxee+21LraKIAjCy4yNoaLC/ZyXz4TQ9YGDErfeeuvbb789d+5ctxtCEAThGzziCH1WLBOLYXLS7UbIcdppp912220vvPDCH//4x3vuucft5hAEQfiATAaJBKJRlzt2/wmhNx3hww8/vGzZsp/+9Kf3339/OBwG0Nra+tWvftXtdhEEQXiX8XHE42p7zToDhUatoa6u7stf/rLwlba2tttuu82l5hAEQfgAXggpNKoD168XQRAEYRXj44jF3F8yjISQIAiCcIeJCXKE+vFssQxBEAShFwqNGsH160UQBEFYBQmhEVy/XgRBEIQlFArI5xGJuN+x+0wIaWNegiCI8oCzg/CAw/Hf9In+fhQKhUceecTttjjBli1b3G4CQRCELZAQGiQWQy4Xufrqq08QIQTw4Q9/2O0mEARBWA8JoUFiMUxMBH72s5+53RDnyGaz+Xze7VYQBEFYDDeJEB4QQp/lCF2/XgRBEIQlcJMIAfeXWCMhJAiCIFzAO6FRnwmh6yvxEARBEJYwMVEKjbresftMCF3frYMgCIKwhEym5AgjEWSzbrbEZ0Lo+kbGBEEQhCXwjtB1h+MzIXQ9lEwQBEFYwuRkSQjJEerD9YEDQRAEYQm8I4xEyBHqgRwhQRBEeTAxgWgUAKJRcoR6ICEkCIIoDyg0ahASQoIgiPJgcnLKEVJoVAckhARBEOUBHxolR6gPEkKCIIjygA+NkiPUBwkhQRBEecCHRgMBhELI5VxrCQkhQRAE4QK8EMLt6KjPhDAcRqEA2pWIIAjC7wiF0N3oqM+EEG5fL4IgCMIS+GIZkCPUC0VHCYIgygC+WAZuOxxfCiE5QoIgCL9DOULjkCMkCIIoA4ShUXKE+iAhJAiCKAOEoVFyhPqgLQkJgiDKAM2q0VdewXPPOdES/wkhVY0SBEGUAZo5wqefxje+4URL/CeE5AgJgiDKAE1HePw4Xn4Z6bTtLfGfEJIjJAiCKAP4jXmh4Aj7+lAoYGjI9pb4TwhjMXKEBEEQvkfTEQ4MAMDIiO0t8aUQkiMkCILwO5o5wv5+JBIkhHKQIyQIgigDNB1hfz/mziUhlIPmERIEQZQB2SwikdLPso5wYADz5pEQykGhUYIgiDJAuLJMOCzejzCXQz6PpiakUra3xJdCSI6QIAjC72SzajnCTAaJBKqqyBHKQUJIEARRBqgXy4yNIZFAdTUJoRwkhARBEGWAeo4wk0FFBaqqKDQqBwkhQRBEGcDiCCsraWUZOWiJNYIgCLs5cgSFgr2nyGYRDpd+jkTEVZDj40gkkEggk7G3GfCjEHrfEf7pT9i2ze1GEARBmODSS/Hqq/aeQlQsI6oa5RyhM87Hf0Lo/bVG770Xv/mN240gCIIwwaFD2LvXxs/n7GAgUPpVNjRaUeGQEIa1D/EY3l9Z5uhRVFW53QiCIAijpNMYGsL+/TaeQlgpA+ViGRJCebwfGu3qIiEkCMLHdHYCsFcIhZUyACIRjI1NO4CbRxiPO5Ej9J8QxuNeF8LubhJCgiB8zNGjCIXQ3W3jKVgcIRXLKOJxRzg6ilQKXV1ut4MgCMIo/f1obbV33oLUEcpOn0gkqFhGDo8L4cAA6usxPOx2OwiCIIySTqOxURyrtJbJyWmOMByWL5ZxpiiEhNBiMhnU12N8HMWi200hCIIwxNgYGhsxOmrjKYRzJwBEo2Ih5OcRkhDK4HEhHBtDZSUiEU83kiAIQoV0Gk1NtjtCoRBKd58YH0c8TvMIFfC4EHIJ3mTS3nuIIAjCPjIZNDbamyMUFctIJ4hzSknFMvJ4XAidnARKEARhB3yO0L4UDzlCU3hfCLm4NjlCgiB8SjqNqip7Uzya0ycmJhCLIRZDNmv7qqckhBbDrYZQUeGEnScIgrCDsTEkk0gmbYyOak6f4IQQjvT5JIQWw08CJUdIEIRP4VI8lZU2Fo5KHaFsjhBwIk1IQmgx3A3kTMkvQRCEHaTTSCZRUWHjgF7qCGVzhCBHKIvHF93mHKGtNxBBEIStcAP6ZNJRRygKjfJKSUIoA5c79ex0db5YhnKEBEH4FE4Iba11YCyWAQmhLIGATDTZO3DFMpQjJAjCv6TTpeXNXK8ahSN70PpPCOHtvXkpR0gQhN/hljeLRt0UQj5HSEIoj5enq1OOkCAIv8Pl52zd8449R+hAh+9LIfRy4ej4OGIxT0s1QRCEOvxkdgqNehcvh0a5f56XW0gQBKEOF5a0NTSqOaGeMxUgIVTCy45wchKxmMw/lSAIwi94yhFS1ag8XhZCcoQEQfgdzq6REHoaL8+p524gEkKCIHxKLodAAKGQV4SQQqPy2FrLZBIHRlIOMDKC//N/3G4EQRBuwCuQrT1tLodweOpX9ZVl7HY+Ye1DgHw+v3379o6Ojr6+vi996UvCP23atOn3v/99S0vLddddN2PGDO7FwcHBe+65p6ur64ILLvjgBz9oeaO9LDN8aNSzLWTh0CE8+CBuvhkrVrjdFIIgnEUYk7RvZZnJSVRXT/0qEsJ8HoVCyTLGYt5whC+88MLFF19877333nzzzcLXf/7zn1977bWLFy/etWvXGWecMTExASCXy51zzjlvvfXW0qVLb7rppv/+7/+2vNFeFkLeEfo6NNrTAwAvvOB2OwiCcBxnknPZrFrVKFd1yOGVHOF555135MgRkaQVi8Xvfve7P/jBDz7zmc/8/Oc/r6ioePTRRwE8+eSTExMTv/rVrz796U/ffffd//7v/57P561ttJeFsDyKZXp7AWBw0O12EAThOI4JoTBHyGUleS0UTq5wIMBmPEfY29u7e/fuDRs2AAgEAhdccMGLL74I4MUXXzzvvPOCwSCA8847r7u7+8CBA1Y1l8PjQlgGxTK9vQiHMTzsdjsIgnAcV4QQQDQqL4QOBNiYcoSydHd3x+Pxqqoq7tempqZdu3YB6OnpWbBgAfdiJBKpq6vr7u5euHCh9BOGhob279//qU99in/lsssuO+uss/hfM5lMKBSSvjEUiqZShbGxnPRPrjMxkSgUxovFYCYTHhuz4CbKZrP5fL5QKJj/KHY6OyOzZ4ePH8+PjXlFz5VuhhOKbDYLYOyEX75vbGysWCxyo22f8sILoSNHAlddZaoTs+mhGB4ORiLRsbHxQCCcTgdt6gQymWixOK0bD4cTIyPjQBHA0FAgGo2PjWUABIOR0VGMjclPzZ6cnASQyyleyWg0Gg5rKJ1xIYxGo7lcrlgsBgIBANlsNhaLAYhEIsJYaDabjQojwQIqKioqKyvXrVvH/RoIBBYuXBjjA8PA5OSk8FfBG4P5fDAW82K3ODkZqKqKJpOBXC4g23i9BIPBfD5vyUexMzgYXLgQo6Mhh8+rgtLNcELBPc90HXK5XCwW87UQPvRQsLcXn/ykqU7MpoeiWAzE44FYLGZhPyalUAgmEtO68Wg0EAhEBanB0qkTiUA6HYjF5P/dnAApqQwAlvvEuBC2tbXlcrne3t6WlhYAnZ2dbW1t3OudnZ3cMalUanh4uL29XfYTotFoU1PTjTfeqHSKUCgkO96Jx5HNBrxpDyYnkUiE4nFks7BksMZ5QYfNUDqN9nZ0dzt9XhWUboYTCu6Zp+vA3Qy+FsK//AXFotl/pU0PRTaLeByhUCiRwOSkXfdbLodYbFo3HomgUCidLZ9HNFo6tXozuNdNNtL4nVRXV3fWWWc9/PDDANLp9O9+9ztupsQHP/jBZ555Znh4GMAjjzyyZs2amTNnmmmiFC9PTiiPYpmxMbS1UY6QIGyhWERXF/r6bNz/3Qxu5QiFhaNcsQWHAx0+kyMcGBi48MILM5lMPp9fu3ZtU1PT008/DeCb3/zmRz7ykddff33r1q1r1qw5//zzAaxfv/78888//fTTTznllE2bNj344IOWN9rLkxPKY2WZdJqEkCDsYmQEiQSamtDdjUWL3G6NBC8IoWj6hCeKZaqrq++++27+18i7zT/77LO3bt36yiuvXH/99WeddRYXtwHwwAMPvPzyy729vd/97neV4qJmsHWapxn4pYnKQwiHhtxuB0GUI/39mDEDdXUenaHkzNpmot0nAITD4Ete+DZAbtEZy2ESwnA4/J73vEf2Ty0tLR/5yEdELwYCgTPPPNNs05SJxTzaR/P/Wr8L4dgYmpuRTrvdDoIoRwYHUVd3oguhaIk10emEftGB+XLGi2VcxLMy4+QqsbYyOoqGBo/aboLwO5wjrK31qBDyA3pbrRi7I6RFt+Xx7IT6shHCsTHU1SGfh9WLAhEEgYEB1Nd71xE6E9nSLJYhIdTAs9swCZdL96ZUMzI2hmQS8TiZQoKwnoEBT4dGeYlyWAhdDI36VQi96becCSnYTaGA8XEkEojHPTrgIAhfk0qhpsa7QshPXbC1H5MKYTgs7wgd6E79KoTe9Fvl4QgzGSQSCARQUUGOkCCsJ51GRYV3hTCXc8IRyhbLKK01So5QBs/KTHk4wnQaySQAcoQEYQvpNCorUVnp9Qn1Dk+fUMoRRiKUI5TDs0LIm/1wGPk8ikW3G2QIbrgKIJHACb+8M0FYD/eIeVYInckRSh2haEK9MEdIQiiDZ5dYE45xhKXA/oJLEAJIJMgREoT1cI4wmfToVF23pk9Q1ag+vO8I4ecZFPwtmEhQjpAgrIccIRgm1PtjY14X8X7VKHzuCONxgHKEBGEPfnGE4TAKBdi0F6qmIxQKIVWNyuAXR+jNRmrC34IVFZQjJAjrGRvztCMUSpR90VF1RyhadJscoQyejTqKKp386wi5HCE5QoKwg9FRfzhC2CmEwnIYDmHHTjlCbXzhCP07g4JyhARhK9wMpcpKjwqhM7UO/GxFHpEjFIZGSQhl8KwjdGYkZTfj4ySEBGEjXLFMLIZCwYu9hAMixOUdg9P1RzhfUBRds3s2mi+F0BeO0LNqrQkfnafQKEHYAZcjBDwaHXVACKXrq0HZEQKIROzt830phJ7VmPKoGs1kSlWjnr3OBOFrfCSENkW2ZIVQWFchdISwv3DUl0JIjtBWeEfo2etMEP6Fi/JxHYU3hdCBfkxWCIUdjsgR2t0X+VIIg0EEg170W2WWIyQhJAjL4efpwqurGHohNCp1hLb6Cl8KIbzqt8ojNMpPn/DmRSYIX8OnHuDVejQXQ6OyS6yBhFAJb05XLw9HyN+C5AgJwnL4gSbg0Z3OyBH6Bm+uslZm8wi9OdogCF8jDI16c/Emt3KEwukTohwhCaE83jQr5VEswwthPO7Fi0wQvkbodbyfI7RpL0Dp+mqYbm+oWIYJb5qV8giN8iNW/2o5QXgWkSP0YGhUNKB3LEdIoVHdeLOPLptiGcoREoRNZDJTOULvF8uEw1Qs42G82UeXR2iU5hEShH3wA034JEfomBDSPELdOLBDlQHKIzQqLJbxqZYThGcRVo163xG6NX1COFwAOUIlvGlWyqNqlH8MvHmRCcLXeN8RCitZ7KsalRbLqKw1andRiF+F0JtmpTwcIf8tvFmRRBC+xvs5QuHu8PY5QtH29JDkCPmSIpAjVMKbZqXMhNCbkzUJwtd4f4k1oUo5GRoVqp1IKe3ui0gIrUQUGvWpilBolCDsQ+h1PBgaLRZRLCIUKv1qkxVTmkfIdTjZLEIhBAJTfyJHKI83Q6OUIyQIQh2PzyOcnJwmUQ4Xy3C9umjuBKhqVAlvCqEoNOrTeYSUIyQI+xAWy8TjnhNCUUzSSSHk45/CsQIHOUJ5vC+E/p1QL1x024MXmSB8jWiJNQ8KoVCiHBbC8XFgej0RBwmhPN40K2UzoZ5CowRhE/yCFfBkaFQkUU4uup1IlIRQNIkQNH1CCW/KTHk4Qv5b+LfehyA8i9ARejA0KprAZ1M/pr6yjHDNAQ67V1DxqxB6M2pXHsUy/Cwi7uYrFt1uEEGUEf4KjTrpCGOxUodDOUJWvO8I/SuEfOgmEPCxryUIbyLsJbwfGnUyR4h3Q6BSIaSqUXm8KTOTk1P/Xf9KiAP7UxPECYvHHaEoNOqwEMbjGB9HJkOOkA1v1nHkcuVQLFMeJT8E4U2ESuNBIXQmNCo7oR7vCqFofTWQI1TCm45QuEafTx1hLodAwPZ1JQjihEVYEul9IXTYEXKCR46QFW920A6s0Wc30sCIB68zQfgX4fSJUAjBoLc6Ci+ERqVVo+QI5fFmaLQMqkal+2GSEBJ+57bb8K//6nYj3kX0iHltuVFR0NLJbZggCI3SEmtMeH9CfXkIoTedN0GwUyzi9tvx8MNut+NdRL2816KjzjhCYTmFEN4RUo6QCQ920LkcgkEE372i5SGEFBol/E5vL5JJHD2K48fdbgoAzwuhF3KEJISseDBkJ/rX+rRYRuoI/SjnBMFz8CDmz8fKlXjnHbebAmB6SR38IISOTagHOUK9eNAROhNSsBsKjRJlxsGDmDsXS5di5063mwJgerEMvJcjFE6Ghm1DYRVHSEKoAw920M6EFOyGhJAoM7q70daGpUuxY4fbTQEgFxr1lBC6uA0TgHhcfvoECaE8HuygyREShAcZGkJtLZYuxbZtbjcFgEQIvbbKmhdCo+k0KiunvU5CKI8HO2hyhAThQYaHUVODFSuwdavbTQHg+ekT0pVlnHSE3NUYHSUhZMODHbQz25fYjTPjQYJwDM4RtrdjchJ9fW63Rs4RekoI3Z1QX1mJVAqplFgIaT9CebwphOQICcJrcEIIYN06vPqq263xQ47QxbVGq6owOkqOkBkPdtDOJJnthqZPEGUGFxoFcP75eO45lxtTKKBQmKYB3s8ROu8IZYWQ1hqVwYNCWDbFMg6MBwnCMXhHeNllePBBdHa62RhRLwFPhkZdLJapqlITQvs2CSchtIyyyRFSaJQoJ3hHOG8evvxlfOITbjZGKoTOh0b7+tS6JmkP4KQjVAqNcpuE22ctSAgto2wcIQkhUU4MD5ccIYCbbsKWLThyxLXGSJeTdtgRFou44AI8/rjiAd4MjcLmNCEJoWWQEBKEBxkdRTJZ+jkaxfr12LzZtcbIhkadzBG+9RbefhsHDyoe4EyxjGZotKpK/CcSQhk82EGXhxCWx2xIguDI5VAoTDNhCxdi717X2uN6jrC7G4CaJ5ZN8VienFMRwv5+BIMyfyUhlMGbQihadNtTEpLP4wc/0D6MHCFRTqTTqKiY9orXhNDhHGF/P2pqcPiw4gEiibIpOac0faKyEp2dpZyuCBJCGUIhAMjn3W6HAFGSORxGsWhjmZNe9u7FTTdhZETjMBJCopwYG5uKi3IsWID9+11qjWTrCQDJJNJp5xrQ14fVq9UcodSr2VEvo+QIa2sxPIxZs2T+REIoj9cWPZGmwUMhDxWObtuGYlF7lSlpYMRTvpYgdJFOi4WwqcnN9WVEW08AqKx0WggXL8bAgOIBUs9qRycgPQtHczNqazF3rsyfuGVIbcLHQui1LQllR1LeaSG34rDmlmyib+G1i0wQuhgbE4dGGxrc3KFXKgBcnaRjHD+OefPUIkPSfsyOTkDJEQJYtgxz5si8TkIoj6dkBnK3uKcqTTo70dJSSpWrQDvUE+WENEfoQSEcHXWuAX19WLBAnxDa0Y+pCOHq1TjpJJnXbRVCuXylTyAh1MXQEObMwfCwxmGTk6iunvqVllgjfI00R8jpojRk6gyuC+HwMGbMQDSqeAVcF8K77iqVgIiIx22cZ0KO0DKsFeFRLv0AACAASURBVMLhYVxzjVooXy+MQkgryxDlhNQRwlVTKC2WcVgIubnq1dWKplDaj9nRCagIYSSCoJwuUWhUHq/10dYK4QMP4P778cor5ttVYniY1RFSaJQoG6SOEK4KoevFMpwQ1tQoCqHrjlAJEkJ5vCaE1t5ABw4gmURHh/l2lWAPjTqwLSdBOINsALC+HoODbrRGoSYzHHZucRneESp1BQ4U/RUKKBbl458qkBDK4zUhtNYRHjqEDRu0izzZ4YRwaEjjMAqNEuWEbGi0utrRQk0hstMGuJWmnYFbvUw9NGq3IzRgB0FCqITX+mjLhfCcc6xcHdhwaJQcIeFfMhkZIXR4xoIQWSF0Mk2omSMUDYVhQ35EqrUskBDK47X0lbVCeOQIzjhDbSUkXYyPo1hEc7NuIfTaaIMgdDE+jnhc/CK3srMrSItl4KAQjo+XIrEqZ3RgZRmp1rJAQiiP1/poa4VwcBDLlmFoaNqqQr/+NR57zMincVuy1dQwVY06sC0nQThDJoNEQvyik6FIEdJiGQA1Ndo5C0tIpUrbGyWTigucOlAsQ6FRKyljIRwfR6GAZBJtbejsDPCvf+c7+NznjHxgOo3KSsRiKBQ0Vn2TOkIKjRL+RdYRei00Wl9v5UQpFfh9/lS2vJDGLS3vaUkIrcRrfbT0BjK8Rt/QUGkr0ZkzcfRo6cVcDtu34/hxI3cDXzKguecLhUaJciKTkQ+NuugIPS6EDuQISQitxGt9tIWOcHAQdXUA0NaGo0dLjnDXLsyahTlz1DbVVIIvItcrhBQaJXzN+LhMaNSzjvDf/g1//auNZxcKodLkRQemT5AQWokHhVAU/Y9EDO4+wTvCtrYpR7h/PxYuxNy5OHBA9wfy04o1hVC6P7WnbDdB6ELJEXqqWKauDgMDyOVw5534xjdsPDtLPyCVassX3SYhtBKvCaF0GyZLHGF3d8kRHjqEOXPQ3q69cLYUw47QaxeZIHQh6wi9VizDOcI330QshrfesvHsY2Olq6FSLOPZHGEiQUIoh9f6aAtDo7KO8OBBzJ2L2lojBWZmQqPkCAn/IusIvRka3bIFGzeipweFgl1n52dV6soRekQINfsuM5AQWoaFjlBYLNPVNc0ROiCEotCopy4yQehC1hGq+CG7kRXC5mb09GDrVpxyCmpqbNw3mN+dUVdo1CNCmEiQEMrhtT5aGv03LITcMkgAZs5EZ2fpRZNCyFg1SkusEeWE7PQJW72FOrJCuGgRdu/GW29h5Uq0t6Ory66z86FRpWKZQgGFAsLTd+ezvBMwtrIMOUJ5otFpk81dR7ZYxrAQcsVd7e3o6QlwoRJOCOvqjKwXTKFR4sREdkK9rd5CHVkhbG9HKoW//Q3r1qG9fSobYjmaoVFZr2aHIzSwsoytQujvjXk91UdbGBodHcWsWQAQjaKuDseOBZqbkUqhudmgI2SvGqViGaKc8JojlK0aDQSweDEAVFaWKkhtgg+NKgWHZXXaI6HRigob9+jwtxAqrRvrChYWy/COEMCsWcXDhwMTE5g1C4GA8dBofT2gP0fIbZWSz+veM0WFJ57A2rVoa7PsAwlCCVlHaGuXqo5s1SiA3/4W+TwApnUQDTM2hupqQL8jtHbHRCqWsRKvmRVrHSEvhAsWFPfsCezbh/nzAVhQLKN+T8uuK2Gt8/7mN/H971v5gQShhNccoazlAjBzJubMAWwWQj40mkjIDwU87ghJCGWwfJqnSWwSwkWLinv3BnbuxJIlgNHnRJgkVx8L210zVihg+3b87neWfSBBqCDrCEMhhMPuVBgoCSGPygZJ5uH7AT8KIVWNyuM1R2hTaHTRIuzeHdixoySElZVGwhSaI0EOLjgjioJae53370ciYeU+iwShgnR4yuFWvYymELrrCB0rljEghCx7BhiGhNAybHKEa9cWX3892NGBVasAIJk0KITcSFB9mSIHHoPOTixbhmLRW/ldoiyZnEQ4jKBcJ2dtmvDqq1k/zV0h5Itl4nGzjvCuu/CznxlshuZFUMK+4QsJoTXk8zLzbwwLIb9tGICFC4uhEDo7ceqpABCLIZ/X/bHCB0BFCB0IjAwOor7e3slSBMEhmyDksDDhdPAgfvELdHQwHSxbNSrEbiHkBsTc+ED6XDP2ALkcbr4ZL7xgsBnGHCHsrHIiIbQG2WIwzRYePoyPfUzmdaEjBHDffdkf/WgqYmnAFAodocqdJPsYWLsBxcAACSHhEOPj8nFRWOotXnsNAF5/nelgpapRnpoaG4MlfGgUCkt3MsaEenuRyWD/foPNMOwI7auXISG0BtlUhKYjvP9+PPKITNSb20eXZ/36wj/8w9SvBtKEwiS5uiOUfQwsrBrlhLC11cjS4QShi4kJJxzh7t1oasKuXUwHsxTL2Joj5EuHZNOEjI6wuxutrdi3z2AzzDhCEkIxnhJCY17qjTcwOSmzrRK/IposxhwhS2hUdsUHa68zJ4QNDejvt+wzCUIW9dCoVUG2vj4sWcJ6P2sKobFqOEYsFML3vAdDQwa3gzDsCCsr7do2hITQGmQdoaaX6utDQwN27pz2Yi6HQkEtfpJM6r4beEfoeo6QE8IZM3D8uGWfSRCyOBMa7e/HkiWs97OmBhirhmNEKISyWRLG0Gh3N9rajC+CY0YIbdo2hIRQjfvvx733Mh0pmwPXdITHjmHNmqlltTnU7SAMjRkZp084I4R1deQIfczmzTjtNLcbwYZKaNTCze04R+g7IZS9AuyOsKXF4LrHMBEatW8jSRJCNR59FF/8ItORSsUymo5wyRLxqIpfF1QJk8UyenOE1hbLDA2VhJAcoU95+mm8/XZpyqnHUXeEVoVG+/uxeLFlQphIYGLCri0JrQqNcnEdw0JIjtBKHBDCri4MDjKNHA0Uy4yNIZfD3LliIdR0hHpDo4XClE4bC41aWCzDFcRSaNS/vPYaxsdlEtseRMURqj8IuuCHs8WixpHFInI5DTMUCCAet6skRFMIGUOjw8OoqUFtrXEhNOwISQjFOCCEnZ2oqmKqb5RNy6u3sK8PjY2lzamFWO4Iubs/EAAYpk8YmASiC04IKTTqX/r6MGMGa5Gku6gUy1joCI8fR1sbYjHtPpoTgEBA4zCboqPF4rSRgWxXIDsUjsXEy9FxO4fX1RlZ9xhGt2EChUZlsVsIx8eRSmH5cvT0aB9swBEODKChAfX1Ym/E4gh1DRj5ShkwTJ+wO0dIjtDv9Pdj2TIcO+Z2OxhQCY1a5Qi5D4nHmVbDZwwJ6n3AGeGuBi/D7DlCqRByjpBCo57AbiHkEsJtbXY5wlQKVVVGHKHewaxwFq3rVaOcEErln/ALx49j0SKDPaDDqBfLWOIIR0ZKGxuxRO2UFj4VYZMjFK0/zh4ajcXEnYZJIaRiGSuxWwi5so7mZvT2ah8sO/ZUd4ScEDY06M4R6q381qyZ5nFMCBMJhEJ23dOEfUxMYGICs2cbjIk5jEpo1CpHODKCmhqArY9md4QOCKFsVyAr1fG4fGjU2JZwIEdoLVLDbi3Dw6iuZl3oQXbsqekIq6tl4uyajlDvXGB+oVEYcoQW7keYyyGXKz2N0hEA4X36+9HQYNwKOIwDVaNcLwG2PprREWpuGmoMqSM0GRo17M/KrVjmH//xHxe8y/ve9z7+9ccee2zu3LmVlZUXX3zxMduSCXY7Qu6fzbg9mOzYk8URVlWJP99WRxiLlSbsyyI7G9LC68zvDwxMm0Hx17/i0CFrTkHYyvHjmDHDN0LoQNWo3tCo9x2hphByW8fU1Bj3Z4aLZezbrNGUEHZ3d3/+859/9tlnn3322fvuu497saen55prrvn5z38+MDDQ3Nz8T//0TxY0Uw67HSF3i5sRQnUJGRlBVRWSSUxMTJuVZYcjFD0ASl2A3VWjwsXEeSEcHMSpp+I//9OaUxC2wpcL+kIIHagaFQohS2iUMUdoR7EMoyOUtjAcRrE41Uel04jFEA6bcoTGhNBwMFaTsPYhqjQ1Nc2fP1/4yq9+9aszzjjjvPPOA3DrrbcuXbp0eHi4houjW0o4jEIBhYL8fmPm0esIjeUIA4HSwKq2tvQ6iyM0XCyDd1PfsqewO0coK4R/+xvCYWzdas0pCFvhblr7+iNrcaBqVJgjtMoR2rS0tNQRSpM+k5OQ7ao518F1Gtw9ABMZO8PFMvaNwMxqyBe/+MVZs2ZddNFFb7zxBvfK7t27V6xYwf08f/78cDh88OBBk2dRwlZTqMsRGssRcveTKDrKUjVqePoEtByhY0LY2Ii+PgD429/wgQ9g2zZrTkHYyugoqqqMTyBzGAeqRnXlCBkdoYVzHIUYLpbB9MJR7h6AiYydGUdokxCacoRf+cpX5s+fH4lEfvGLX1xwwQXbtm2bNWvW4OBga2srf0x1dfWAQlFEb2/v66+/HhDML7377ruvvPJK/tdRLeMdiVQODKSrq7VWdDBEf3+spqYYDucHB2OplIbyDA9Hg8FAKjVNlicmApOTyVRK/lsMDMTnzMmnUtnKymRPT6aurpS4GxyMtbYWU6mS+GSz2Xw+nxVYy0AgnEpFUinWZ2VwMBKJhFKp0o0cjSYHBjJVVTJ5wlQqCoi/RbEYHR0Vv2iMY8dC8XjpYtbWRo8cCaRSE2+/HT/nnPymTfFjx0YTCcV/pebNcCIwOTkJIGVTwQADfX2RWCwUCEyOjFQo3dgOMDY2lsvlglqxoJGRWH391KMkpFgMj47qeIiU6OuLxuOBVGoiGo0eP67xmAwOhsJh7c4kFIoNDso3W4Suh+L48XAkMvWVA4FIKjXVLXCk0/FCIZ9KiQNZsVjl8ePpSKQIoLc3lEjEUqmxYDA4MpJIpXTnMzOZimx2IpXSvUxfOIyhoSrR/c89FFFlaY3H4xEtB2pKCC+44ALuh1tuueXJJ598+umnb7jhhoaGBmFDh4eHGxsbZd/e3Nx82mmnvfrqqyqnqOLGHgrEYohGK1UPMU4mg5NOQnMzxsY0mgGgWER1Naqqpv0z6uqQyym+N5NBU1OkqipeU4N8Pskflcuhvh5VVaWBGSeEccHItr4e2ax2k3gKBa7Eq3QrJBIIhZJK766qEn+LykoMDopfNEx1danlc+bgzTdRVRU9dAhXXx2ZMQOZTGVTk9p72b9yucI97S5eh2wW9fVobo6wPBT2EQwGE4mEphAWCtz9JuNx1J9NdiYn0dCAqqpoQwMOHtR4TEIhVFRon7SmBoWCfLOlsH+Fd/uo0vG1tcjnp7oFjkIBNTWRqiqxjxb2tPk8amtRVVXV3Ix02sg1zOdRV1dh4NpXVSEUQihUJczsaAohC5al14LBYLFYBLB48eItW7ZwL+7evbtYLM6ZM8eqs4hwIDRaU8M0fUI2G6EeVOR33xVFXzVzhHpTCCxJcg6l6bRWXWRhS/gJmvv2YcECNDbSoms+gAtu27ctnLU4EBoVxgmtmkdo4V6JQsbHtSfUK7VQmE8xHxo1nCOEbWlC40I4MjLywAMPHD169NixY3fcccc777zz/ve/H8BVV131xhtvPPnkk6lU6l/+5V8uu+wy+0aO0aiNQjg6imTSVI5Qfd8GXvCqq6fdT3asLMOYI2QpnjaDcEYjJ4SZDPr7MWsWZswgIfQBXCcYjaJY9NBuoEqoF8tYIjapVGk4yzLngVEIbcoRstQKKLVQ2AkIv/L4uJGNMspKCIvF4n333bd27dqTTz7597///aZNm+bNmwegsbHxf//3f2+55ZYFCxYAuOuuuyxrrIRYzMankZv0xrj5n9L0CfXdJzjBkxbLWDuPUPQAqAib3dMnRELY3Y09ezB/PoJBzJhRqp0hvAzfCfrCFDowj5C3Ryyz4Bkn1Fu4abAQUfW4rNyyFMvwVX6BACoqjNwGhotlALtWZzSeI6ypqfnDH/4g+6eLLrrooosuMvzJ7NjqCDkh5MIUxaLGmvGyY89wGLmc4nt5RyiKMLCERvU6QmHuzUDVqIWOkJfkmTNx7Bi2bMHixQDIEfoDvt/nBoj19W43SBX1lWUsEUKhPdJUL3dDo1Y5Qv4ewLu3AVc3y44ZIeSrza3Fx0uswRFHGAwiGtW+L2XHnoGA2lRCoSO0NTRqcvqEhRdZ6AjDYcybh6eewpIlAAmhTxD2++QIIVAFltAouyO0afqEcITNvrIMpi83yjtCGL0NSAgtxtZV1nhBYrnFldawUGmh0BEKbya7J9S7OI9Q1JKTTsKTT+I97wGA2lqmoiTCXYSO0PtC6MCEen5kwBIaZc8RemplGSjkCGF0NTgzQtjUZMsWYP4WQlurRvmFMVn+2aKbjEdFRXihFU3F1XSE3DOsuR02j0hZpZuq8DAuuWsYUfrz7/4OhQIuvBCwcxVBwkL4e4kxd+4uDjtCTfVy1xFKI0PsVaOyE+ph9DZgvA6ykCOUwVZHKBRCzVtcSQhVVIRXBb2OMBhEJKJDnETKqrdq1KZiGQDXXIPNm0sPFQmhLxCGSXzhCJWEMBwGgFzO7CnsqBq1KUcoLZaR9gNKEiXUZpEjNHAbGF50GySEstjnCIvFqV7bDkc4Po5IBKEQoN8RQmeqX6Ss0t3FeByoGhVdpXcX4yMh9Af8Q+EXR6jiPCwxhXzCzNqqUa85QqE2m3SEk5MIhTRqD1VobqbQqAT7HOH4OKLRklCx3OJ6hVAoTsJimXweExPyHyVE16PC7ggdDo0KISH0Bfx9a9NWQdai4ghhxVTCbBaFQukUjKFRd3OEhqdPCJtk0hEyLriqRGsrenqMv10JEkJ5hDvnsdziSl28ihDyny+sO+Be1xwu6RrMcisDsLzXwGZSuiAh9Dv8oMqmHRKsRVMITY7whPWToRDCYY0PVMlZCrFqaocI0dPHfX1RqQFjaFRYNap3PGQmQQigpYWEUIJ9oVGREGqOepQeOaUWCm9KoSMUnlcFXWNG6QPgkapRITU1JIQ+gL+XfCGE6n2u+Qik0BuBoaPwVGiUmxgm6p2U1nwR/ruFe8gYKB42UzIKoLYWExPWXx8SQnkMOEJdoVFhuFIohMKbTAWbQqOyD6pNa42KIEfofXI5FAqlXswXQqjpCE0aL6E3AkNHoTKdQ4h9QigaZEtPpCTVwhyhSUdoUghhjykkIZRH6KIY5xHqqhpVcoSiMKYSJotldAmhrcUyPBUVmJxUW5GOcB3hjeR9IcznUSiorWlpXgiFZSNgKCZwNzQqjTZJs6RKQwdhCErkCA2ERk0K4axZ1i83anaHenexVQj5LlvzmZ+Y4DYHkfmTiiPkP18UGrXWEebzyGan3dwGhNABR4h3p5HU1VlzLsJyhJbC+0Koab8sd4QsHQWLIwwGS+lGM7k0KVIhNOYIhfLvfLEMgCeeQE2NqU+QQo5QHl3PvEr/zhIajUQQiZTuM1HWQQn2Z5iznsLqG5WL5mKxDHxSiHgiI3SENoXvLEQpSMPjvBCqh2qtbZsUabRJdJaJCUQikN3kkf93ZzKIREqzMOFGsQxgvQqChFAJobaZEUKlForeUl1dWmDM8mIZqfaodGF2rzWq3jeJ5lMSXkNvvsBdWByh5cUyljhCWGG4//IX/OY3U79y+V3R2UUz91Wax7dHpP0GtiQ0nyO0A98LoR3BdEx/5jVVx5gjFOoTvyWh5aFR6To13iyWgU/maJ/I+C40qu4IzafibAqNwgqR/slP8OUvT82OkF2vStSNqBhWvg8cHp6214SxCfUkhBZjfiaQEkKhsik0KnwLvyUhe9Uo4zMs/UC9QsjlPvN5ptOpUCxqhIZ8sY7ziYyuh8J1NOOQrhTLMAqh+cjzc8+htxeHDpV+lQ01ic6i7gi5I0dGxEKo95k1XyxjB/4WQo8Uy6hMj1MJjYocIS+EjKFRxucklRLvFqZ3HiEsus7cAyCbgeDwxfKVJzK6HgrXYRFCk2IzMmKXIzTpVkdGMDGBNWuwf3/pFdmFG0VdAaMjFKboXCmWsQMSQnlEg1/1B0ZlVoDe0KhowKWELiEUPqtQfv4nJxEOywuVJddZPS4KcoSeRzh6KwMhNB8aFT2tVs0jhGlH2NWF9nYsWDAlhCyOUOWK8f9u846QQqPWY1+OUNczr7JMttLcA6XQqGjApQT7cyIatELZEaoMVy2pYWMRQsoRehkKjYoQqQKLI2SsGrVECOfPx759pVcYhVCpB+BDVqIOylholByhxXgkR6iycZJSyaXUEdokhLKOUK8QWuIIVXwzh6dCo93dbrfAe1BoVIToabU2NGqmbUePor0ds2ejq6v0CkuxjIpO8x2U1BFSsYz7eCRHqO4IZYVQlCOsrcXQEOCIECpFhOwWQh+FRru7MWcOOjrcbofHEN60Nu2QYCHOhEZ1CaGTodG2NrS2To3npP0AJA1WaV4yiYkJ5HLir5xIYGJCXyUdFctYjzM5Qs1nXsURqoRGhW+pqystGuSuI1S6QU+00OgrryCbxSOPuN0Oj6Erce46DoRGRXMJrFpiDaaF8PhxNDRMW5NTtvhAJIQqzQsEStN8RZ8TCOieUUrFMtZj64R6XcUySo5QJTQqVIX6egwMAPYIIWPVqAOOUGVZGTCERtNpC2ZxsPDGG1i5cqrQgOAQ3rSxWGk3Pjvo7MR3v2v2Q7wWGi0WdWiASSEcGEB9PVpaphyhrBCKhvjqV4yLjg4OijsovYEc9uV1nISEUB4Lc4SyquOiI4xG5bswL4RG1YeW112H//gPs81g4eBBbNhAQihGOJQJBBCP2xUdve02fPvbZgc9rlSNqtzAXFU2487slghhQwNGR0sDcVFIk4M9NIp3N0rr78eMGdNe5wv9GGGPDzuJ74XQgZVlzOQIlcp5RPaors4uRyitGg0E5IXN9WIZzcjSCy/gZz8z2wwWOjtx1lk4cMCJc/kI0ejNvuhoRwcmJrB9u6kPyWScCI2KJtWpdBTscVFYIYR1dQgE0NSE3l5Arh+AntAo3nWEx4+LhVDvBmq6roNj+FsIba0a5XttbuQo2spZiIojVHrYRH1KfT0GB1EoYHTU4nmEQ0OorWV6u8oNasmAQzM0qu4Iu7oC2Sw6O53YqqmzE2vWIJ22a5jlU0RDGfvqZQ4exDnnYOtWUx/C4gjNiM3YGMLhaWl1dUeoKcyitpm5tpwjBNDcXEoTKjlCxnmEeHc9ZKkj5OdAM0KO0HqcyRFyUSCVZ0bdEbKHRgcGUFMztbK7CuzPMJc2l7ZK+naVx8CSAYdmaFS9H+nqCi5YgJYWdHaabYk6+Tx6e9HWhhkz0N9v77n8hWgoY9MMiqEhFApYuRJHj5r6HLt3n+DFhkf9BtZsjxBLQqMAWlpKjlBU18MhDY1qOkLzoVFyhNbjTI4QWgM08znChgYcP47eXjQ3MzVPlxCKHlelt6uMWB2bR6jSj3R3B1pbMXs2Dh822xJ1jh1DbS0iETQ0kBBOw5nQ6MGDmDsXbW1mp3JqDrxMFstIhVA9tq/LEZq8toODU46QD41qCqH6Lmlc6Q3/yTx6Q6NULGM9duzaxSHqtdUHvwZyhKJ7LplENIodO6wXwoEBGUcoWyagMmJ1JjSqLoS9vUFOCI8cMdsSdY4dQ1MTADQ2khBOw5nQaE8PWlrQ2mrWEWoKocliGc86Qu5LcefSK4QqLWxvx9atSCYRiUx73YAQUmjUYswXQCshHfyqO0KToVEAM2eio8NiIcznMTLCmiO0OzRq0hH29ARaW6dNjbIJXggpNCpC10NhGC74JpwMbgwWR2hGCKWxFvViGc32CDEjhMISHl4IBwdl+gHRf1B9qNrejpdewty54tf15ggpNGo93CLRdlRPSNMhKvelypYRsl6qUJC5G/QKIUsfNDSE6urSPkqit+sSQsfmEWoKIRdDthUSQiWcCY1ydYnmRzwsjtDa0KimI3SmWEYohLyx7usr3dUqZ1EPjba3Y/duLFkifp2mT3gCO6KjhQKy2Wn/LfXBr8omgrJeissWiGYUzZqF116TGXDJwtgHySYIYShH6MDKMur9SH9/YMYMJ4SQ7zIoRyhCNJSxKTTa34+GBgsuPosQmqzMFCUdYjHk88jlDLZH1DZLHGF7O7q6kM9jcFAmRaIrNDpvHgIBGSGk6ROewI7o6NiYWKjMCKFUQmRHXmvWIJXC+vVMLYxGUSgoPnI83d1obZV5XckRKj0GzoRGuXULlRYrGRoKcHOEHXCEjY0AUFdXWgCW4HAmNMo5wvr6UvmoYVjmrVrrCKFaL+NYsYxUCI8fly9H1xUanT0bP/whPvAB8eu1taXFQBihYhlbML88hBSpUDkghFdcgVWrsGYNayNZuiGuAE+KN0OjgYDaIH1w0Dkh5BxhTQ2Gh+09l79wMkcYDqOy0tT1tzs02tuLlhbxiyppQseKZYRC2NaG3l709MjERSGZuaseGgXwmc9g7Vrxi/zykIzQNky2YEdoVNplGxZCWQmRveHq6rBli7giSwUVzTh8GDffjNFRHDqEOXNkDjAwj9C87dYcoUN1uVFOCOvrnQiNco6Q3xKE4HDMEXJBPL09rAhNIYzFkMsZX8iNq24VoRLe1zuh3owQ8gWikQjq6vDOO/JCKNo7guUJlaL33+TNHCHD5G1vY1NolF0IuXU7VSREqtOa3ogFlSbdfTfuugvV1Th4EGecIXOAUo5QNo4Ki2w3S45EpR8ZGgrU1SGfd04IyREKmZxEMDgtvGbfhHquvpFz/wsWGPwclqeM6z2URrHqyOYdVFag1usILSmWAXDSSXj2WbS3yxzJ7x3BCaexfsmAI6TQqPXYFBoV3bIqz7xKySgUhFBlAj47KlmEp5/GHXfgxz/Ga69h5UqZA/TmCE0GkThYHjOlVdZGRxEOF2MxJ/J25AhlkY4O1WcLGIYXQpPun2XgZebGlnWEKkLoSo4QwMqV+PWv5fsBTG+wZmhUFm55SHYoR2gLdoRGpRPk1YVQZUTJbcMkWqdUZQI+O0pNKhaxZw8+9jHMm4dUCuvWyRyjNKFeTpB7IQAAIABJREFUl6/VC8tjphQa5QsTKiqQz9u1nBAHCaEsehPnhhE6QltDozChN9kshobEi40BpU37ZNHlCM1cW9Hc+VWrkEph9Wr5g0VCaCA0WluLVKoUXz1yBN/5jka0mXKEtmBHaFTq2AwLYSCASES8JaHKBHx2lIInR46gpgZVVdi0Cc89J7/ti95iGUscIaMQyjrCwUHU1pZGE5ZHLF95ZerbTU4ikyl1xBQaFeKMEBaLU8tDmxyI2OoIu7rQ0oKgpPtUd4R6i2VUFvpXQSSEH/84br9dPkWC6UNPY6HRYBDV1aX/1I9+hJtvxtNPqx1PjtAWbAqNioRKJXelLoSQs1OWCKFSN7RnD046CQASCSxeLP9eWRFVCd1YIoQsAWGl0OjwMKqrS72CtUbt2Wdxxhl46KHSr319mDGjNHrgNmAz1hmVH7L5Al1bk7MwOop4vJSJ5DfpNIatQrh/P+bPl3m9qsqa0GgwiFjMYNtEG00kEvjSlxT7KPOhUQBNTTh2DAB++1tceinefFPtYF0DAsfwvRDaFBqVpkMMC6FUdawSQtnn5MgR+UpRIbLZHfV5hI45Qtl+ZGgINTW2OMJXX8XChXjiidKvwpr4cBjxuL7dt8sYZxyhcNcwM0KYy6FY1K7BNlyToiSEKqFRvX7LcApWdqMJJXghLBaN90vcbMXhYXR24hOfwObNikcWi1QsYw+WmBURsqFRJSGUbgEvQqpYtjpCpUn0mu9VGalZYrtZMqNKAw77HOHmzfjsZ6fGsD0901a507tqRhnjjBAKCz3M/KMZ69EM5whVhFBp5KS3RM7w5ZVdX1sJvsGZDKJRpj3gpMycic5OdHRgzRosXYr9+xWPzGQQi8nna9zF90LoTLGMyugsldK47aQ3tBeEUKo3Ko7N/GijWGQqFlAJjfL9o7WOcPduvP/9GB0t1WWIZkmTEPLoeigMY5UjZHzEDN/YO3eWEhAiVIRQb4mcuhBOTuL667F3r0wHbkwINQf0KnBCuHkz1q7FrFlqO4ZaMnPMDspBCB1whCqh0ZERjRvIvtCokhC2tWm8V7YLUxFC86MN6ap1Sg3TDI1a6wg7OzFrFlasKO2HLqqJLz8h7OjAyy8beaP0pvW4I7RVCLdtw4oVMq+r5AitdYS/+x1++lM8+aSMgzMmhJr9mApCIUwmEYspznvxZoIQZSCEdiyBr6tYxlho1JJ5hLJN8qYjZMzDK13nkRFUVVmfIxwYQDSKykosW4YdO4ATQAgvughf/aqRNzovhGYcIaP9MlbvMz6Ozk4sWiTzJ5UcoQFHqNK2LVuwahVeeEGys4ykWEYd/mky4wiXL8fmzXj5ZZx2GgDMmqW4aSgJoV3Y8TRaniO0wxEqRRGV1hUUIusIVeTZEiFk+cpKX0roCC0UpyNHMGsWACxZgp07S68I1+AoMyE8cgT5PP72N/F8HhZkhdDyqlGhm9G7mrMQxkfMWHR32zYsXCifTnPMEW7dissvlwmNFgpIp3WslcPbbjNCeOqp2LYN1dWlvGl7u2J01NhURQcgIZRBVzpEMxBhU2hUKYrY31+aD66CXkdoPv7M6AiVBtTCYhkLHWFnZ0n2Fi8uCeGBA9OWKedmUJQNb72FU0/FnDmlL6sL6U2rvm2WMUSO0O7QqDEtf/ttrFol/6fqasWbU68jVBdpLrfd0xMU7caaSiGZlJngqIQljjAWw1134a67Sr/ysymkeDZH6Pu1Rm0SQvYcoaccITcfXDMwIn3GuL2CVaZPcOvjGC73YhwOKw2ohf2jhS7t2LFSjeiyZdi2DQAOHsS8eVMHlJkj3LsXS5YgFMKhQ4pduRKyifOxMVN3hRThsLK6Guk08nmZnaU1YbzfjDnCt9/GySfL/0lllGatI+zqwty5aGoqHDkSFNavitZX08QSRwjghhumfm5qQl+f/GEUGrULZ0KjlucIbXKE3Kammh2TdCDM3aBKbwwEzO7Na60jtFAIOfc8dy5GRrBvH4rFaZvMqQzw/UhXF9rbMXu2YgpHBelNGwohGrW4ZlsohMIlS/TCHho14Ah37MDy5fJ/Urk5LawazWSQyaC+HnPnFg8enPYnt4RQSGOjmiMkIbQFm4SQPR2iOX1CGhq15J6TdYTcwiiaSAfCmkJlcjtv9hyhkiPkhdBCceI3ow8EsGoVfvELLFs27YDqasXaBz/S2YmZM9VqGVSQlRaVbbOMIerHDdfL2Boa3blTZqN2DgsdoYpIHz2KtjYEAmhtLRw9Ou1PZoSQvdZUHZXQKOUI7cIOIZQuFhOPI5+HKBzPoVl2LG3h6KgFQqjkCDUThADicWSz09bG1RRCk5PGGDumqip3HCGA970Pd92Fs86adkC5OsLDh3W/V/Y/qFTcZBhRxaPhGRSMAy8Dd3U6jb4+xcWblG4YrvfQtaKKypTErq7SFKmWlmJPz7Q/6RVCXrkHBqZmcJpEPTTqzRwhCaEMsmVXKmZF/c6ThkZTKYNboInaI+2DuN29WRBdN83hqskSQfXNqngYc4QWOkJeCC+/HE1N+Id/mHZAmeUIOUfY0oLubt3vVXKE1gqhaHkwDzrCffswf75iNUoyiWxWZsTMOSFdyVQVIeSnSLW0FEX/SsOOkL3r0KSxkXKEjuOMIwRbHy2LtIWWhEZl+yB+d29NRI+Z3Y5Qc0VWvlVSR5jNYnISyaT1jpAPjQJYsgR79oh3rSozIeztRXOzWuRKBWdCoyJHaLcQGrirDx6cVlcsRXagpmtKA4fKteUjGc3NZoWwrg4jI8jnrRTChgb098v/iYTQLmwSQtkokFLUTlMIhYpVKCCTsatYRpcQCr8OixCadIQsHYHsaEPkEix0hFxtkQrlNH0ilUIwiIoKK4XQ8tCoVY6QMehi4K4+cGBaXbEU2TShgbGviiPkIxnNzQWTQhgOo64O/f0WC6HSyjKW1AnaAQmhDOyOMJfD+LjGIyd64+goKip0TPRRQrYPYhdCUTZOc8RqMjTKOCKOxVAoiKd7i55tpeiTAQYGNC5XOeUIefs7YwaGhjR2T5Ui+x+0IzQq/F+rdKnqMJZ+GLirNR2hbF7TwAJmLELY2Fjs7Z32J71CCKC5Gb29VgphVVWpY5TCmCJxHhJCMfk8Jidl/LusI+Tub/XQv+iNllTKKLXHsBBqjlidCY1CbsAhfbYt0aeJCUxMaHzrcgqN8vG0UKhkAnQh67Hsrho1LISMwmPgrj58WGObs/p6mTYbqMlUcdv8mKapSSyEwlXLGWlpQU8Pjh+3TAihcBFgKETsDCSEYrgxi1TbZAdoLOMvvZLDSDSKUEhchmOrEDpQLCNtGOSebUsWlxkYQH29xiCmnIRQWBmkMtNLCdk7xNrQaCaDcBjR6NQrdjtCA0LOVd6qINtmax0hP6apqyumUtOiIwMDqKvTd6KWFnR2YnCQtetgQekfR47QLriazELBsg9UGrMopa9YhFD4RktKRjmk3bQuIRS1Su8kEF2wO0Kp27NJCFmuFTePsDw2qT92bKoyqLFRtyOUjWRY6wilO8ra7QhVlgZVwpgQGhj+qlxbfpZUMIgZM6aNaQYHdQthayteegkzZ2rvY8yOihCSI7SFYNDsXG8RSv8q2VAkixCK3mjhCg4mhdBhR8j4AEhFTlYIzRu148enLSIjSyiERKJMNqkXJoFmzNAnhLkcslmZfIG1Cw5InyalCJsmjI5QZbMIWfJ5HDs2bX8SKUqO0EBoVEUI+X+lqPTJgBAuX47f/EZ+e0XDKAkhhUZtRO/drI6SeZe9L1ki8iLJMZDNVkLaDWmWQSq1isUROlAsAzmRc9ERWnUuLyBMAqkUuMuiNI6pqrIydCx9NFgc4be/jV27xC8yOsJYDAAmJlhbeOwYGho0nJNVjlAp7FwoYHBwagzX3CwWQs3hnYhTTsHgIBYv1vcudRoaSjtdi6DQqI2oDJ0MoFTMIrvoCcv4SxR+MZDNVkLkCLNZjI2xfrhen2q+WIbxAWAJjVpSLKNZMsph7T7ALiIcJOl1hEq3h9JKQMaQbqTX2KghhH/+M77zHdx4o8xHMTowXdHRo0e1N/tUEkK9jlDp2g4OoqpqahMoruZT+Fe9jnDJElx3Hf7v/9X3LnXIEbqAgUC/CkqPkGzdBMttx+k0n2eyTwi5PDnj6hVSR6h+g5rMBrGPiBlDo1YVyxhoj08ROsIZM/SFHJVuD2uFcGhIJjQ6Oqq2e+Jvf4t/+ids3jzt5iwUMDbG2uHqiieJ9m2WRTb/aqBYJpnE+DhyOfHrovLOlpYpISwUMDKiu3sJhXDPPVi4UN+71FGKaZMjtBFrHaGSEMp2iCxCGAohFpuyU/YJIXtcVPpezRGryS6PfYQuDY1KL7JVodETSgiFt4eB0KhsP25tjlD6aAQCGgWuzz+PD30Ia9bg9denXtQ1VVfXMJpFCNvaZFawM5AQCQTkRVr0mAsd4fAwkkkju1ZZjlJolByhjVibI7RcCDFdRSwUQlGGRtdMINGaHZqO0DEhlDpv6RWzJFx5ooVGRY5Qb2jUgRyh7KMhCv0JGR3FgQM4+WSsXo2tW6de1xUe1HVjswhha6uMEDKGH0TIFoWJZr4Lr49whoy70PQJF7DcEcoOfs0IobAztVAIRU3S5QhFQqg5YjUz9tcVqpLm/6SdiOGVt4ScyI7QQGjUgRyhXiHs6MCqVYhEpvZV5tClOpaHRhsakEqJC3CMCaFsLlw03vWmEKqERq2qmbeWchBCZ3KEZoSwvn4qUGBh1Wht7TQ90LVIksjoaH4RM11eKoVkkjVUJXVgUsUiR6iXfB7Dw1OXUW9oVOmmdUAIuXVPZHnzTZx6KgAsW4bt26de1zWpXFfv0durLYSBAJqbxW02LIRSRyjac1R4fbwjhLKOcGwMkYiVsxUtpByE0PuhUaGDsdARCvUV02dM62oSGPoOM0EwXZOoRF8KcopllRCy9E3lsbjM4CBqaqayR3odoZIQ2p0jBDBz5rTdE4X5wjffxNq1ALBoEfbsmXpd1xQCvaHR5mbtw9ra0NU17RULhVA03hWeS1cPYCuyN5iFHsByykEIXXSEjOE1oeowvoUFkWboGg8KtSSfRzqtcY+aGfubEcJiUaZfsyQ0yhhJtuRcriP6slVVpaVWGVEavVm7KLnsWebOxcGDpZ8ffRTt7bjlltKvr76K004DgJYWpNNTmqFLdWpqdAyquH2sNJk3D/v3T/1aLBrPEUovr0gI6+uRyZSWWvSOI6yvx+CgeMEv6cpB3qEchNDap1GXEDJGI4WdqYU3K3e38egaD9bUIJUq3alDQ6iu1ghdmhn7mxFCrhCOnzXFYYkjZJxQX1cnX//mL0Q3aiCgb/Uypf9gRQXyeR2Cqo6mEH7963jgAdxzDw4dCuzfj0KhVPQfCGDBAuzbVzpMrxCy9x6MQjh//jQhHB1FLDZtDVVGWBxhIDBlCoX7a7pLOIyqKvEIkhyhvVibxVF65uNxBALTFrnO5zEywuoIuc60WLRylXczodFQCMlk6TFjyamIZkPqwowQyhpo8//xVArRKOJxpvaUgSOU3nW60oQqXZiFT9/goJoQ/vWvyGbx0Y/ik5/ED38Y+d3vAhs2TB3mgBCOj2NigimvsWDBNCE0/MgzDr7b20tC2NmpsQ6qk0grk0kI7cXauj7Zp5FD1EcPDKC2lqkGhO9MBweRTBoZG7K0R6/X5OP4LDkVblsAY4vL6HoA6uowPDwVVJEtaRHaWWOwV9iWZWgUOmdQDA8rPhQWCqHs/3r2bAwOYmgIjz2Gv/97APjCF/Dww+E77wxcc83UYQsXTgmh4RyBOr29rAPNhQuxe/fUr93d2uvRyCLNl0Ow4jYPn0Y9cgSzZxs5kR2QEDqNtY5QRRVE0ST2Kk1ecqwN4oueE5aSNiF84TVjyY/hshFd87pCIVRWTo1sZKM9oZBM4EUX7IN02c7Id0jv1cZG9PWxvl265guPtUIoffRCIaxZg82b8dhj+MhHAKC5Gf/7vxPf+EbxnHOmDhM6Ql3Cwz6MZn++Vq7Etm1T4ROWhdlkkQ3L83sw8fDf/cgRzJpl5ER2IK2XISG0F8ccoVQIGV0FP8fWWiHk9k3kVubNZjE8rO/DeSFkzHwY9kZ61z8ULkuh1DalpSsYOdEcofTG07UTkwOh0VQKkUhpFWwRZ56J225DMFiqEQXw3vfmP/7xaWH6BQuwd2/p5+5utLWxnleXI2R5TLjPrK3FgQOlX48e1dEeIdJB2Pg4MhlxB7VwIfbuxeQkBgb0DYVtRbokEAmhvVgohPk8Rkd1CCGj8LS24uhRQL9p04SfRdTdjaYm1rl6HLwQ9vQwjVgdE0LhHGEVITS2QQ8HuyOsqcHoKPJ54+fyAlJjrcsRqowOrRJClWmdn/0s+vtx++1q6+guWjRNCO1whCyz6XnWrMGbb061x7AQip44rg5AdB24QcDevZgzR18PYCuibTFg6cwxy/HMZTOBhcGZ4WFUVSneTKLlEthVjXeEhw5ZHMTnhfDoUd15cn4nM8aOw7AQ6t012wEhlMaXlAgGUV3te1Mo/b66hFBFpSwUQqWURGsrdu7EJZeovX3WLAwMlFboHhnRscQSe/t1CeEZZ+CVV0o/G65hkTpC2YK45cuxfTs2b8bJJxs5i000NYmXBNK19JXDlIMQWugI1b2LKBzH/mDU1WFiApkMDh+2Xgg5ie3q0j3q5Ne/6O5m+iKGuzy9e6QJF+ZQKoU1L4TsFbZ6V+b0INLQ6IwZrEJYKGB4WPG5sCp0bHJ+bTCIk07Crl3o7ERrqw5jxD49hj00CuCss/CXv5R+3rULixaxvlEIoxDW1mLuXNx7L1avNnIWm5CujWdhwbzllIMQVlSgWJw2scEw6kIoSqvoGiG2t+PIERw6hDlzTLVQRGtrSTOOHMHMmfreO2sWDh0CvBcaFe4soyTShvcu59CVrNVlnryJ9Ps2NbF+KW4DPKU9DfSu1qYE47ROFZYtw9at2LlT3x6zdXUYGWEKfet63tetQ2dnKSGyaxeWLNHRJB5pIvzYMXkx/tCH8NJLpWIij8AHnHjIEdqOVU+jehBPtOyhrgdjyRLs2IEDBzB3rpkGimltLU0h2rcP8+frey9fbHbwIJNPdTJHyF9nJYHXu0iYCF2OUFddiTeR5giFow111Bdltcoum18ebO1abN6sW3VCIdTUMJlCXanHUAgXX4zHH0dnJxIJ3ZvlclRWlhas51Gqu7n1Vjz1lEG5tQlyhC5gslvkUTcKog1WdAnh8uXo6MDevVi+3FQLRfDFcvv2YcECfe+dNw+HDyOVQl8fk081LIR6R4L8BOFiEZ2d8hXh0gyELvSGRn3tCIeHEYmgomLai9KFoZVQD1paJYTmV0U59VS89hq2bNH9iDGG2fXOgrjiCtx/P557Dmeeqa89QkRyoiSE0Sg2bjR+FjuQ7stIjtB2LHwaVYSQT8hxHDmiIwe+ejXuvx9Ll8oXiBuGX27YgBAmEmhowHPPYeFCppyK4bSc3j5u7txS6XlvL6qrkUjIHCMNvNjXJL+HRmVD33V1GBtjWh1NPWhpoSM0ObOIi0b++td4//v1vZFlGF0ssmYQeDZuRCaDr30NH/6wvvYIEY1XDM/EcJ76ekxMTLOz5Ahtx6rQqKYj5G/KyUkcP67jwbj0UoyOQrgWhiVwC2qMjqKrS7cQAjj9dNx5J2uxmfpe4UqMjCAclhczJebNw8GDKBZx+LCiVTUphLo6Nb+HRmVDF4EAq6s+flztobAqGGM+NBqJ4Dvfwec+p7sejaX3OH4cySTTmnw8wSCefBI334wrr9TXHiGiCLaPhBDTd8YYGEBFhb4L6CRh7UP8gIVP47p1in+trS2NcSoqcOQI2toUKwikJJPYvdv6yEB1NZqb8YtfYNUqIyu3bdiA667D5z/PdLAx7THQwVVWoqICx45h507FcjuV/Vo1GRpCNCoOFarQ3Dw1J8yPKMXwuU5WUzbUqyW9kyMEDA40WXoPY3MB587FZz5jpEk8ovvcQHG4i3A5Du4R9riEl4kjdCY0CmDOnFLUTsWsKGFTfPz88/Htb+Pss42895OfxDPP4NJLmQ52TAgBLF6MHTuwdStWrJA/wIwQ6k32SLMd/kKp8pZf50Ed9Vx4bW1pNWqTKNVDOgBL3ZCuPIiFCP9Hk5Po6/PQstqazJyJzs7SzwYmOjtJmQihyjbWutBMHfHryu/fj3nzLDijeT73ObS24v/9PyPvDQZx4YWse0ZzEUK9G1AYW1Vu7Vq8+SbeeQcrV8ofUFmJYNDgzlB6F0FmFAzP0tUl3wcJ+ykV1Hej5TZkNz9QcLGjFOX+ZXFrPevZs0tznAAcPoz2dh1RKNeZO3dqFw6Pe9kyEUKrxuya/n3+/NKUg+3bsXSpBWc0z4oVePNNJzqReByxmO61C/SWGHCcdhqeeQavvoozzlA8hrEfl6I3SiOqFvYdSlNQGC+g5gpK5q/P0BAiESSTpj7EMCztNzBP1xKE2zEePGjx5Cu7EW5HpTQa8whlIoSWjNmLRe1MAF+luWMHli0ze0bfISwXYsTYA3DppdiyBeecozYBi59loRe9i/RXV6NQwOiokXN5AaUpKOyOUF0IzQ9D3bULjELoiiOcM2fKEXonCsWIcEuQvXs93fjyEULzY/a+PlRXa0xvOOUUbN4MAG+9pZi+KmMMmLDOTiND6WQSHR149FGLG8NhYMXX9naD5/ICSsLPeAE1l8o0//S5axdYhneWrxLMyKxZ6OnB5CQA7NjhlSgUIwsXlmwDgD17cNJJrrZGlTIRwpYWHDtmaqdWsD2Na9Zg2za8/TaiUYsXS/MFM2fiyBF9bzHcx82erZG8NCyEBgqdhBEqf5HLobdX3m/xlV8qDA2hWNTYNIBbPtAMbgUeOdracPSoRu9hYOUmS4hEsGABdu4EoFY75k3a2pDPlwYZu3eTENpPJIIZM8xGR1mexooKrF+P66/33DoOzjBrlkOOkIXZsw2Kk4HRvTBCZZiJCdx991TWxBkOHUJrq/yQYvbsKbehBMsy8eZHCe4G/RIJ1NSomcLxcfT3uybVK1fi7bcB4J13fCaEAE4+GW+9haNHUSy6VhXMQpkIIYB587SHt+rs38806PvqV5HN4stfNnUun6LXERaLOHjQLusszECwUygYKTqwxBF+/ev44Q+xcSNyObMfxY7KkkPhMNrbNQTeGSE8cMAdv8Wj/hX278ecOa6Va3JbG+7ahUTC0/Umspx6Kl5+Ga+8gtNPd7spqpAQTsEY/Tj/fHR0uPzcugVfNMvI0aOorkZlpS2NMSaEhw9jxgzdBYrz55t1ciMj+OlP8cwzmDVLI/dpLepr7wnr+mRh8Wp+d4TQ+gp79hjcR8kSLrwQmzbh97/H+ee71gbDXHQRnnwSmzbh3HPdbooqZSWEJrsqA8t1nmjwRbOM7N2LhQvtasysWejrw/i4vncZy1UsXlzK0xjm8cdx9tloa8OnPoVf/tLUR+lC/ftym6KosGuX9uVqaUE6jZERI83jsPU+YYFfvF6W7dvdLBE/+WQkk7j1VnzqU661wTBnnIFAAI88go9/3O2mqFI+Qrh4MXbtMvUJu3e7Oe7zBbNmob9fx9aPe/bY2MGFQli0SLc+6d2vjmPxYuzda6oa67HH8NGPAsCHPoSXX7ZsK2lNtm5V241h+XJs26b29l27tC9XIKAtqCr09CAYtGB9NTMsW4bt2xX/um2bxZvG6IITkkcf9Xp0UZZgEE8/jR07zK6objflI4QrVmDrVuNvHx1FT4/Lw1LvEwphwQIdAw6VpWEsYcUKvPOOvrds2YJVq3SfqKICTU3GY+9jY3jhBXzgAwCQTOLss7Fpk8GP0ot6qeGyZRpCuHMn0y536kKijrt+i0O9/W+/be9trMnChbjwQjcbYIbWVh+kNstHCBcvxr59yGYNvn3rVixd6qfli9xi9Wr87W+sBxtTHXZWrtQthG+9hdWrjZzrlFPQ0WHkjQCefRbr1qGmpvTrBz+IJ580+FG66O5GNqtW7rh6Nd55R7F4p7cX4+NMtU7Ll+v+R/Bs2eKyzABYvBj798uvmJpOY/9+/5VrErooHyGMx7FoEbZsMfj2zZuxZo2lDSpT1qxhFcJCAVu2GFQdRtatw2uv6Tg+k8Hu3Qa1+T3vMS6Ev/0tPvjBqV8vvRS//73GvAVLeO01vPe9agdUVWHOHMVQSkcH3vMephOtW4c33tDdPI7XX8dppxl8r1UkEli8GG+9JfOnjg6sXMm6Hi/hU8pHCAGsX49XXjH43pdfVlvWkuB573vx8stMR77zDlpa7N2K87TT8Le/6VCU117DqlX6Nkfkee978eKLRt6YzeLJJ6ftztrcjKVL8cc/Gvk0XbzyioYQAjj9dMXv9dJLrBK1di22bDEo7a++6r4QAjjtNLz6qszrf/yjwa1dCB9RVkJ49tkGO5dCAX/5C93uTKxbh717MTiofeSf/mT7Ja2qwvLleOkl1uOffx7nnWfwXKefjq1bjdRGPvssFi8WxycvuwwPPmiwJew88ww2bNA4ZsMG/OEP8n96/nm8731MJ+L+EYwjJCE7dyIQ8ESR2vveh2eekXn9D3/wcX6OYKSshHDjRvz5zzpqGnneeAMNDZ5eE9Y7RCI4/3w89ZT2kb/9LS65xPb2XHIJnniC9eDHH2fdfFFKPI5zzmH64iLuvRdXXy1+8Yor8OSTGBoy2BgW9u9HX5/aRtMcF16IF1+UqWLt7MS+fToqFS++2Eji84kncPHFut9lBxs24LXXxNfh8GHs2UND5PLHFiHM5/ObNm2699579+iadGaa+nqcfjoee0z3G3/xC1x+uQ0NKlMuu0x7JtyBA9i2zYmh9BVX4KGHmIJyb7yByUmceqqpc+mdArh/P154AVdeKX69qQkXXYSf/cx4YzS57z5cfjmCWo94TQ02bMCvfiV+/f42KQ7DAAAgAElEQVT78fd/ryM3dsUVePBBfdVqxSLuv1/m4rhCdTUuvFB8HX72M1xxBSUITwCKNnDppZeecsopN9xwQ0NDwxNPPKF02Kuvvvre975X5XNGRkb0nvqpp4onn1zM53W8pbu7OGNGsatL76kcYnJyMpPJuN2KaYyPF9vaips3qx3z6U8Xv/xlK0+qcjNcdFHxv/9b+xP+7u+Kd91lqg3j48X29mJHh463XH558bbb5P+0bVuxpaXY36/j0772x6+FvxFmOXJwsNjUVNy1i+ljX3mlOGdOMZ2e9vaWluLWrTraViwWN2wo3nOPjuN/85vimjXFQkHfWYrF4ujoaF7XQ87G668XZ80q8jdaV1exsbG4b5/l57EMAz1k+TExMTExMWHyQ6wXwr/85S+tra2jo6PFYvGXv/zlypUrlY60Qwj/f3tnHtDUsTXwSQIoW4AACatsii3ihooLLogIaBVFsa9YLEtrrD4VabV9n/TVheKCVm219rV92lKXPmprqwICilDFHRWQHREBA4SwhQCJWe58f0x7X14SIGAgIPP762bumbln5s69JzP3zBwIobc3jItTV1gqhYGBcPv2PlxngBiEhhBCePIknDz5f16d8mRkQGtr2NSkySt20xlycyGTCZ886S77mTPQ1RWKRC+rRvcVV+CHH6Cra3fCH34Ily6FEom6V1fTEBIEfPttuGGDusVCCMPCYEgIFIshhFAkgoGBcOPGXmRH5ORAFgtWVqolzOVCBwd45UqvrwL7zRBCCN9/HwYEwLo6+OQJnDq1F28SrYANIRy0hvCjjz4KCwtDx+3t7VQqtaqqSqVkPxnCmhro5AS3bYMtLT1IPnkClyyBvr7wpZuxHxmchhBCuHYtnDYN3r37P4lCITx+HFpawmvXNHy57jvDt99COzv4++8qJgMEArh3L7Sygvn5mtFk7Vro6dnDuLClBcbEQFtbWFTUnZhY/GcPVHPspY4hrKqCq1ZBLy/Y2alWmYjOThgUBMeMgWvWQGdnGBLSx4fiq6+ggwNMTu5hnJeZCV1d4e7dfbkE7E9DKJHAbdsgnQ4tLeGBA30ZrQ4k2BBCDRlCHY3PtdbW1jr8tQTX0NDQ1NSUw+GMUrWDvVAorK2t3bNnD5mybNkyV7mdDSUSiaT3K+RZLJCdDbZvpzk4UN3c4Jgx0MICjBgBjI0hQYC2NopIBBoaQGEhhculrF8v++gjgkLp+0r8/kYikchkMtrgW+r/1VfgxAlqSAhVKASjRwM9PdDSAsrLKXPnwitXZG5uULNN2n1nCA8Ho0ZRPvmEtnYtZeJEaGkJDQ1BayuoqaEUF1MWLiSys4lRozSj0ldfge++owYFUXV1wYQJ0Mrqv7uKi8WgqQk8eUIpKqIEBhK3b8usrHroWufOgS+/pC5cSKXTwfjx0NoaGBoCY2OoUvgmAQkC7NkjU0gXCikCAWhoAEVFlOfPKWw2ceKETEenF71aRwckJoL79ymlpZSNG+HkyRCAvjwUa9eCUaMo27fT3nuPMmkStLeH5DYCAACBANTUgNxcipER2L2bWLGC6NsdkUgkOjo61B6/f/aJuDgQF/fn8UDGCekDfXtDvmKgFqBQKF0J0Gi0HrsKBULVj1yfWb16tYuLS2xsLPrJZDLPnz8/e/ZsZcn09PTw8PDVq1eTKcuWLZsm5+UmEAiMjY37rElHB3j0iPrsGYXHo0gkoK0N0Gh/xqC3tISurnD8eEJH8/8ENAwyhCNHjtS2Il1SXU2pqqJIJIBOB2PHEi9xx7pDzc5QV0cpKKA0NlIkEmBgAGxs4Pjx/aIShKC4mFJaSq2vB52dfz6EurqAwYBOTnDSJKJXAS4IAhQVUUpKqPX1lI4OIBCoFrs5Ysc9vfhogaJjtIEBMDL6s1dPmEAMBueO6mpKfj6Fw6G0t//3DWVoCG1tgZsb4eLyUq+djo4OfX39fjKEQ4iXfEO+GojFYgCAnp5eVwK6uro9DiQ0bwesra0bGhrQsVgsbm5utra2VilJp9MdHBwOHjzYVVESieRlDMDIkcDXt8+5Bws0Gm2QG0JX14GIPa1mZ3ByGrhlMB4ewMNDY6VNnQqmTu1B5p+Z1JxscPDgoP/71s+9Aj0R2BC+5Bvy1QB1g24MoVqFaEiZ/zJ//vyrV69KpVIAwJUrV0aNGuWEF+hhMBgMZrCieUO4aNEiBoOxYsWK+Ph4NpsdExOD/7hhMBgMZtCieRNFo9EyMzMXLVokEAjOnDnz7ktEk0xNTdWgYkOUqqqqwu4j5QwPMjIyxAOwTfXgBnnHaVsL7XPv3r3GxkZta6FlCIJI72pzvOFEeXn5y+/c0i9jNSMjo/Xr18fGxnp7e/e5EJFI9M4772hOqaHKhQsXEhIStK2F9tm2bduzZ8+0rYWWqa2tJV4mOvCrwhdffHGjbzugv0LweLwNGzZoWwvtk5iYmJiY+JKFDIGv7sMcPALAYJTBzwUGoZGegL/eYTAYDGZYgw0hBoPBYIY12pwabWlpKS0tXdhFwDSCICQSSVdnhw/V1dUikai4uFjbimiZ2traiIgIAwMDbSuiTUrppTQWDT8U+fn5lZWV33zzjbYV0SZisbi1tRV3hqdPnwIA7ty505VAUFBQjx9TNb+zjPp0dnYmJiba29t3JVBZWYnXILa1tYnFYot+DfQ+FHj27JmDg0M3GykNByQSCZfLtVMI8jv8qK2tZTAYeC05fkMCAFpaWgAAZmZmXQk4OTm5uLh0X4g2DSEGg8FgMFoHfyPEYDAYzLAGG0IMBoPBDGuwIcRgMBjMsAYbQgwGg8EMawbRzjI8Hi89Pd3AwCAgIEBfX19ZQCqVFhYWNjU1+fj4kIkPHz5sbm5GxwYGBrNmzRogdfsHCOEff/xRWVk5c+bM1157TaUMl8stLi52dnaWD3cskUjS09NR47wCXoUdHR2pqalisdjf35/BYKiUuX79ekVFxfTp093c3FBKaWlpTU0NKeDj4zPkNnzncDgZGRkMBsPf319XVVxBoVCYlpbW0dHh5+dnaWlJppeWlt66dcvR0dHb2/sV8K198OBBfn7+uHHjPD09VQrU1dVdvXrV1NTU398fheARiUTZ2dmkwOjRox0dHQdG236Cz+enpqZSqVR/f386na4sIJPJSktLa2trvb29deRiqyo3zpDmyZMn2dnZdnZ2XT3RQqEwPz+fSqXKh7PNysqS/hVY2crKyt3dvbtrvGSEe01RXFxsaWn59ttvL1y4cPz48QKBQEHg1q1b+vr6FhYWenp68uk+Pj4TJkzw9fX19fUNDw8fQJX7hYiIiNdff33dunWWlpZnz55VFvDz89PX1zc0NDx06BCZKJFI5s6dO3PmzMjISAaDcfPmzQFUWfO0tLS89tprAQEBISEhLBbryZMnyjJsNnvs2LHr1q1jMpkJCQkoMSoqytnZ2fcvJBLJwCr+sty5c4fBYERERHh5ec2ePVssFisICASCCRMmLFiwIDQ01MLCorCwEKUnJiZaWFiw2exx48atWbNmwBXXMPv377e1tV23bp2Dg8POnTuVBXJychgMRnh4+Jw5c2bMmCESiSCEVVVVNBqNvPs//fTTgCuuSZ4/f25nZ7dy5cply5Y5OjpyuVwFgdLSUiMjI7SwqqWlhUxX2ThDlwsXLpibm69du3bixInBwcHKAt98842enh6DwZg5c6Z8uomJiZeXF+oMe/bs6f4qg8UQvvPOO9HR0RBCgiDmzp179OhRBQE+n8/lcvPy8pQN4blz5wZO0f6koKDA2Ni4sbERQnjp0iVHR0eZTKYgU1lZKZFIAgIC5A3h+fPnx44di0ITHDx40NfXdyDV1jgHDhzw9fUlCAJCuH79ejabrSBQWlpqaGjY0NAAIUxNTbWzs0M2LyoqaseOHQOur8YICAjYu3cvhFAsFru7u//8888KAsePH581axbqFVu3bn377bchhDKZzMXF5ddff4UQNjc3m5mZ5eXlDbjuGoPP5xsZGeXm5kIIy8rK9PX10RMhz9KlS3fv3g0hlEgkkyZNOnPmDISwqqrKyMho4BXuJ7Zt24buL4QwODj4n//8p4JAZ2cnh8Opq6tTMISBgYG7du2CfzXO6dOnB0zn/sDd3f3UqVMQwra2NhaLdfv2bQUBLpfb1tZ24sQJZUP49OlTNa8yWCaOkpKSVq5cCQCgUCgrVqxISkpSEKDT6UwmU2XesrKytLS0qqqqfteyn0lOTp4/f765uTkAICAggMfjPX78WEHG0dFRfg4EkZSUFBgYiOZAgoODMzIyhELhwOjcHyQlJQUHB6P5veDgYOXOkJycPHfuXDQx6OvrKxAIcnNz0SkOh3P58uWhuBHPixcv0tPT0VOgq6sbGBioXPGkpKQVK1ag2SGyZYqLizkczpIlSwAAZmZmPj4+yhmHEH/88Ye1tfXEiRMBAGPGjBk7duyVK1fkBWQy2eXLl1FD6ejoLFu2jKwvQRCZmZk3btxob28feM01y6VLl1AdAQArV65Uvqf6+vo2NjYKiTKZLCUlhWyc5cuXD+nOUFlZWVxcvGLFCgCAsbGxn5+fcnWYTKaxsbHK7Dk5ORkZGTwer8cLDQpDKBKJmpubyS9btra2HA5Hzbz6+voZGRmHDx8eP3781q1b+03HgYDD4ZCNoKOjw2Kx1GwHDodja2uLjtGzUVtb209KDgDy1bG1ta2vryfn+kkBsqFoNJqVlRVqKBqNVlRU9PXXX8+dOzcwMHBoxS+sr68nCKL7p0ChZfh8fnt7O4fDYTKZ5KegXj0+gxA0JUj+VK4Ol8uVSqUqG8rCwuLw4cPR0dEuLi5ZWVkDpXK/oHCv1bynDQ0NXTXOUKS2ttbMzIzcWLFX1TE3N//+++9jY2OdnZ1PnjzZvfDAOcscOXLkhx9+UEi0sbFJSUmRyWQAAPILP41GU3jxdcOFCxdoNBoAoKKiwsPDY+nSpfPmzdOY0pqmtbVVZYzG+Ph4Pz8/qVQq7+ago6OjZjvIZDLyGzKVSqVQKOo3oFZISkr65JNPlNNv3bplYGAgXx0ajQYhVAjCJ5PJVDZUfHw86gx8Pt/T0/Pbb7/duHFjP1ZDo6jzFCi0DABAKpUqtAaNRhOJRAOhcf/Q1c2VFwCqGsrOzu7Zs2co/cCBA5GRkWgXyiGKfDuo/0p8mXfpIES5b6tfnbKyMvSMpKamBgUFBQYGdrNR5cAZwpCQEF9fX4VE9DfW0NDQ2NiYx+MhN0gul6s85O8KVFUAgIuLi6en56NHjwazITQ2Nj59+rRyOqq4jY1NXl4eSoEQNjQ0qNkO1tbWDQ0N6JjH4xEEoX4DaoXZs2erbAe0e6R8dbhcLvKQkheztra+ffs2+ZPsMGRnMDExeeONNx49etRP+vcHVlZWAAAej4d231X5FCi0jIGBgampqbW1dWNjI0EQyEZyudwxY8YMrO6aRL6OQFU7sFgsCoXC4/HQhBgpIO9PuHr16o8++qi1tdXU1HSgFNcw1tbW5Jye+q9EFotFpVJ5PB7yMu3Vu3QQYmVl1dLSIpFIkAc1l8u1trZWMy/5NkDLEIqLi+fMmdOV8MBNjbJYLHclXF1d0Vlvb++0tDR0nJ6ejoZNEMKmpib0H6dHOjs7S0pK5FcUDEJoNJpyI7i7u6Ne6+3tnZWV9eLFCwDA3bt3dXR0xo8fDwDo6Ojo6Ojoplhvb+/09HQIIQAgPT19ypQpXU2aDxJMTU1VtgN6l6nsDACA1tZWNNvp7e19/fp19B30wYMHMpls0qRJ8uVDCB8+fDjIO4MCBgYG06dPT09PRz/JihME0dTUhG4uutEKAm5uboaGhjdv3gQAiMXirKys+fPna6MGmsHLy6u8vPz58+cAgMbGxtzc3Llz5wIARCJRW1sbAEBPT8/Ly0tlDyF58OABnU43MTEZUNU1yvz585XvNQCgubm5m1GRrq5uj40zhHBxcbGxsbl27RoAQCqVXrt2DfVtqVRKrprrkYqKCj6f3010BwAGzfKJ7OxsOp0eGxu7adMmFotVX18PIUTbihcVFUEI+Xw+m80ODg6mUqlsNvvjjz+GEHI4HB8fn507d8bFxU2aNGnmzJnKHudDi/nz5/v7+x86dGj06NH79u1DiWw2OywsDB1///33bDbb3t5+5syZbDb77t27EMKOjo7Ro0eHhobGx8dbWFicP39eW/prhJqaGgsLiy1btuzatYtOp9+7dw+l29vbJyYmouOFCxf6+voePnzY1dU1NjYWJfr4+MTExOzbt2/hwoX29vbKHueDHOQpvn///rCwMGdnZ7SIqLS0FACAbCGXy7WystqwYcNnn31mYmJy/fp1lPHgwYNOTk6HDh1avHjxnDlzkMPt0GX9+vWTJ08+cuTI9OnTyTVRhw8f9vT0RMcpKSlmZmb79u179913HRwc+Hw+hPDo0aMRERH79++Pjo42MTH58ssvtVYBTVBYWGhiYhITE/OPf/zD1NS0rKwMpevp6WVmZkIICYJgs9mhoaEAgPDw8A0bNiCBy5cvyzdOa2urtqqgEY4fP25vb//5558vW7Zs2rRpyGX66tWr+vr6SODx48dsNnvevHksFovNZh8/fhxCmJqaGhwcvGfPnk8++QQtxen+KoMo+kReXt758+f19fXXrFmDvhKLxeKEhIRVq1aZmpoKhcJTp06RwkZGRqtXr5ZIJL/99lthYSEAwM3NbeXKlcoelUMLoVCYkJBQXV09a9Ys5AcIAMjOzpbJZGjKNysrq6ysjJT38fEZPXo0AKCpqemHH35oaWlZvHjxUN9VAABQXV19+vRpsVgcHBxMroT96aefZsyYgeLOiESihISEZ8+ezZgxY9myZUggNTU1JydHJBI5Ojq+9dZbRkZGWqtAX7lz505SUpKpqWl4eDj6pNHW1paYmPjOO++MGDECAFBbW/vjjz8KhcKgoCD5cXBKSgpadBwREaFyP4ohBEEQiYmJeXl548aNW716NZrjKigoqKioIO/1vXv3Ll26RKfTw8LCkD95dXV1UlJSTU2NmZnZggULpkyZos06aIKysrL//Oc/FApl9erVZCChkydPLlq0CM0Qfvvtt6QwjUZ799130bFy4wxp0tPTkS9xeHg4eqhra2vT0tIiIiIAADU1NZcvXyaFHR0d/fz8mpubL1y4UFFRMXLkyOnTp/cYtXEQGUIMBoPBYAaeQbF8AoPBYDAYbYENIQaDwWCGNdgQYjAYDGZYgw0hBoPBYIY12BBiMBgMZliDDSEGg8FghjXYEGJeHdLS0jIyMrStRQ+cO3fu/v372tZCC9y7d+/u3bt9zn779u2cnBwN6oPBkGBDiHl1iIuLO3TokLa16IGoqCiV+6wOck6ePOmsxC+//KJmdh6P5+/vT24ievHiReXSnJ2du9km+/nz52ihtAYqg8H8L0N7HxYMRp61a9cqbM+N0RStra2VlZWbN29GYSAR5F7BPRIXF+fk5LR06VL0UyAQVFZWRkZGon2CSLrZHXTlypU7duyIj4/ft29f79XHYLoDG0LM0ANCyOPxdHV1zczM5NPXrFmjLNnQ0GBsbEyGNFOAIAgej2dgYNDVNuUSiYTP53cTwKUrhEKhUChkMBi9zahSh6amJjqdrrIWPB5PT0+vDxtMy2QyLpdraGioft7333//9ddf7+2F2tvbUWQ4hfTQ0FD19wenUqlhYWEHDhzYuXMnilKCwWgKPDWKGWIcO3bM3t6exWIxGIyJEydmZ2eTp4KCguRtYWZm5pgxY6ysrOh0+t/+9rd///vfDAajvr4enZXJZLGxsVZWVkhg1qxZ+fn5ZF5XV9eYmJjY2Fhzc3NLS0tLS0syticqp7KyUl6rTZs2ubq6orAAn332mbOzs4GBgbm5ubm5+ZYtW1BEEWViY2MdHR27Seno6Pj73//OYDCsra3pdPqSJUvIkMsQwp07d5qamjKZTFNTU1NT07i4ODXbUCgURkREGBgY2NraohIuXLigZt4+8Pvvv7e1taE44y/DypUrm5qahnTIdczgBBtCzFAiLi5uy5YtERERDx48uH37tr29fUBAQHl5OTrb1NREfkOqqKhYsmSJhYXFH3/8kZOTY2Zm9n//938tLS1kjN+oqKg9e/Zs3bo1Nzc3KyuLSqX6+vqSH7H4fP7Jkydv3Lhx/vz57OxsDw+P9evXV1dXAwCCgoI6Ozvlt4AXCoWnT59evHgx2vO9ubl5586dDx48yM/P3759+9dff71jxw6V1RGJRK2trV2lEASxfPnyc+fOHT58uLCw8MKFC2VlZQEBARKJBABw9uzZzz77LDY2tqSkpKCg4LvvvlMYH3ffjGfPnt23b9/jx4/v3Llz4MABFA2xR2QymfQv1IyPBgDIzMy0s7OTjzvfN0aPHs1kMod66HnMYKQf42dgMBqlqalJX1//gw8+IFM6OzttbW2joqLQzzlz5ixevBgdb9myZeTIkSieF2LGjBkAAA6HAyEsLy+nUqkHDx4kz/J4PCMjo/3796OfTCbTwcFBKBSinxwOBwCAIrxACIOCgpycnMhoR2fOnAEAPHz4UKXaH3zwgZ2dHfnT2tp68+bN6Hj79u0mJibywvIply5dAgAkJyeTZ1Go4YsXL6IKOjs799RmqgkJCZkyZUqvsnz++ecKrw5HR0c1806dOtXHx0c+RaW7EJPJRGdXrFjx6NEjlUV5eXl5eXn1SnMMpkfwN0LMkOHGjRtCodDGxubq1atkooODQ0FBgbLw48ePPT09WSwWmbJ06dI7d+6g4ytXrhAEYW5uLl+Ura2tfFHe3t7ktygbGxsTE5Oamhr0Myws7Lfffrt58+bs2bMBAAkJCe7u7pMnT0ZnIYTp6el37typr68nCKKkpITD4QiFwt5GR0pPT9fV1aXRaPJKGhgYFBQULF26FEXse+utt0JDQ729vbuKOUUQRF1dHfmTyWTq6upu2bLljTfeiIyM9Pb2NjY2DgoKUlOlQ4cOoRBpAAD1o1zxeDyFGWBETEyMm5sb+ZNsn/b2dqlUKpFICIJAwadIzM3NS0pK1LwuBqMm2BBihgxcLhcAEBsbiwLZk4wdO1ZZuL6+/rXXXpNPkXd3REV98MEHCrkEAgF5rODnMmLECLFYjI7feOMNKyurhISE2bNnczicjIyMAwcOoFNSqdTf3//WrVv+/v6jRo0yMDAwMjKCEAoEgt4aQi6XK5PJQkJCFNRAc6ehoaENDQ3Hjx9PTEwcMWKEn5/fwYMHld04Gxsb5eck79+/P3Xq1DFjxixfvjwhISEtLc3MzEx9QxgQENAHZxkdHR2V86gLFizoylnmX//6l0QiKSgoCAsL27x5M5kukUh0dXV7qwAG0z3YEGKGDMi5MTk52cvLq0dhW1tb+ZEQAIB0kyGLevDggYL7vpro6OiEhIScOHHiiy++OHXqFIVCIc1VZmbmtWvX0tPTyVige/fuTUlJ6aoc5F9D0tbWJq+kvr4+j8dDkWkVoFKpW7du3bp1a1lZWVpa2p49exYtWvTkyRMKhSIvxmAw5NehIzMWFhZWVlZWXl7u4ODQh+r3FhaL1djY2Ksss2bNioyM5PP548aNkzeETU1N8qN8DEYjYGcZzJDBy8tLR0fn3Llz6ghPmTLl3r17pG8nQRA///wzeXbevHkAADWLUklkZGRbW9vvv//+448/ogEiSn/27Bm6OinZlRUEANja2nZ0dJAWmiCI69evyyvZ0dGRnJzcvSaurq6bNm2KiYl5+vQpGunKo6OjM0UOtADj4cOHixYtGhgrCACYNm3a48ePYW9igI8fPx4AYGJiIhKJyESZTFZUVOTp6al5FTHDG2wIMUMGOzu7jRs3Hjt2bNeuXVVVVUKhsKSkBI3JlIU3bdpkYmLi7+9/9uzZ5OTk5cuXyw+2PDw8Vq1atXPnziNHjnA4nM7OzoKCgr1796rvmu/u7u7h4RETE1NcXBwWFkamT5w4EQCwe/dugUBQV1cXFRWVm5vbVSE+Pj46OjpbtmypqampqKhYt26d/KqMN99808PD47333jtz5kxjYyOfz8/Jyfn444/z8vIAAPv37z916lRNTQ1BEBUVFb/88oudnZ2ao6Vp06adOXMmJSVFKBS+ePGiuLj44sWLala8D/j6+ra2thYXFyukZ2VlJf4v5OIQhXEtIi8vr729fcGCBf2nKmaYomVnHQymN0il0h07dsgvfndycjp//jw6K+81CiHMy8ubN2+enp6ehYVFdHT0kSNHqFQq6QgqFAo3b94svzT79ddfz8rKQmeZTGZ0dLT8pZlM5ocffiifcuTIEQCAubm5SCSST//000/ROgoAwIIFC9DnQy6Xi87Ke41CCI8dO4Z2w6FQKKGhoVu3bpX3I+XxeG+++SY5NUqhUKZNm1ZeXg4hjImJMTQ0JJWfMGHC/fv31WzGmpqaJUuWyH9qjYyM7D4L8hotKipS8xLySCQSW1vbTz/9lEzpapM55BDr5+dH1sXc3JzMtW3bNgcHB6lU2gcdMJhuoMDezFdgMIMBsVhcUlLy4sULW1tbGxsbMh2tEVRwpSFhs9kpKSnPnz+XTxQKhaWlpTKZTP3hlDo0Nzc/ffrU0tJSefqRIAgKhSI/4hEIBOXl5SwWi3TIVIDP55eWlo4cOdLe3l5+saBEIqmoqGhra7O2trazs1M5iupeyZqaGqlU6uDg0OPWORBCgiBUfq1Uh/j4+K+++qq8vBxZfVSaslg35YtEImdn548//jgqKqpvOmAwXYENIeaVJSMjY9asWchX8+LFi6tWrVq3bt2XX36pbb2GI2Kx2M3Nbdu2bevWretbCV988cXRo0cLCwsVFlRgMC8PNoSYV5aZM2fm5uY6ODg0NjY2NTX5+vr++uuvdDpd23oNUurq6rr6nDl//vyX396zsbFRKpWquYWNMvX19bq6uubm5i+pBgajDDaEmFcWoVB49+7d58+fQwjHjeGotowAAABESURBVBvn4eGhbY0GNUlJSdHR0SpP3bhxo88GDIMZ/GBDiMFgMJhhDV4+gcFgMJhhDTaEGAwGgxnWYEOIwWAwmGHN/wMjTBV3wsy2SgAAAABJRU5ErkJggg==", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -1022,114 +1020,114 @@ "output_type": "execute_result", "data": { "text/plain": "Plot{Plots.GRBackend() n=2}", - "image/png": "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", + "image/png": "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", "text/html": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ], "image/svg+xml": [ "\n", "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", + "\n", "\n", - " \n", + " \n", " \n", " \n", "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n" + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" ] }, "metadata": {}, @@ -1150,11 +1148,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/guide/tutorial.jl b/dev/guide/tutorial.jl index 0ce10ec04e..bab11d656d 100644 --- a/dev/guide/tutorial.jl +++ b/dev/guide/tutorial.jl @@ -1,6 +1,4 @@ # # Tutorial -#md # [![](https://mybinder.org/badge_logo.svg)](@__BINDER_ROOT_URL__/guide/@__NAME__.ipynb) -#md # [![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](@__NBVIEWER_ROOT_URL__/guide/@__NAME__.ipynb) #nb # DFTK is a Julia package for playing with plane-wave #nb # density-functional theory algorithms. In its basic formulation it @@ -71,11 +69,9 @@ scfres = self_consistent_field(basis, tol=1e-5); scfres.energies # Eigenvalues: -hcat(scfres.eigenvalues...) +stack(scfres.eigenvalues) # `eigenvalues` is an array (indexed by k-points) of arrays (indexed by -# eigenvalue number). The "splatting" operation `...` calls `hcat` -# with all the inner arrays as arguments, which collects them into a -# matrix. +# eigenvalue number). # # The resulting matrix is 7 (number of computed eigenvalues) by 8 # (number of irreducible k-points). There are 7 eigenvalues per @@ -91,7 +87,7 @@ hcat(scfres.eigenvalues...) # for details). # # We can check the occupations ... -hcat(scfres.occupation...) +stack(scfres.occupation) # ... and density, where we use that the density objects in DFTK are # indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then # in the 3-dimensional real-space grid. diff --git a/dev/guide/tutorial/557b9a2a.svg b/dev/guide/tutorial/557b9a2a.svg new file mode 100644 index 0000000000..993b76f9e5 --- /dev/null +++ b/dev/guide/tutorial/557b9a2a.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/6617c44e.svg b/dev/guide/tutorial/6617c44e.svg new file mode 100644 index 0000000000..ed122a4487 --- /dev/null +++ b/dev/guide/tutorial/6617c44e.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/aff558dd.svg b/dev/guide/tutorial/aff558dd.svg new file mode 100644 index 0000000000..2de48b5bf3 --- /dev/null +++ b/dev/guide/tutorial/aff558dd.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/fd416e46.svg b/dev/guide/tutorial/fd416e46.svg new file mode 100644 index 0000000000..f3d594c15e --- /dev/null +++ b/dev/guide/tutorial/fd416e46.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/index.html b/dev/guide/tutorial/index.html index 08892126c7..b8ab01e96d 100644 --- a/dev/guide/tutorial/index.html +++ b/dev/guide/tutorial/index.html @@ -1,5 +1,5 @@ -Tutorial · DFTK.jl

Tutorial

This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.

Convergence parameters in the documentation

We use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.

using DFTK
+Tutorial · DFTK.jl

Tutorial

This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.

Convergence parameters in the documentation

We use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.

using DFTK
 using Plots
 using Unitful
 using UnitfulAtomic
@@ -27,30 +27,30 @@
 # 3. Run the SCF procedure to obtain the ground state
 scfres = self_consistent_field(basis, tol=1e-5);
n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
 ---   ---------------   ---------   ---------   ----   ------
-  1   -7.900353194121                   -0.70    4.6
-  2   -7.904990293199       -2.33       -1.52    1.0   23.8ms
-  3   -7.905175442146       -3.73       -2.53    1.2   25.0ms
-  4   -7.905210638610       -4.45       -2.83    2.8   33.9ms
-  5   -7.905211054814       -6.38       -2.93    1.1   24.6ms
-  6   -7.905211520076       -6.33       -4.68    1.0   24.0ms
-  7   -7.905211530984       -7.96       -4.51    3.2   38.4ms
-  8   -7.905211531381       -9.40       -5.16    1.0   24.4ms

That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:

scfres.energies
Energy breakdown (in Ha):
-    Kinetic             3.1020954 
-    AtomicLocal         -2.1987831
-    AtomicNonlocal      1.7296093 
+  1   -7.900530669783                   -0.70    4.5   42.0ms
+  2   -7.905010717656       -2.35       -1.52    1.0   23.0ms
+  3   -7.905178791162       -3.77       -2.52    1.1   23.6ms
+  4   -7.905210446444       -4.50       -2.83    2.6   31.6ms
+  5   -7.905211107804       -6.18       -2.99    1.0   23.2ms
+  6   -7.905211517748       -6.39       -4.58    1.0   23.1ms
+  7   -7.905211531064       -7.88       -4.57    2.9   34.5ms
+  8   -7.905211531385       -9.49       -5.19    1.0   23.6ms

That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:

scfres.energies
Energy breakdown (in Ha):
+    Kinetic             3.1020962 
+    AtomicLocal         -2.1987847
+    AtomicNonlocal      1.7296098 
     Ewald               -8.3979253
     PspCorrection       -0.2946254
-    Hartree             0.5530386 
-    Xc                  -2.3986210
+    Hartree             0.5530391 
+    Xc                  -2.3986212
 
-    total               -7.905211531381

Eigenvalues:

hcat(scfres.eigenvalues...)
7×8 Matrix{Float64}:
- -0.176942  -0.14744   -0.0911691   …  -0.101219   -0.0239769  -0.0184078
-  0.261073   0.116915   0.00482515      0.0611644  -0.0239769  -0.0184078
-  0.261073   0.23299    0.216734        0.121636    0.155532    0.117747
-  0.261073   0.23299    0.216734        0.212134    0.155532    0.117747
-  0.354532   0.335109   0.317102        0.350436    0.285692    0.417258
-  0.354532   0.389829   0.384601    …   0.436926    0.285692    0.41726
-  0.354532   0.389829   0.384601        0.449233    0.627539    0.443806

eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number). The "splatting" operation ... calls hcat with all the inner arrays as arguments, which collects them into a matrix.

The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).

We can check the occupations ...

hcat(scfres.occupation...)
7×8 Matrix{Float64}:
+    total               -7.905211531385

Eigenvalues:

stack(scfres.eigenvalues)
7×8 Matrix{Float64}:
+ -0.176942  -0.14744   -0.0911692   …  -0.101219   -0.023977  -0.018408
+  0.261073   0.116915   0.00482508      0.0611643  -0.023977  -0.018408
+  0.261073   0.23299    0.216733        0.121636    0.155532   0.117747
+  0.261073   0.23299    0.216733        0.212134    0.155532   0.117747
+  0.354532   0.335109   0.317102        0.350436    0.285692   0.417258
+  0.354532   0.389829   0.384601    …   0.436925    0.285692   0.417489
+  0.354532   0.389829   0.384601        0.449245    0.627551   0.443806

eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number).

The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).

We can check the occupations ...

stack(scfres.occupation)
7×8 Matrix{Float64}:
  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
  2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
@@ -59,7 +59,7 @@
  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.

rvecs = collect(r_vectors(basis))[:, 1, 1]  # slice along the x axis
 x = [r[1] for r in rvecs]                   # only keep the x coordinate
-plot(x, scfres.ρ[1, :, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
Example block output

We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):

compute_forces_cart(scfres)
2-element Vector{StaticArraysCore.SVector{3, Float64}}:
- [-7.097944980027914e-16, -2.5491582676879326e-16, -2.144506446174631e-16]
- [4.480466765027619e-17, -4.2118725039055833e-16, 5.654177753456335e-18]

As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,

plot_bandstructure(scfres; kline_density=10)
Example block output

or plot a density of states, for which we increase the kgrid a bit to get smoother plots:

bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))
-plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())
Example block output

Note that directly employing the scfres also works, but the results are much cruder:

plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())
Example block output
+plot(x, scfres.ρ[1, :, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
Example block output

We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):

compute_forces_cart(scfres)
2-element Vector{StaticArraysCore.SVector{3, Float64}}:
+ [-5.677484808235358e-16, -3.941732432722068e-16, 9.687076626810102e-16]
+ [-2.797368000784249e-16, 2.495179285670431e-16, -8.381328568186348e-16]

As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,

plot_bandstructure(scfres; kline_density=10)
Example block output

or plot a density of states, for which we increase the kgrid a bit to get smoother plots:

bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))
+plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())
Example block output

Note that directly employing the scfres also works, but the results are much cruder:

plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())
Example block output
diff --git a/dev/index.html b/dev/index.html index 1132708779..f4108dd644 100644 --- a/dev/index.html +++ b/dev/index.html @@ -1,2 +1,2 @@ -Home · DFTK.jl

DFTK.jl: The density-functional toolkit.

The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.

If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.

Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

Getting started

First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.

Convergence parameters in the documentation

In the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!

+Home · DFTK.jl

DFTK.jl: The density-functional toolkit.

The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.

If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.

Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

Getting started

First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.

Convergence parameters in the documentation

In the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!

diff --git a/dev/publications/index.html b/dev/publications/index.html index 6f427a58c5..07261b22b4 100644 --- a/dev/publications/index.html +++ b/dev/publications/index.html @@ -1,5 +1,5 @@ -Publications · DFTK.jl

Publications

Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is

@article{DFTKjcon,
+Publications · DFTK.jl

Publications

Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is

@article{DFTKjcon,
   author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},
   doi = {10.21105/jcon.00069},
   journal = {Proc. JuliaCon Conf.},
@@ -7,4 +7,4 @@
   volume = {3},
   pages = {69},
   year = {2021},
-}

Additionally the following publications describe DFTK or one of its algorithms:

Research conducted with DFTK

The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.

+}

Additionally the following publications describe DFTK or one of its algorithms:

Research conducted with DFTK

The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.

diff --git a/dev/school2022/index.html b/dev/school2022/index.html index 07a1f01692..818163c2d8 100644 --- a/dev/school2022/index.html +++ b/dev/school2022/index.html @@ -1,2 +1,2 @@ -DFTK School 2022 · DFTK.jl
+DFTK School 2022 · DFTK.jl
diff --git a/dev/search_index.js b/dev/search_index.js index 29daecc730..578635944f 100644 --- a/dev/search_index.js +++ b/dev/search_index.js @@ -1,3 +1,3 @@ var documenterSearchIndex = {"docs": -[{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"EditURL = \"../../../examples/gaas_surface.jl\"","category":"page"},{"location":"examples/gaas_surface/#Modelling-a-gallium-arsenide-surface","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"section"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"miller = (1, 1, 0) # Surface Miller indices\nn_GaAs = 2 # Number of GaAs layers\nn_vacuum = 4 # Number of vacuum layers\nEcut = 5 # Hartree\nkgrid = (4, 4, 1); # Monkhorst-Pack mesh\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use ASE to build the structure:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using ASEconvert\n\na = 5.6537 # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)\ngaas = ase.build.bulk(\"GaAs\", \"zincblende\"; a)\nsurface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Get the amount of vacuum in Ångström we need to add","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum\nsurface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Write an image of the surface and embed it as a nice illustration:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"ase.io.write(\"surface.png\", surface * pytuple((3, 3, 1)), rotation=\"-90x, 30y, -75z\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use the pyconvert function from PythonCall to convert to an AtomsBase-compatible system. These two functions not only support importing ASE atoms into DFTK, but a few more third-party data structures as well. Typically the imported atoms use a bare Coulomb potential, such that appropriate pseudopotentials need to be attached in a post-step:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using DFTK\nsystem = attach_psp(pyconvert(AbstractSystem, surface);\n Ga=\"hgh/pbe/ga-q3.hgh\",\n As=\"hgh/pbe/as-q5.hgh\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"We model this surface with (quite large a) temperature of 0.01 Hartree to ease convergence. Try lowering the SCF convergence tolerance (tol) or the temperature or try mixing=KerkerMixing() to see the full challenge of this system.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],\n temperature=0.001, smearing=DFTK.Smearing.Gaussian())\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n\nscfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"scfres.energies","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"EditURL = \"../../../examples/geometry_optimization.jl\"","category":"page"},{"location":"examples/geometry_optimization/#Geometry-optimization","page":"Geometry optimization","title":"Geometry optimization","text":"","category":"section"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the H_2 molecule. We setup H_2 in an LDA model just like in the Tutorial for silicon.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"using DFTK\nusing Optim\nusing LinearAlgebra\nusing Printf\n\nkgrid = [1, 1, 1] # k-point grid\nEcut = 5 # kinetic energy cutoff in Hartree\ntol = 1e-8 # tolerance for the optimization routine\na = 10 # lattice constant in Bohr\nlattice = a * I(3)\nH = ElementPsp(:H; psp=load_psp(\"hgh/lda/h-q1\"));\natoms = [H, H];\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We define a Bloch wave and a density to be used as global variables so that we can transfer the solution from one iteration to another and therefore reduce the optimization time.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"ψ = nothing\nρ = nothing","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"First, we create a function that computes the solution associated to the position x ℝ^6 of the atoms in reduced coordinates (cf. Reduced and cartesian coordinates for more details on the coordinates system). They are stored as a vector: x[1:3] represents the position of the first atom and x[4:6] the position of the second. We also update ψ and ρ for the next iteration.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function compute_scfres(x)\n model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n global ψ, ρ\n if isnothing(ρ)\n ρ = guess_density(basis)\n end\n is_converged = DFTK.ScfConvergenceForce(tol / 10)\n scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n ψ = scfres.ψ\n ρ = scfres.ρ\n scfres\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Then, we create the function we want to optimize: fg! is used to update the value of the objective function F, namely the energy, and its gradient G, here computed with the forces (which are, by definition, the negative gradient of the energy).","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function fg!(F, G, x)\n scfres = compute_scfres(x)\n if !isnothing(G)\n grad = compute_forces(scfres)\n G .= -[grad[1]; grad[2]]\n end\n scfres.energies.total\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Now, we can optimize on the 6 parameters x = [x1, y1, z1, x2, y2, z2] in reduced coordinates, using LBFGS(), the default minimization algorithm in Optim. We start from x0, which is a first guess for the coordinates. By default, optimize traces the output of the optimization algorithm during the iterations. Once we have the minimizer xmin, we compute the bond length in Cartesian coordinates.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"x0 = vcat(lattice \\ [0., 0., 0.], lattice \\ [1.4, 0., 0.])\nxres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),\n Optim.Options(; show_trace=true, f_tol=tol))\nxmin = Optim.minimizer(xres)\ndmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])\n@printf \"\\nOptimal bond length for Ecut=%.2f: %.3f Bohr\\n\" Ecut dmin","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"note: Degrees of freedom\nWe used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as H_2O). In the particular case of H_2, we could use only the internal degree of freedom which, in this case, is just the bond length.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"EditURL = \"../../../examples/convergence_study.jl\"","category":"page"},{"location":"examples/convergence_study/#Performing-a-convergence-study","page":"Performing a convergence study","title":"Performing a convergence study","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of k-points in each dimension of the Brillouin zone.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using DFTK\nusing LinearAlgebra\nusing Statistics\n\nfunction run_scf(; a=5.0, Ecut, nkpt, tol)\n atoms = [ElementPsp(:Pt; psp=load_psp(\"hgh/lda/Pt-q10\"))]\n position = [zeros(3)]\n lattice = a * Matrix(I, 3, 3)\n\n model = model_LDA(lattice, atoms, position; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n println(\"nkpt = $nkpt Ecut = $Ecut\")\n self_consistent_field(basis; is_converged=DFTK.ScfConvergenceEnergy(tol))\nend;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-2 # Tolerance to which we target to converge\nnkpts = 1:7 # K-point range checked for convergence\nEcuts = 10:2:24; # Energy cutoff range checked for convergence\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the first step we converge in the number of k-points employed in each dimension of the Brillouin zone …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_kgrid(nkpts; Ecut, tol)\n energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])\nend\nresult = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)\nnkpt_conv = result.nkpt_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot the obtained convergence:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using Plots\nplot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"k-grid\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"We continue to do the convergence in Ecut using the suggested k-point grid.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_Ecut(Ecuts; nkpt, tol)\n energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])\nend\nresult = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)\nEcut_conv = result.Ecut_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot it:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"Ecut\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/#A-more-realistic-example.","page":"Performing a convergence study","title":"A more realistic example.","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Repeating the above exercise for more realistic settings, namely …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-4 # Tolerance to which we target to converge\nnkpts = 1:20 # K-point range checked for convergence\nEcuts = 20:1:50;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"…one obtains the following two plots for the convergence in kpoints and Ecut.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"\n","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"EditURL = \"../../../examples/energy_cutoff_smearing.jl\"","category":"page"},{"location":"examples/energy_cutoff_smearing/#Energy-cutoff-smearing","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"","category":"section"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"H_k u_k = ε_k u_k","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"for each k-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis mathcalB_k^E_c=x e^iG x G mathcalR^* k+G^2 2E_c whose size highly depends on the choice of k-point, cell size or cutoff energy rm E_c (the Ecut parameter of DFTK). As a result, energy bands computed along a k-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"using DFTK\nusing Statistics\n\na0 = 10.26 # Experimental lattice constant of silicon in bohr\na_list = range(a0 - 1/2, a0 + 1/2; length=20)\n\nfunction compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n model = model_PBE(lattice, atoms, positions; kinetic_blowup)\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n self_consistent_field(basis; callback=identity, kwargs...).energies.total\nend\n\nEcut = 5 # Very low Ecut to display big irregularities\nkgrid = (2, 2, 2) # Very sparse k-grid to speed up convergence\nE0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"To be compared with the same computation for a high Ecut=100. The naive approximation of the energy is shifted for the legibility of the plot.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,\n -7.848576991754026, -7.850892888614151, -7.852921532056932,\n -7.854675317792186, -7.85616622262217, -7.85740584131599,\n -7.858405359984107, -7.859175611288143, -7.859727053496513,\n -7.860069804791132, -7.860213631865354, -7.8601679947736915,\n -7.859942011410533, -7.859544518721661, -7.858984032385052,\n -7.858268793303855, -7.857406769423708]\n\nusing Plots\nshift = mean(abs.(E0_naive .- E0_ref))\np = plot(a_list, E0_naive .- shift, label=\"Ecut=5\", xlabel=\"lattice parameter a (bohr)\",\n ylabel=\"Ground state energy (Ha)\", color=1)\nplot!(p, a_list, E0_ref, label=\"Ecut=100\", color=2)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as \"energy cutoff smearing\". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide C^2 regularity of the energy bands.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"[CHV2022]: ","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Let us lauch the computation again with the modified kinetic term.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"note: Abinit energy cutoff smearing option\nFor the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring C^1 regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]\na0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])\n\nshift = mean(abs.(E0_modified .- E0_ref)) # Shift for legibility of the plot\nplot!(p, a_list, E0_modified .- shift, label=\"Ecut=5 + BlowupCHV\", color=3)\nvline!(p, [a0], label=\"experimental a0\", linestyle=:dash, linecolor=:black)\nvline!(p, [a0_naive], label=\"a0 Ecut=5\", linestyle=:dash, color=1)\nvline!(p, [a0_ref], label=\"a0 Ecut=100\", linestyle=:dash, color=2)\nvline!(p, [a0_modified], label=\"a0 Ecut=5 + BlowupCHV\", linestyle=:dash, color=3)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter a, even with the low Ecut=5 Ha.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"println(\"Error of approximation of the reference a0 with modified kinetic term:\"*\n \" $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%\")","category":"page"},{"location":"publications/#Publications","page":"Publications","title":"Publications","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"@article{DFTKjcon,\n author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},\n doi = {10.21105/jcon.00069},\n journal = {Proc. JuliaCon Conf.},\n title = {DFTK: A Julian approach for simulating electrons in solids},\n volume = {3},\n pages = {69},\n year = {2021},\n}","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"Additionally the following publications describe DFTK or one of its algorithms:","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"E. Cancès, M. Hassan and L. Vidal. Modified-Operator Method for the Calculation of Band Diagrams of Crystalline Materials. Mathematics of Computation (2023). ArXiv:2210.00442. (Supplementary material and computational scripts.\nE. Cancès, M. F. Herbst, G. Kemlin, A. Levitt and B. Stamm. Numerical stability and efficiency of response property calculations in density functional theory Letters in Mathematical Physics, 113, 21 (2023). ArXiv:2210.04512. (Supplementary material and computational scripts).\nM. F. Herbst and A. Levitt. A robust and efficient line search for self-consistent field iterations Journal of Computational Physics, 459, 111127 (2022). ArXiv:2109.14018. (Supplementary material and computational scripts).\nM. F. Herbst, A. Levitt and E. Cancès. DFTK: A Julian approach for simulating electrons in solids. JuliaCon Proceedings, 3, 69 (2021).\nM. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. Journal of Physics: Condensed Matter, 33, 085503 (2021). ArXiv:2009.01665. (Supplementary material and computational scripts).","category":"page"},{"location":"publications/#Research-conducted-with-DFTK","page":"Publications","title":"Research conducted with DFTK","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"J. Cazalis. Dirac cones for a mean-field model of graphene (Submitted). ArXiv:2207.09893. (Computational script).\nE. Cancès, L. Garrigue, D. Gontier. A simple derivation of moiré-scale continuous models for twisted bilayer graphene Physical Review B, 107, 155403 (2023). ArXiv:2206.05685.\nG. Dusson, I. Sigal and B. Stamm. Analysis of the Feshbach-Schur method for the Fourier spectral discretizations of Schrödinger operators Mathematics of Computation, 92, 217 (2023). ArXiv:2008.10871.\nE. Cancès, G. Dusson, G. Kemlin and A. Levitt. Practical error bounds for properties in plane-wave electronic structure calculations SIAM Journal on Scientific Computing, 44, B1312 (2022). ArXiv:2111.01470. (Supplementary material and computational scripts).\nE. Cancès, G. Kemlin and A. Levitt. Convergence analysis of direct minimization and self-consistent iterations SIAM Journal on Matrix Analysis and Applications, 42, 243 (2021). ArXiv:2004.09088. (Computational script).\nM. F. Herbst, A. Levitt and E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations. Faraday Discussions, 224, 227 (2020). ArXiv:2004.13549. (Reference implementation).","category":"page"},{"location":"school2022/#DFTK-School-2022","page":"DFTK School 2022","title":"DFTK School 2022","text":"","category":"section"},{"location":"tricks/parallelization/#Timings-and-parallelization","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"This section summarizes the options DFTK offers to monitor and influence performance of the code.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2])\n\nDFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)","category":"page"},{"location":"tricks/parallelization/#Timing-measurements","page":"Timings and parallelization","title":"Timing measurements","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For example to measure the timing of an SCF:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)\n\nDFTK.timer","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"note: Timing measurements and stack traces\nTiming measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.","category":"page"},{"location":"tricks/parallelization/#Rough-timing-estimates","page":"Timings and parallelization","title":"Rough timing estimates","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"function estimate_time_per_scf_step(basis::PlaneWaveBasis)\n # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.\n time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3\n\n (time_per_FFT_per_grid_point\n * prod(basis.fft_size)\n * length(basis.kpoints)\n * div(basis.model.n_electrons, DFTK.filled_occupation(basis.model), RoundUp)\n * 8 # mean number of FFT steps per state per k-point per iteration\n )\nend\n\n\"Time per SCF (s): $(estimate_time_per_scf_step(basis))\"","category":"page"},{"location":"tricks/parallelization/#Options-for-parallelization","page":"Timings and parallelization","title":"Options for parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"At the moment DFTK offers two ways to parallelize a calculation, firstly shared-memory parallelism using threading and secondly multiprocessing using MPI (via the MPI.jl Julia interface). MPI-based parallelism is currently only over k-points, such that it cannot be used for calculations with only a single k-point. Otherwise combining both forms of parallelism is possible as well.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The scaling of both forms of parallelism for a number of test cases is demonstrated in the following figure. These values were obtained using DFTK version 0.1.17 and Julia 1.6 and the precise scalings will likely be different depending on architecture, DFTK or Julia version. The rough trends should, however, be similar.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The MPI-based parallelization strategy clearly shows a superior scaling and should be preferred if available.","category":"page"},{"location":"tricks/parallelization/#MPI-based-parallelism","page":"Timings and parallelization","title":"MPI-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Currently DFTK uses MPI to distribute on k-points only. This implies that calculations with only a single k-point cannot use make use of this. For details on setting up and configuring MPI with Julia see the MPI.jl documentation.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"First disable all threading inside DFTK, by adding the following to your script running the DFTK calculation:\nusing DFTK\ndisable_threading()\nRun Julia in parallel using the mpiexecjl wrapper script from MPI.jl:\nmpiexecjl -np 16 julia myscript.jl\nIn this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"As usual with MPI printing will be garbled. You can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"at the top of your script to disable printing on all processes but one.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"info: MPI-based parallelism not fully supported\nWhile standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.","category":"page"},{"location":"tricks/parallelization/#Thread-based-parallelism","page":"Timings and parallelization","title":"Thread-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Threading in DFTK currently happens on multiple layers distributing the workload over different k-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:\nusing DFTK\nsetup_threading()\nThis disables FFT threading and sets the number of BLAS threads to the number of Julia threads.\nRun Julia passing the desired number of threads using the flag -t:\njulia -t 8 myscript.jl","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For some cases (e.g. a single k-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.","category":"page"},{"location":"tricks/parallelization/#Advanced-threading-tweaks","page":"Timings and parallelization","title":"Advanced threading tweaks","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.","category":"page"},{"location":"tricks/parallelization/#BLAS-threads","page":"Timings and parallelization","title":"BLAS threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using LinearAlgebra\nBLAS.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"or (from Julia 1.6) simply BLAS.get_num_threads().","category":"page"},{"location":"tricks/parallelization/#Julia-threads","page":"Timings and parallelization","title":"Julia threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over k-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().","category":"page"},{"location":"tricks/parallelization/#FFT-threads","page":"Timings and parallelization","title":"FFT threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using FFTW\nFFTW.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"EditURL = \"../../../examples/error_estimates_forces.jl\"","category":"page"},{"location":"examples/error_estimates_forces/#Practical-error-bounds-for-the-forces","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"This is a simple example showing how to compute error estimates for the forces on a rm TiO_2 molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"[CDKL2021]: E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"using DFTK\nusing Printf\nusing LinearAlgebra\nusing ForwardDiff\nusing LinearMaps\nusing IterativeSolvers","category":"page"},{"location":"examples/error_estimates_forces/#Setup","page":"Practical error bounds for the forces","title":"Setup","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We setup manually the rm TiO_2 configuration from Materials Project.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ti = ElementPsp(:Ti; psp=load_psp(\"hgh/lda/ti-q4.hgh\"))\nO = ElementPsp(:O; psp=load_psp(\"hgh/lda/o-q6.hgh\"))\natoms = [Ti, Ti, O, O, O, O]\npositions = [[0.5, 0.5, 0.5], # Ti\n [0.0, 0.0, 0.0], # Ti\n [0.19542, 0.80458, 0.5], # O\n [0.80458, 0.19542, 0.5], # O\n [0.30458, 0.30458, 0.0], # O\n [0.69542, 0.69542, 0.0]] # O\nlattice = [[8.79341 0.0 0.0];\n [0.0 8.79341 0.0];\n [0.0 0.0 5.61098]];\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We apply a small displacement to one of the rm Ti atoms to get nonzero forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"positions[1] .+= [-0.022, 0.028, 0.035]","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We build a model with one k-point only, not too high Ecut_ref and small tolerance to limit computational time. These parameters can be increased for more precise results.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"model = model_LDA(lattice, atoms, positions)\nkgrid = [1, 1, 1]\nEcut_ref = 35\nbasis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)\ntol = 1e-5;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Computations","page":"Practical error bounds for the forces","title":"Computations","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute the reference solution P_* from which we will compute the references forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)\nψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute a variational approximation of the reference solution with smaller Ecut. ψr, ρr and Er are the quantities computed with Ecut and then extended to the reference grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"note: Choice of convergence parameters\nBe careful to choose Ecut not too close to Ecut_ref. Note also that the current choice Ecut_ref = 35 is such that the reference solution is not converged and Ecut = 15 is such that the asymptotic regime (crucial to validate the approach) is barely established.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ecut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol, callback=identity)\nψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)\nρr = compute_density(basis_ref, ψr, scfres.occupation)\nEr, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then compute several quantities that we need to evaluate the error bounds.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the residual R(P), and remove the virtual orbitals, as required in src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)\nres, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)\nψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the error P-P_* on the associated orbitals ϕ-ψ after aligning them: this is done by solving min ϕ - ψU for U unitary matrix of size NN (N being the number of electrons) whose solution is U = S(S^*S)^-12 where S is the overlap matrix ψ^*ϕ.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function compute_error(basis, ϕ, ψ)\n map(zip(ϕ, ψ)) do (ϕk, ψk)\n S = ψk'ϕk\n U = S*(S'S)^(-1/2)\n ϕk - ψk*U\n end\nend\nerr = compute_error(basis_ref, ψr, ψ_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1R(P) with boldsymbol M^-1 defined in [CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]\nmap(zip(P, ψr)) do (Pk, ψk)\n DFTK.precondprep!(Pk, ψk)\nend\nfunction apply_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_inv_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n op(x) = apply_M(φk, Pk, x, n)\n function f_ldiv!(x, y)\n x .= DFTK.proj_tangent_kpt(y, φk)\n x ./= (Pk.mean_kin[n] .+ Pk.kin)\n DFTK.proj_tangent_kpt!(x, φk)\n end\n J = LinearMap{eltype(φk)}(op, size(δφnk, 1))\n δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),\n verbose=false, reltol=0, abstol=1e-15)\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_metric(φ, P, δφ, A::Function)\n map(enumerate(δφ)) do (ik, δφk)\n Aδφk = similar(δφk)\n φk = φ[ik]\n for n = 1:size(δφk,2)\n Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)\n end\n Aδφk\n end\nend\nMres = apply_metric(ψr, P, res, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We can now compute the modified residual R_rm Schur(P) using a Schur complement to approximate the error on low-frequencies[CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"beginbmatrix\n(boldsymbol Ω + boldsymbol K)_11 (boldsymbol Ω + boldsymbol K)_12 \n0 boldsymbol M_22\nendbmatrix\nbeginbmatrix\nP_1 - P_*1 P_2-P_*2\nendbmatrix =\nbeginbmatrix\nR_1 R_2\nendbmatrix","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the projection of the residual onto the high and low frequencies:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"resLF = DFTK.transfer_blochwave(res, basis_ref, basis)\nresHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1_22R_2(P):","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"e2 = apply_metric(ψr, P, resHF, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the right hand side of the Schur system:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"# Rayleigh coefficients needed for `apply_Ω`\nΛ = map(enumerate(ψr)) do (ik, ψk)\n Hk = hamr.blocks[ik]\n Hψk = Hk * ψk\n ψk'Hψk\nend\nΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)\nΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)\nrhs = resLF - ΩpKe2;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Solve the Schur system to compute R_rm Schur(P): this is the most costly step, but inverting boldsymbolΩ + boldsymbolK on the small space has the same cost than the full SCF cycle on the small grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)\ne1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ\ne1 = DFTK.transfer_blochwave(e1, basis, basis_ref)\nres_schur = e1 + Mres;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Error-estimates","page":"Practical error bounds for the forces","title":"Error estimates","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We start with different estimations of the forces:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the reference solution","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f_ref = compute_forces(scfres_ref)\nforces = Dict(\"F(P_*)\" => f_ref)\nrelerror = Dict(\"F(P_*)\" => 0.0)\ncompute_relerror(f) = norm(f - f_ref) / norm(f_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the variational solution and relative error without any post-processing:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f = compute_forces(scfres)\nforces[\"F(P)\"] = f\nrelerror[\"F(P)\"] = compute_relerror(f);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then try to improve F(P) using the first order linearization:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"F(P) = F(P_*) + rm dF(P)(P-P_*)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"To this end, we use the ForwardDiff.jl package to compute rm dF(P) using automatic differentiation.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function df(basis, occupation, ψ, δψ, ρ)\n δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)\n ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)\nend;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument if we have access to the actual error P-P_*. Usually this is of course not the case, but this is the \"best\" improvement we can hope for with a linearisation, so we are aiming for this precision.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)\nforces[\"F(P) - df(P)⋅(P-P_*)\"] = f - df_err\nrelerror[\"F(P) - df(P)⋅(P-P_*)\"] = compute_relerror(f - df_err);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument when replacing the error P-P_* by the modified residual R_rm Schur(P). The latter quantity is computable in practice.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_schur = df(basis_ref, occ, ψr, res_schur, ρr)\nforces[\"F(P) - df(P)⋅Rschur(P)\"] = f - df_schur\nrelerror[\"F(P) - df(P)⋅Rschur(P)\"] = compute_relerror(f - df_schur);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Summary of all forces on the first atom (Ti)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"for (key, value) in pairs(forces)\n @printf(\"%30s = [%7.5f, %7.5f, %7.5f] (rel. error: %7.5f)\\n\",\n key, (value[1])..., relerror[key])\nend","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Notice how close the computable expression F(P) - rm dF(P)R_rm Schur(P) is to the best linearization ansatz F(P) - rm dF(P)(P-P_*).","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"EditURL = \"../../../examples/collinear_magnetism.jl\"","category":"page"},{"location":"examples/collinear_magnetism/#Collinear-spin-and-magnetic-systems","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"","category":"section"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using DFTK\n\na = 5.42352 # Bohr\nlattice = a / 2 * [[-1 1 1];\n [ 1 -1 1];\n [ 1 1 -1]]\natoms = [ElementPsp(:Fe; psp=load_psp(\"hgh/lda/Fe-q8.hgh\"))]\npositions = [zeros(3)];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"To get the ground-state energy we use an LDA model and rather moderate discretisation parameters.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"kgrid = [3, 3, 3] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 15 # kinetic energy cutoff in Hartree\nmodel_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)\nbasis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)\n\nscfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres_nospin.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel d-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of s-electrons, 1 pair of d-electrons and 4 unpaired d-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"magnetic_moments = [4];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"tip: Units of the magnetisation and magnetic moments in DFTK\nUnlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton μ_B, which in atomic units has the value frac12. Since μ_B is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nρ0 = guess_density(basis, magnetic_moments)\nscfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: Model and magnetic moments\nDFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In direct comparison we notice the first, spin-paired calculation to be a little higher in energy","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"println(\"No magnetization: \", scfres_nospin.energies.total)\nprintln(\"Magnetic case: \", scfres.energies.total)\nprintln(\"Difference: \", scfres.energies.total - scfres_nospin.energies.total);\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the d-orbitals these differ rather drastically. For example for the first k-point:","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"iup = 1\nidown = iup + length(scfres.basis.kpoints) ÷ 2\n@show scfres.occupation[iup][1:7]\n@show scfres.occupation[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the eigenvalues differ","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"@show scfres.eigenvalues[iup][1:7]\n@show scfres.eigenvalues[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: ``k``-points in collinear calculations\nFor collinear calculations the kpoints field of the PlaneWaveBasis object contains each k-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up k-points and then all spin-down k-points, such that iup and idown index the same k-point, but differing spins.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Plots\nbands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6)) # Increase kgrid to get nicer DOS.\nplot_dos(bands_666)","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the band structure shows clear differences between both spin components.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Unitful\nusing UnitfulAtomic\nbands_kpath = compute_bands(scfres; kline_density=6)\nplot_bandstructure(bands_kpath)","category":"page"},{"location":"developer/data_structures/#Data-structures","page":"Data structures","title":"Data structures","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4]\nEcut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol=1e-4);","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.","category":"page"},{"location":"developer/data_structures/#Model-datastructure","page":"Data structures","title":"Model datastructure","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[2]: If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"typeof.(model.term_types)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"DFTK computes energies for all terms of the model individually, which are available in scfres.energies:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"scfres.energies","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For now the following energy terms are available in DFTK:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Kinetic energy\nLocal potential energy, either given by analytic potentials or specified by the type of atoms.\nNonlocal potential energy, for norm-conserving pseudopotentials\nNuclei energies (Ewald or pseudopotential correction)\nHartree energy\nExchange-correlation energy\nPower nonlinearities (useful for Gross-Pitaevskii type models)\nMagnetic field energy\nEntropy term","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"model_LDA: LDA model using the Teter parametrisation\nmodel_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])\nmodel_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).","category":"page"},{"location":"developer/data_structures/#PlaneWaveBasis-and-plane-wave-discretisations","page":"Data structures","title":"PlaneWaveBasis and plane-wave discretisations","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the k-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"PlaneWaveBasis(model; Ecut, kgrid)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis by default uses symmetry to reduce the number of k-points explicitly treated. For details see Crystal symmetries.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"As mentioned, the periodic parts of Bloch waves are expanded in a set of normalized plane waves e_G:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"beginaligned\n psi_k(x) = e^i k cdot x u_k(x)\n = sum_G in mathcal R^* c_G e^i k cdot x e_G(x)\nendaligned","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where mathcal R^* is the set of reciprocal lattice vectors. The c_G are ell^2-normalized. The summation is truncated to a \"spherical\", k-dependent basis set","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":" S_k = leftG in mathcal R^* middle\n frac 1 2 k+ G^2 le E_textcutright","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where E_textcut is the cutoff energy.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Densities involve terms like psi_k^2 = u_k^2 and therefore products e_-G e_G for G G in S_k. To represent these we use a \"cubic\", k-independent basis set large enough to contain the set G-G G G in S_k. We can obtain the coefficients of densities on the e_G basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For example let us check the normalization of the first eigenfunction at the first k-point in reciprocal space:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψtest = scfres.ψ[1][:, 1]\nsum(abs2.(ψtest))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"We now perform an IFFT to get ψ in real space. The k-point has to be passed because ψ is expressed on the k-dependent basis. Again the function is normalised:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψreal = ifft(basis, basis.kpoints[1], ψtest)\nsum(abs2.(ψreal)) * basis.dvol","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of k points of the basis can be obtained with basis.kpoints.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"basis.kpoints","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The G vectors of the \"spherical\", k-dependent grid can be obtained with G_vectors:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[length(G_vectors(basis, kpoint)) for kpoint in basis.kpoints]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ik = 1\nG_vectors(basis, basis.kpoints[ik])[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of G vectors (Fourier modes) of the \"cubic\", k-independent basis set can be obtained similarly with G_vectors(basis).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(G_vectors(basis)), prod(basis.fft_size)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(G_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Analogously the list of r vectors (real-space grid) can be obtained with r_vectors(basis):","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(r_vectors(basis))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(r_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/#Accessing-Bloch-waves-and-densities","page":"Data structures","title":"Accessing Bloch waves and densities","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the k-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using Plots # hide\nrvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[:, 1, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]\nscatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);\n yscale=:log10, ylims=(1e-12, 1), label=\"\", xlabel=\"Energy\", ylabel=\"|ρ|\")","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to frac 1 2k+G^2 E_rm cut.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"EditURL = \"../../../examples/custom_solvers.jl\"","category":"page"},{"location":"examples/custom_solvers/#Custom-solvers","page":"Custom solvers","title":"Custom solvers","text":"","category":"section"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"using DFTK, LinearAlgebra\n\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# We take very (very) crude parameters\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"We define our custom fix-point solver: simply a damped fixed-point","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_fp_solver(f, x0, max_iter; tol)\n mixing_factor = .7\n x = x0\n fx = f(x)\n for n = 1:max_iter\n inc = fx - x\n if norm(inc) < tol\n break\n end\n x = x + mixing_factor * inc\n fx = f(x)\n end\n (; fixpoint=x, converged=norm(fx-x) < tol)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Our eigenvalue solver just forms the dense matrix and diagonalizes it explicitly (this only works for very small systems)","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_eig_solver(A, X0; maxiter, tol, kwargs...)\n n = size(X0, 2)\n A = Array(A)\n E = eigen(A)\n λ = E.values[1:n]\n X = E.vectors[:, 1:n]\n (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Finally we also define our custom mixing scheme. It will be a mixture of simple mixing (for the first 2 steps) and than default to Kerker mixing. In the mixing interface δF is (ρ_textout - ρ_textin), i.e. the difference in density between two subsequent SCF steps and the mix function returns δρ, which is added to ρ_textin to yield ρ_textnext, the density for the next SCF step.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"struct MyMixing\n n_simple # Number of iterations for simple mixing\nend\nMyMixing() = MyMixing(2)\n\nfunction DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)\n if n_iter <= mixing.n_simple\n return δF # Simple mixing -> Do not modify update at all\n else\n # Use the default KerkerMixing from DFTK\n DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)\n end\nend","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"That's it! Now we just run the SCF with these solvers","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"scfres = self_consistent_field(basis;\n tol=1e-4,\n solver=my_fp_solver,\n eigensolver=my_eig_solver,\n mixing=MyMixing());\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Note that the default convergence criterion is the difference in density. When this gets below tol, the \"driver\" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"EditURL = \"../../../examples/metallic_systems.jl\"","category":"page"},{"location":"examples/metallic_systems/#metallic-systems","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"","category":"section"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\na = 3.01794 # bohr\nb = 5.22722 # bohr\nc = 9.77362 # bohr\nlattice = [[-a -a 0]; [-b b 0]; [0 0 -c]]\nMg = ElementPsp(:Mg; psp=load_psp(\"hgh/pbe/Mg-q2\"))\natoms = [Mg, Mg]\npositions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Next we build the PBE model and discretize it. Since magnesium is a metal we apply a small smearing temperature to ease convergence using the Fermi-Dirac smearing scheme. Note that both the Ecut is too small as well as the minimal k-point spacing kspacing far too large to give a converged result. These have been selected to obtain a fast execution time. By default PlaneWaveBasis chooses a kspacing of 2π * 0.022 inverse Bohrs, which is much more reasonable.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kspacing = 0.945 / u\"angstrom\" # Minimal spacing of k-points,\n# in units of wavevectors (inverse Bohrs)\nEcut = 5 # Kinetic energy cutoff in Hartree\ntemperature = 0.01 # Smearing temperature in Hartree\nsmearing = DFTK.Smearing.FermiDirac() # Smearing method\n# also supported: Gaussian,\n# MarzariVanderbilt,\n# and MethfesselPaxton(order)\n\nmodel = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];\n temperature, smearing)\nkgrid = kgrid_from_maximal_spacing(lattice, kspacing)\nbasis = PlaneWaveBasis(model; Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.occupation[1]","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.energies","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u\"Å\")\nbands = compute_bands(scfres, kgrid_dos)\nplot_dos(bands)","category":"page"},{"location":"developer/gpu_computations/#GPU-computations","page":"GPU computations","title":"GPU computations","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.","category":"page"},{"location":"developer/gpu_computations/#Current-implementation","page":"GPU computations","title":"Current implementation","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())\nPlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"note: GPU API is experimental\nIt is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.","category":"page"},{"location":"developer/gpu_computations/#Pitfalls","page":"GPU computations","title":"Pitfalls","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"There are a few things to keep in mind when doing GPU programming in DFTK.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Transfers to and from a device can be done simply by converting an array to","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"cuda_gpu = DFTK.GPU(CuArray)\ncpu_architecture = DFTK.CPU()\nA = rand(10) # A is on the CPU\nB = DFTK.to_device(cuda_gpu, A) # B is a copy of A on the CUDA GPU\nB .+= 1.\nC = DFTK.to_cpu(B) # C is a copy of B on the CPU\nD = DFTK.to_device(cpu_architecture, B) # Equivalent to the previous line, but\n # should be avoided as it is less clear","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Note: similar could also be used, but then a reference array (one which already lives on the device) needs to be available at call time. This was done previously, with helper functions to easily build new arrays on a given architecture: see for example zeros_like.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Functions which will get executed on the GPU should always have arguments","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"which are isbits (immutable and contains no references to other values). When using map, also make sure that every structure used is also isbits. For example, the following map will fail, as model contains strings and arrays which are not isbits.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n # model is not isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"However, the following map will run on a GPU, as the lattice is a static matrix.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n lattice = model.lattice # lattice is isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"List comprehensions should be avoided, as they always return a CPU Array.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Instead, we should use map which returns an array of the same type as the input one.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Sometimes, creating a new array or making a copy can be necessary to achieve good","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"EditURL = \"../../../examples/scf_callbacks.jl\"","category":"page"},{"location":"examples/scf_callbacks/#Monitoring-self-consistent-field-calculations","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"","category":"section"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"This example discusses a few aspects of the callback function taking again our favourite silicon example.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using DFTK\nusing ASEconvert\n\nsystem = pyconvert(AbstractSystem, ase.build.bulk(\"Si\"))\nmodel = model_LDA(attach_psp(system; Si=\"hgh/pbe/si-q4.hgh\"))\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfPlotTrace, which records the total energy at each iteration and uses it to plot the convergence of the SCF graphically once it is converged. For details and other callbacks see src/scf/scf_callbacks.jl.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"note: Callbacks are not exported\nCallbacks are not exported from the DFTK namespace as of now, so you will need to use them, e.g., as DFTK.ScfDefaultCallback and DFTK.ScfPlotTrace.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. For this we first define the empty plot canvas and an empty container for all the density differences:","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using Plots\np = plot(; yaxis=:log)\ndensity_differences = Float64[];\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using LinearAlgebra\n\nfunction plot_callback(info)\n if info.stage == :finalize\n plot!(p, density_differences, label=\"|ρout - ρin|\", markershape=:x)\n else\n push!(density_differences, norm(info.ρout - info.ρin))\n end\n info\nend\ncallback = DFTK.ScfDefaultCallback() ∘ plot_callback;\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback, such that when using the plot_callback function with self_consistent_field we still get the usual convergence table printed. We run the SCF with this callback …","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"scfres = self_consistent_field(basis; tol=1e-5, callback);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"… and show the plot","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"p","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"tip: Debugging with callbacks\nVery handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.","category":"page"},{"location":"features/#package-features","page":"DFTK features","title":"DFTK features","text":"","category":"section"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Standard methods and models:\nStandard DFT models (LDA, GGA, meta-GGA): Any functional from the libxc library\nNorm-conserving pseudopotentials: Goedecker-type (GTH, HGH) or numerical (in UPF pseudopotential format), see Pseudopotentials for details.\nBrillouin zone symmetry for k-point sampling using spglib\nStandard smearing functions (including Methfessel-Paxton and Marzari-Vanderbilt cold smearing)\nCollinear spin polarization for magnetic systems\nSelf-consistent field approaches including Kerker mixing, LDOS mixing, adaptive damping\nDirect minimization, Newton solver\nMulti-level threading (k-points eigenvectors, FFTs, linear algebra)\nMPI-based distributed parallelism (distribution over k-points)\nTreat systems of 1000 electrons\nGround-state properties and post-processing:\nTotal energy\nForces, stresses\nDensity of states (DOS), local density of states (LDOS)\nBand structures\nEasy access to all intermediate quantities (e.g. density, Bloch waves)\nUnique features\nSupport for arbitrary floating point types, including Float32 (single precision) or Double64 (from DoubleFloats.jl).\nForward-mode algorithmic differentiation (see Polarizability using automatic differentiation)\nFlexibility to build your own Kohn-Sham model: Anything from analytic potentials, linear Cohen-Bergstresser model, the Gross-Pitaevskii equation, Anyonic models, etc.\nAnalytic potentials (see Tutorial on periodic problems)\n1D / 2D / 3D systems (see Tutorial on periodic problems)\nThird-party integrations:\nSeamless integration with many standard Input and output formats.\nIntegration with ASE and AtomsBase for passing atomic structures (see AtomsBase integration).\nWannierization using Wannier.jl or Wannier90","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Runs out of the box on Linux, macOS and Windows","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"EditURL = \"../../../examples/atomsbase.jl\"","category":"page"},{"location":"examples/atomsbase/#AtomsBase-integration","page":"AtomsBase integration","title":"AtomsBase integration","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using DFTK","category":"page"},{"location":"examples/atomsbase/#Feeding-an-AtomsBase-AbstractSystem-to-DFTK","page":"AtomsBase integration","title":"Feeding an AtomsBase AbstractSystem to DFTK","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"# Construct bulk system and convert to an AbstractSystem\nusing ASEconvert\nsystem_ase = ase.build.bulk(\"Si\")\nsystem = pyconvert(AbstractSystem, system_ase)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model, discretise and solve:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:","category":"page"},{"location":"examples/atomsbase/#Reading-a-system-using-AtomsIO","page":"AtomsBase integration","title":"Reading a system using AtomsIO","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsIO\n\n# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),\n# which directly yields an AbstractSystem.\nsystem = load_system(\"Si.extxyz\")\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"The same could be achieved using ExtXYZ by system = Atoms(read_frame(\"Si.extxyz\")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.","category":"page"},{"location":"examples/atomsbase/#Directly-setting-up-a-system-in-AtomsBase","page":"AtomsBase integration","title":"Directly setting up a system in AtomsBase","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsBase\nusing Unitful\nusing UnitfulAtomic\n\n# Construct a system in the AtomsBase world\na = 10.26u\"bohr\" # Silicon lattice constant\nlattice = a / 2 * [[0, 1, 1.], # Lattice as vector of vectors\n [1, 0, 1.],\n [1, 1, 0.]]\natoms = [:Si => ones(3)/8, :Si => -ones(3)/8]\nsystem = periodic_system(atoms, lattice; fractional=true)\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/#Obtaining-an-AbstractSystem-from-DFTK-data","page":"AtomsBase integration","title":"Obtaining an AbstractSystem from DFTK data","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"second_system = atomic_system(model)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"Similarly DFTK offers a method to the atomic_system and periodic_system functions (from AtomsBase), which enable a seamless conversion of the usual data structures for setting up DFTK calculations into an AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"lattice = 5.431u\"Å\" / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]];\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nthird_system = atomic_system(lattice, atoms, positions)","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"EditURL = \"../../../examples/dielectric.jl\"","category":"page"},{"location":"examples/dielectric/#Eigenvalues-of-the-dielectric-matrix","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"","category":"section"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"We compute a few eigenvalues of the dielectric matrix (q=0, ω=0) iteratively.","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"using DFTK\nusing Plots\nusing KrylovKit\nusing Printf\n\n# Calculation parameters\nkgrid = [1, 1, 1]\nEcut = 5\n\n# Silicon lattice\na = 10.26\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Compute the dielectric operator without symmetries\nmodel = model_LDA(lattice, atoms, positions, symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"Applying ε^ (1- χ_0 K) …","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"function eps_fun(δρ)\n δV = apply_kernel(basis, δρ; ρ=scfres.ρ)\n χ0δV = apply_χ0(scfres, δV)\n δρ - χ0δV\nend;\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"… eagerly diagonalizes the subspace matrix at each iteration","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);\nnothing #hide","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"EditURL = \"../../../examples/graphene.jl\"","category":"page"},{"location":"examples/graphene/#Graphene-band-structure","page":"Graphene band structure","title":"Graphene band structure","text":"","category":"section"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"using DFTK\nusing Unitful\nusing UnitfulAtomic\nusing LinearAlgebra\nusing Plots\n\n# Define the convergence parameters (these should be increased in production)\nL = 20 # height of the simulation box\nkgrid = [6, 6, 1]\nEcut = 15\ntemperature = 1e-3\n\n# Define the geometry and pseudopotential\na = 4.66 # lattice constant\na1 = a*[1/2,-sqrt(3)/2, 0]\na2 = a*[1/2, sqrt(3)/2, 0]\na3 = L*[0 , 0 , 1]\nlattice = [a1 a2 a3]\nC1 = [1/3,-1/3,0.0] # in reduced coordinates\nC2 = -C1\npositions = [C1, C2]\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\n\n# Run SCF\nmodel = model_PBE(lattice, atoms, positions; temperature)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis)\n\n# Construct 2D path through Brillouin zone\nkpath = irrfbz_path(model; dim=2, space_group_number=13) # graphene space group number\nbands = compute_bands(scfres, kpath; kline_density=20)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"EditURL = \"../../../examples/arbitrary_floattype.jl\"","category":"page"},{"location":"examples/arbitrary_floattype/#Arbitrary-floating-point-types","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"","category":"section"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"[HLC2020]: M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"using DFTK\n\n# Setup silicon lattice\na = 10.263141334305942 # lattice constant in Bohr\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Cast to Float32, setup model and basis\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])\n\n# Run the SCF\nscfres = self_consistent_field(basis, tol=1e-3);\nnothing #hide","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"scfres.energies","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.energies.total)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.ρ)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"note: Generic linear algebra routines\nFor more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"EditURL = \"../../../examples/gross_pitaevskii.jl\"","category":"page"},{"location":"examples/gross_pitaevskii/#gross-pitaevskii","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.","category":"page"},{"location":"examples/gross_pitaevskii/#The-model","page":"Gross-Pitaevskii equation in one dimension","title":"The model","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by ψ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":" H ψ = left(-frac12 Δ + V + 2 C ψ^2right) ψ = μ ψ qquad ψ_L^2 = 1","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"where C provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"which is special cased in DFTK to support 1D models.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"pot(x) = (x - a/2)^2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term C ρ(r)^α dr to the total energy functional, thus a potential term α C ρ^α-1. In our case we thus need the parameters","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"C = 1.0\nα = 2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"… and with this build the model","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using DFTK\nusing LinearAlgebra\n\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n ExternalFromReal(r -> pot(r[1])),\n LocalNonlinearity(ρ -> C * ρ^α),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless); # spinless electrons\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We discretize using a moderate Ecut (For 1D values up to 5000 are completely fine) and run a direct minimization algorithm:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS\nscfres.energies","category":"page"},{"location":"examples/gross_pitaevskii/#Internals","page":"Gross-Pitaevskii equation in one dimension","title":"Internals","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We use the opportunity to explore some of DFTK internals.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Extract the converged density and the obtained wave function:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ρ = real(scfres.ρ)[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1]; # first k-point, all G components, first eigenvector\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Check whether ψ is normalised:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"x = a * vec(first.(DFTK.r_vectors(basis)))\nN = length(x)\ndx = a / N # real-space grid spacing\n@assert sum(abs2.(ψ)) * dx ≈ 1.0","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The density is simply built from ψ:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(scfres.ρ - abs2.(ψ))","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We summarize the ground state in a nice plot:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using Plots\n\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)\n@assert E.total == scfres.energies.total","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Now the Hamiltonian contains all the blocks corresponding to k-points. Here, we just have one k-point:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H = ham.blocks[1];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector\nHmat = Array(H) # This is now just a plain Julia matrix,\n# which we can compute and store in this simple 1D example\n@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Let's check that ψ11 is indeed an eigenstate:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Build a finite-differences version of the GPE operator H, as a sanity check:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))\nA[1, end] = A[end, 1] = -1\nK = A / dx^2 / 2\nV = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))\nH_findiff = K + V;\nmaximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"EditURL = \"../../../examples/gross_pitaevskii_2D.jl\"","category":"page"},{"location":"examples/gross_pitaevskii_2D/#Gross-Pitaevskii-equation-with-external-magnetic-field","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"","category":"section"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 15\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential, and magnetic vector potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2\nω = .6\nApot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]\nApot(X) = Apot(X...);\n\n\n# Parameters\nEcut = 20 # Increase this for production\nη = 500\nC = η/2\nα = 2\nn_electrons = 1; # Increase this for fun\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(),\n ExternalFromReal(X -> pot(X...)),\n LocalNonlinearity(ρ -> C * ρ^α),\n Magnetic(Apot),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # spinless electrons\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-5) # Reduce tol for production\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"EditURL = \"../../../examples/pseudopotentials.jl\"","category":"page"},{"location":"examples/pseudopotentials/#Pseudopotentials","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"section"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated (\"frozen\") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"using DFTK\nusing Unitful\nusing Plots\nusing LazyArtifacts\nimport Main: @artifact_str # hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"note: Using the PseudoLibrary in your own calculations\nInstructions for using the PseudoLibrary in your own calculations can be found in its documentation.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"psp_hgh = load_psp(\"hgh/lda/si-q4.hgh\");\npsp_upf = load_psp(artifact\"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf\");\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"First, we'll take a look at the energy cutoff convergence of these two pseudopotentials. For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The converged cutoffs are 26 Ha and 18 Ha for the HGH and UPF pseudos respectively. We see that the HGH pseudopotential is much harder, i.e. it requires a higher energy cutoff, than the UPF PSP. In general, numeric pseudopotentials tend to be softer than analytical pseudos because of the flexibility of sampling arbitrary functions on a grid.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Next, to see that the different pseudopotentials give reasonbly similar results, we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though the convered cutoffs are higher, we perform these calculations with a cutoff of 12 Ha for both PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"function run_bands(psp)\n a = 10.26 # Silicon lattice constant in Bohr\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp)\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n\n # These are (as you saw above) completely unconverged parameters\n model = model_LDA(lattice, atoms, positions; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))\n\n scfres = self_consistent_field(basis; tol=1e-4)\n bandplot = plot_bandstructure(compute_bands(scfres))\n (; scfres, bandplot)\nend;\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_hgh = run_bands(psp_hgh)\nresult_hgh.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_upf = run_bands(psp_upf)\nresult_upf.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"plot(result_hgh.bandplot, result_upf.bandplot, titles=[\"HGH\" \"UPF\"], size=(800, 400))","category":"page"},{"location":"guide/installation/#Installation","page":"Installation","title":"Installation","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.6 is required for DFTK.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add(\"DFTK\")","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"which will install the latest DFTK release. Alternatively (if you like to be fully up to date) install the master branch:","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add(name=\"DFTK\", rev=\"master\")","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"That's it. With this you are all set to run the code in the Tutorial or the examples directory.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: DFTK version compatibility\nWe follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.","category":"page"},{"location":"guide/installation/#Recommended-optional-packages","page":"Installation","title":"Recommended optional packages","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"AtomsIO and AtomsIOPython, which allow you to read (and write) a large range of standard file formats for atomistic structures. In particular AtomsIO is lightweight and highly recommended.\nASEconvert, which integrates DFTK with a number of convenience features of the ASE, the atomistic simulation environment. See Creating and modelling metallic supercells for an example where ASE is used within a DFTK workflow.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"You can install these packages using","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add([\"AtomsIO\", \"AtomsIOPython\", \"ASEconvert\"])","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: Python dependencies in Julia\nThere are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.","category":"page"},{"location":"guide/installation/#Installation-for-DFTK-development","page":"Installation","title":"Installation for DFTK development","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"EditURL = \"scf_checkpoints.jl\"","category":"page"},{"location":"tricks/scf_checkpoints/#Saving-SCF-results-on-disk-and-SCF-checkpoints","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package. For the moment this process is considered an experimental feature and has a number of caveats, see the warnings below.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"warning: Saving `scfres` is experimental\nThe load_scfres and save_scfres pair of functions are experimental features. This means:The interface of these functions as well as the format in which the data is stored on disk can change incompatibly in the future. At this point we make no promises ...\nJLD2 is not yet completely matured and it is recommended to only use it for short-term storage and not to archive scientific results.\nIf you are using the functions to transfer data between different machines ensure that you use the same version of Julia, JLD2 and DFTK for saving and loading data.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing LinearAlgebra\nusing JLD2\n\nd = 2.079 # oxygen-oxygen bondlength\na = 9.0 # size of the simulation box\nlattice = a * I(3)\nO = ElementPsp(:O; psp=load_psp(\"hgh/pbe/O-q6.hgh\"))\natoms = [O, O]\npositions = d / 2a * [[0, 0, 1], [0, 0, -1]]\nmagnetic_moments = [1., 1.]\n\nEcut = 10 # Far too small to be converged\nmodel = model_PBE(lattice, atoms, positions; temperature=0.02, smearing=Smearing.Gaussian(),\n magnetic_moments)\nbasis = PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])\n\nscfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))\nsave_scfres(\"scfres.jld2\", scfres);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"scfres.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The scfres.jld2 file could now be transfered to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing JLD2\nloaded = load_scfres(\"scfres.jld2\")\npropertynames(loaded)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"loaded.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres(\"scfres.jld2\")) directly from the stored data.","category":"page"},{"location":"tricks/scf_checkpoints/#Checkpointing-of-SCF-calculations","page":"Saving SCF results on disk and SCF checkpoints","title":"Checkpointing of SCF calculations","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To enable automatic checkpointing in DFTK one needs to pass the ScfSaveCheckpoints callback to self_consistent_field, for example:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"callback = DFTK.ScfSaveCheckpoints()\nscfres = self_consistent_field(basis;\n ρ=guess_density(basis, magnetic_moments),\n tol=1e-2, callback);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that using this callback makes the SCF go silent since the passed callback parameter overwrites the default value (namely DefaultScfCallback()) which exactly gives the familiar printing of the SCF convergence. If you want to have both (printing and checkpointing) you need to chain both callbacks:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"callback = DFTK.ScfDefaultCallback() ∘ DFTK.ScfSaveCheckpoints(; keep=true)\nscfres = self_consistent_field(basis;\n ρ=guess_density(basis, magnetic_moments),\n tol=1e-2, callback);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which is deleted automatically once the SCF completes successfully. If one wants to keep the file one needs to specify keep=true as has been done in the ultimate SCF for demonstration purposes: now we can continue the previous calculation from the last checkpoint as if the SCF had been aborted. For this one just loads the checkpoint with load_scfres:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"oldstate = load_scfres(\"dftk_scf_checkpoint.jld2\")\nscfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ,\n ψ=oldstate.ψ, tol=1e-3);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"note: Availability of `load_scfres`, `save_scfres` and `ScfSaveCheckpoints`\nAs JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"(Cleanup files generated by this notebook)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"rm(\"dftk_scf_checkpoint.jld2\")\nrm(\"scfres.jld2\")","category":"page"},{"location":"api/#API-reference","page":"API reference","title":"API reference","text":"","category":"section"},{"location":"api/","page":"API reference","title":"API reference","text":"This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.","category":"page"},{"location":"api/","page":"API reference","title":"API reference","text":"Modules = [DFTK, DFTK.Smearing]","category":"page"},{"location":"api/#DFTK.timer","page":"API reference","title":"DFTK.timer","text":"TimerOutput object used to store DFTK timings.\n\n\n\n\n\n","category":"constant"},{"location":"api/#DFTK.AbstractArchitecture","page":"API reference","title":"DFTK.AbstractArchitecture","text":"Abstract supertype for architectures supported by DFTK.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveBands","page":"API reference","title":"DFTK.AdaptiveBands","text":"Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Applyχ0Model","page":"API reference","title":"DFTK.Applyχ0Model","text":"Full χ0 application, optionally dropping terms or disabling Sternheimer. All keyword arguments passed to apply_χ0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicLocal","page":"API reference","title":"DFTK.AtomicLocal","text":"Atomic local potential defined by model.atoms.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicNonlocal","page":"API reference","title":"DFTK.AtomicNonlocal","text":"Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. textEnergy = sum_a sum_ij sum_n f_n ψ_np_ai D_ij p_ajψ_n\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupAbinit","page":"API reference","title":"DFTK.BlowupAbinit","text":"Blow-up function as used in Abinit.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupCHV","page":"API reference","title":"DFTK.BlowupCHV","text":"Blow-up function as proposed in https://arxiv.org/abs/2210.00442 The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupIdentity","page":"API reference","title":"DFTK.BlowupIdentity","text":"Default blow-up corresponding to the standard kinetic energies.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DielectricMixing","page":"API reference","title":"DFTK.DielectricMixing","text":"We use a simplification of the Resta model DOI 10.1103/physrevb.16.2717 and set χ_0(q) = fracC_0 G^24π (1 - C_0 G^2 k_TF^2) where C_0 = 1 - ε_r with ε_r being the macroscopic relative permittivity. We neglect K_textxc, such that J^-1 frack_TF^2 - C_0 G^2ε_r k_TF^2 - C_0 G^2\n\nBy default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to ρ and ρ_textspin in the same way.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DielectricModel","page":"API reference","title":"DFTK.DielectricModel","text":"A localised dielectric model for χ_0:\n\nsqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\n\nwhere C_0 = 1 - ε_r, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DivAgradOperator","page":"API reference","title":"DFTK.DivAgradOperator","text":"Nonlocal \"divAgrad\" operator -½ (A ) where A is a scalar field on the real-space grid. The -½ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for A=1).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ElementCohenBergstresser-Tuple{Any}","page":"API reference","title":"DFTK.ElementCohenBergstresser","text":"ElementCohenBergstresser(\n key;\n lattice_constant\n) -> ElementCohenBergstresser\n\n\nElement where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).\n\nkey may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementCoulomb-Tuple{Any}","page":"API reference","title":"DFTK.ElementCoulomb","text":"ElementCoulomb(key; mass) -> ElementCoulomb\n\n\nElement interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementGaussian-Tuple{Any, Any}","page":"API reference","title":"DFTK.ElementGaussian","text":"ElementGaussian(α, L; symbol) -> ElementGaussian\n\n\nElement interacting with electrons via a Gaussian potential. Symbol is non-mandatory.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementPsp-Tuple{Any}","page":"API reference","title":"DFTK.ElementPsp","text":"ElementPsp(key; psp, mass)\n\n\nElement interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Energies","page":"API reference","title":"DFTK.Energies","text":"A simple struct to contain a vector of energies, and utilities to print them in a nice format.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Entropy","page":"API reference","title":"DFTK.Entropy","text":"Entropy term -TS, where S is the electronic entropy. Turns the energy E into the free energy F=E-TS. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Ewald","page":"API reference","title":"DFTK.Ewald","text":"Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExplicitKpoints","page":"API reference","title":"DFTK.ExplicitKpoints","text":"Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromFourier","page":"API reference","title":"DFTK.ExternalFromFourier","text":"External potential from the (unnormalized) Fourier coefficients V(G) G is passed in cartesian coordinates\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromReal","page":"API reference","title":"DFTK.ExternalFromReal","text":"External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromValues","page":"API reference","title":"DFTK.ExternalFromValues","text":"External potential given as values.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FermiTwoStage","page":"API reference","title":"DFTK.FermiTwoStage","text":"Two-stage Fermi level finding algorithm starting from a Gaussian-smearing guess.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FixedBands","page":"API reference","title":"DFTK.FixedBands","text":"In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FourierMultiplication","page":"API reference","title":"DFTK.FourierMultiplication","text":"Fourier space multiplication, like a kinetic energy term: (Hψ)(G) = multiplier(G) ψ(G).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.GPU-Union{Tuple{Type{T}}, Tuple{T}} where T<:AbstractArray","page":"API reference","title":"DFTK.GPU","text":"Construct a particular GPU architecture by passing the ArrayType\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.GaussianWannierProjection","page":"API reference","title":"DFTK.GaussianWannierProjection","text":"A Gaussian-shaped initial guess. Can be used as an approximation of an s- or σ-like orbital.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Hartree","page":"API reference","title":"DFTK.Hartree","text":"Hartree term: for a decaying potential V the energy would be\n\n1/2 ∫ρ(x)ρ(y)V(x-y) dxdy\n\nwith the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather\n\n1/2 ∫ρ(x)ρ(y) G(x-y) dx dy\n\nwhere G is the Green's function of the periodic Laplacian with zero mean (-Δ G = sum{R} 4π δR, integral of G zero on a unit cell).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.HydrogenicWannierProjection","page":"API reference","title":"DFTK.HydrogenicWannierProjection","text":"A hydrogenic initial guess.\n\nα is the diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerDosMixing","page":"API reference","title":"DFTK.KerkerDosMixing","text":"The same as KerkerMixing, but the Thomas-Fermi wavevector is computed from the current density of states at the Fermi level.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerMixing","page":"API reference","title":"DFTK.KerkerMixing","text":"Kerker mixing: J^-1 fracG^2k_TF^2 + G^2 where k_TF is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for ΔDOS_Ω is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.\n\nNotes:\n\nAbinit calls 1k_TF the dielectric screening length (parameter dielng)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kinetic","page":"API reference","title":"DFTK.Kinetic","text":"Kinetic energy: 1/2 sumn fn ∫ |∇ψn|^2 * blowup(-i∇Ψ).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kpoint","page":"API reference","title":"DFTK.Kpoint","text":"Discretization information for k-point-dependent quantities such as orbitals. More generally, a k-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LazyHcat","page":"API reference","title":"DFTK.LazyHcat","text":"Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LdosModel","page":"API reference","title":"DFTK.LdosModel","text":"Represents the LDOS-based χ_0 model\n\nχ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\n\nwhere D_textloc is the local density of states and D the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LibxcDensities-Tuple{Any, Integer, Any, Any}","page":"API reference","title":"DFTK.LibxcDensities","text":"LibxcDensities(\n basis,\n max_derivative::Integer,\n ρ,\n τ\n) -> DFTK.LibxcDensities\n\n\nCompute density in real space and its derivatives starting from ρ\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LocalNonlinearity","page":"API reference","title":"DFTK.LocalNonlinearity","text":"Local nonlinearity, with energy ∫f(ρ) where ρ is the density\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Magnetic","page":"API reference","title":"DFTK.Magnetic","text":"Magnetic term A(-i). It is assumed (but not checked) that A = 0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.MagneticFieldOperator","page":"API reference","title":"DFTK.MagneticFieldOperator","text":"Magnetic field operator A⋅(-i∇).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Model-Tuple{AtomsBase.AbstractSystem}","page":"API reference","title":"DFTK.Model","text":"Model(system::AbstractSystem; kwargs...)\n\nAtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{AbstractMatrix{T}}, Tuple{T}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,\n smearing, spin_polarization, symmetries)\n\nCreates the physical specification of a model (without any discretization information).\n\nn_electrons is taken from atoms if not specified.\n\nspin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.\n\nmagnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.\n\nsmearing is Fermi-Dirac if temperature is non-zero, none otherwise\n\nThe symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{Model}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(model; [lattice, positions, atoms, kwargs...])\nModel{T}(model; [lattice, positions, atoms, kwargs...])\n\nConstruct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.MonkhorstPack","page":"API reference","title":"DFTK.MonkhorstPack","text":"Perform BZ sampling employing a Monkhorst-Pack grid.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NbandsAlgorithm","page":"API reference","title":"DFTK.NbandsAlgorithm","text":"NbandsAlgorithm subtypes determine how many bands to compute and converge in each SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NonlocalOperator","page":"API reference","title":"DFTK.NonlocalOperator","text":"Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NoopOperator","page":"API reference","title":"DFTK.NoopOperator","text":"Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PairwisePotential-Tuple{Any, Any}","page":"API reference","title":"DFTK.PairwisePotential","text":"PairwisePotential(\n V,\n params;\n max_radius\n) -> PairwisePotential\n\n\nPairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"A plane-wave discretized Model. Normalization conventions:\n\nThings that are expressed in the G basis are normalized so that if x is the vector, then the actual function is sum_G x_G e_G with e_G(x) = e^iG x sqrt(Omega), where Omega is the unit cell volume. This is so that, eg norm(ψ) = 1 gives the correct normalization. This also holds for the density and the potentials.\nQuantities expressed on the real-space grid are in actual values.\n\nifft and fft convert between these representations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PlaneWaveBasis-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a new basis identical to basis, but with a new k-point grid, e.g. an MonkhorstPack or a ExplicitKpoints grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis-Union{Tuple{Model{T}}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PreconditionerNone","page":"API reference","title":"DFTK.PreconditionerNone","text":"No preconditioning\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PreconditionerTPA","page":"API reference","title":"DFTK.PreconditionerTPA","text":"(simplified version of) Tetter-Payne-Allan preconditioning ↑ M.P. Teter, M.C. Payne and D.C. Allan, Phys. Rev. B 40, 12255 (1989).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspCorrection","page":"API reference","title":"DFTK.PspCorrection","text":"Pseudopotential correction energy. TODO discuss the need for this.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspHgh-Tuple{Any}","page":"API reference","title":"DFTK.PspHgh","text":"PspHgh(path[, identifier, description])\n\nConstruct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PspUpf-Tuple{Any}","page":"API reference","title":"DFTK.PspUpf","text":"PspUpf(path[, identifier])\n\nConstruct a Unified Pseudopotential Format pseudopotential from file.\n\nDoes not support:\n\nFully-realtivistic / spin-orbit pseudos\nBare Coulomb / all-electron potentials\nSemilocal potentials\nUltrasoft potentials\nProjector-augmented wave potentials\nGIPAW reconstruction data\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.RealFourierOperator","page":"API reference","title":"DFTK.RealFourierOperator","text":"Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (real, fourier) They also implement mul! and Matrix(op) for exploratory use.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.RealSpaceMultiplication","page":"API reference","title":"DFTK.RealSpaceMultiplication","text":"Real space multiplication by a potential: (Hψ)(r) = V(r) ψ(r).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.SimpleMixing","page":"API reference","title":"DFTK.SimpleMixing","text":"Simple mixing: J^-1 1\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.TermNoop","page":"API reference","title":"DFTK.TermNoop","text":"A term with a constant zero energy.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Xc","page":"API reference","title":"DFTK.Xc","text":"Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.χ0Mixing","page":"API reference","title":"DFTK.χ0Mixing","text":"Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).\n\n\n\n\n\n","category":"type"},{"location":"api/#AbstractFFTs.fft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.fft!","text":"fft!(\n f_fourier::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_real::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.fft-Union{Tuple{U}, Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray{U}}} where {T, U}","page":"API reference","title":"AbstractFFTs.fft","text":"fft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_real::AbstractArray{U}\n) -> Any\n\n\nfft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)\n\nPerform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.ifft!","text":"ifft!(\n f_real::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_fourier::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of ifft.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft-Tuple{PlaneWaveBasis, AbstractArray}","page":"API reference","title":"AbstractFFTs.ifft","text":"ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any\n\n\nifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)\n\nPerform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_mass-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_mass","text":"atomic_mass(el::DFTK.Element)\n\n\nReturn the atomic mass of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_symbol-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_symbol","text":"atomic_symbol(_::DFTK.Element) -> Symbol\n\n\nChemical symbol corresponding to an element\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_system","page":"API reference","title":"AtomsBase.atomic_system","text":"atomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector\n) -> AtomsBase.FlexibleSystem\natomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector,\n magnetic_moments::AbstractVector\n) -> AtomsBase.FlexibleSystem\n\n\natomic_system(model::DFTK.Model, magnetic_moments=[])\natomic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#AtomsBase.periodic_system","page":"API reference","title":"AtomsBase.periodic_system","text":"periodic_system(model::Model) -> AtomsBase.FlexibleSystem\nperiodic_system(\n model::Model,\n magnetic_moments\n) -> AtomsBase.FlexibleSystem\n\n\nperiodic_system(model::DFTK.Model, magnetic_moments=[])\nperiodic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#Brillouin.KPaths.irrfbz_path","page":"API reference","title":"Brillouin.KPaths.irrfbz_path","text":"irrfbz_path(model::Model) -> Brillouin.KPaths.KPath\nirrfbz_path(\n model::Model,\n magnetic_moments;\n dim,\n space_group_number\n) -> Brillouin.KPaths.KPath\n\n\nExtract the high-symmetry k-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the k-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.\n\nIf the cell is a supercell of a smaller primitive cell, the standard k-path of the associated primitive cell is returned. So, the high-symmetry k points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.\n\nThe dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).\n\nDue to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.CROP","page":"API reference","title":"DFTK.CROP","text":"CROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real\n) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}\nCROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real,\n warming\n) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}\n\n\nCROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.G_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}\n\n\nG_vectors(basis::PlaneWaveBasis)\nG_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of wave vectors G in reduced (integer) coordinates of a basis or a k-point kpt.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors-Tuple{Union{Tuple, AbstractVector}}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any\n\n\nG_vectors([architecture=AbstractArchitecture], fft_size::Tuple)\n\nThe wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors_cart","text":"G_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nG_vectors_cart(basis::PlaneWaveBasis)\nG_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G vectors of a given basis or kpt, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors","text":"Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any\n\n\nGplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_cart-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_cart","text":"Gplusk_vectors_cart(\n basis::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nGplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_in_supercell-Tuple{PlaneWaveBasis, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_in_supercell","text":"Gplusk_vectors_in_supercell(\n basis::PlaneWaveBasis,\n basis_supercell::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nMaps all k+G vectors of an given basis as G vectors of the supercell basis, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.HybridMixing-Tuple{}","page":"API reference","title":"DFTK.HybridMixing","text":"HybridMixing(\n;\n εr,\n kTF,\n localization,\n adjust_temperature,\n kwargs...\n) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D) \n + sqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\nendaligned\n\nwhere C_0 = 1 - ε_r, D_textloc is the local density of states, D is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020 arXiv:2009.01665\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.IncreaseMixingTemperature-Tuple{}","page":"API reference","title":"DFTK.IncreaseMixingTemperature","text":"IncreaseMixingTemperature(\n;\n factor,\n above_ρdiff,\n temperature_max\n) -> DFTK.var\"#callback#643\"{DFTK.var\"#callback#642#644\"{Int64, Float64}}\n\n\nIncrease the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LdosMixing-Tuple{}","page":"API reference","title":"DFTK.LdosMixing","text":"LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\nendaligned\n\nwhere D_textloc is the local density of states, D is the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665.\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfAcceptImprovingStep-Tuple{}","page":"API reference","title":"DFTK.ScfAcceptImprovingStep","text":"ScfAcceptImprovingStep(\n;\n max_energy_change,\n max_relative_residual\n) -> DFTK.var\"#accept_step#735\"{Float64, Float64}\n\n\nAccept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfConvergenceDensity-Tuple{Any}","page":"API reference","title":"DFTK.ScfConvergenceDensity","text":"ScfConvergenceDensity(tolerance) -> DFTK.var\"#689#690\"\n\n\nFlag convergence by using the L2Norm of the change between input density and unpreconditioned output density (ρout)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfConvergenceEnergy-Tuple{Any}","page":"API reference","title":"DFTK.ScfConvergenceEnergy","text":"ScfConvergenceEnergy(\n tolerance\n) -> DFTK.var\"#is_converged#688\"\n\n\nFlag convergence as soon as total energy change drops below tolerance\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfConvergenceForce-Tuple{Any}","page":"API reference","title":"DFTK.ScfConvergenceForce","text":"ScfConvergenceForce(\n tolerance\n) -> DFTK.var\"#is_converged#691\"\n\n\nFlag convergence on the change in cartesian force between two iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfDefaultCallback-Tuple{}","page":"API reference","title":"DFTK.ScfDefaultCallback","text":"ScfDefaultCallback(\n;\n show_damping,\n show_time\n) -> DFTK.var\"#callback#685\"{Bool, Bool}\n\n\nDefault callback function for self_consistent_field and newton, which prints a convergence table.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfDiagtol-Tuple{}","page":"API reference","title":"DFTK.ScfDiagtol","text":"ScfDiagtol(\n;\n ratio_ρdiff,\n diagtol_min,\n diagtol_max\n) -> DFTK.var\"#determine_diagtol#693\"{Float64}\n\n\nDetermine the tolerance used for the next diagonalization. This function takes ρnext - ρin and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfPlotTrace","page":"API reference","title":"DFTK.ScfPlotTrace","text":"Plot the trace of an SCF, i.e. the absolute error of the total energy at each iteration versus the converged energy in a semilog plot. By default a new plot canvas is generated, but an existing one can be passed and reused along with kwargs for the call to plot!. Requires Plots to be loaded.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.ScfSaveCheckpoints","page":"API reference","title":"DFTK.ScfSaveCheckpoints","text":"ScfSaveCheckpoints(\n\n) -> DFTK.var\"#callback#680\"{Bool, Bool, String}\nScfSaveCheckpoints(\n filename;\n keep,\n overwrite\n) -> DFTK.var\"#callback#680\"{Bool, Bool}\n\n\nAdds simplistic checkpointing to a DFTK self-consistent field calculation. Requires JLD2 to be loaded.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.apply_K-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.apply_K","text":"apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any\n\n\napply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)\n\nCompute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_kernel-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.apply_kernel","text":"apply_kernel(\n basis::PlaneWaveBasis,\n δρ;\n RPA,\n kwargs...\n) -> Any\n\n\napply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)\n\nComputes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any, AbstractVecOrMat}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(\n symop::SymOp,\n basis,\n kpoint,\n ψk::AbstractVecOrMat\n) -> Tuple{Any, Any}\n\n\nApply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new k-point).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any\n\n\nApply a symmetry operation to a density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_Ω-Tuple{Any, Any, Hamiltonian, Any}","page":"API reference","title":"DFTK.apply_Ω","text":"apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any\n\n\napply_Ω(δψ, ψ, H::Hamiltonian, Λ)\n\nCompute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_χ0-Union{Tuple{TδV}, Tuple{T}, Tuple{Any, Any, Any, T, Any, AbstractArray{TδV}}} where {T, TδV}","page":"API reference","title":"DFTK.apply_χ0","text":"apply_χ0(\n ham,\n ψ,\n occupation,\n εF,\n eigenvalues,\n δV::AbstractArray{TδV};\n occupation_threshold,\n q,\n kwargs_sternheimer...\n) -> Any\n\n\nGet the density variation δρ corresponding to a potential variation δV.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.attach_psp-Tuple{AtomsBase.AbstractSystem, AbstractDict{Symbol, String}}","page":"API reference","title":"DFTK.attach_psp","text":"attach_psp(\n system::AtomsBase.AbstractSystem,\n pspmap::AbstractDict{Symbol, String}\n) -> AtomsBase.FlexibleSystem\n\n\nattach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})\nattach_psp(system::AbstractSystem; psps::String...)\n\nReturn a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.\n\nExamples\n\nSelect pseudopotentials for all silicon and oxygen atoms in the system.\n\njulia> attach_psp(system, Dict(:Si => \"hgh/lda/si-q4\", :O => \"hgh/lda/o-q6\")\n\nSame thing but using the kwargs syntax:\n\njulia> attach_psp(system, Si=\"hgh/lda/si-q4\", O=\"hgh/lda/o-q6\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.band_data_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.band_data_to_dict","text":"band_data_to_dict(\n band_data::NamedTuple\n) -> Union{Nothing, Dict}\n\n\nConvert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns the dictionary. On all other processors nothing is returned.\n\nSome details on the conventions for the returned data:\n\nεF: Computed Fermi level (if present in band_data)\nlabels: A mapping of high-symmetry k-Point labels to the index in the \"kcoords\" vector of the corresponding k-Point.\neigenvalues, eigenvalueserror, occupation, residualnorms: (nspin, nkpoints, n_bands) arrays of the respective data.\nniter: (nspin, n_kpoints) array of the number of iterations the diagonalisation routine required.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_fft_plans!-Tuple{Array{ComplexF64}}","page":"API reference","title":"DFTK.build_fft_plans!","text":"build_fft_plans!(\n tmp::Array{ComplexF64}\n) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}\n\n\nPlan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_form_factors-Tuple{Any, Array}","page":"API reference","title":"DFTK.build_form_factors","text":"build_form_factors(psp, qs::Array) -> Matrix\n\n\nBuild form factors (Fourier transforms of projectors) for an atom centered at 0.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_projection_vectors_-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, Any, Any}} where T","page":"API reference","title":"DFTK.build_projection_vectors_","text":"build_projection_vectors_(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt::Kpoint,\n psps,\n psp_positions\n) -> Any\n\n\nBuild projection vectors for a atoms array generated by term_nonlocal\n\nbeginaligned\nH_rm at = sum_ij C_ij ketp_i brap_j \nH_rm per = sum_R sum_ij C_ij ketp_i(x-R) brap_j(x-R)\nendaligned\n\nbeginaligned\nbrakete_k(G) middle H_rm pere_k(G)\n = ldots \n = frac1Ω sum_ij C_ij hat p_i(k+G) hat p_j^*(k+G)\nendaligned\n\nwhere hat p_i(q) = _ℝ^3 p_i(r) e^-iqr dr.\n\nWe store frac1sqrt Ω hat p_i(k+G) in proj_vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Tuple{NamedTuple}","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(scfres::NamedTuple) -> Any\n\n\nTranspose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:\n\nbasis_supercell and ψ_supercell are computed by the routines above.\nThe supercell occupations vector is the concatenation of all input occupations vectors.\nThe supercell density is computed with supercell occupations and ψ_supercell.\nSupercell energies are the multiplication of input energies by the number of unit cells in the supercell.\n\nOther parameters stay untouched.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n basis::PlaneWaveBasis{T, VT} where VT<:Real\n) -> PlaneWaveBasis\n\n\nConstruct a plane-wave basis whose unit cell is the supercell associated to an input basis k-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T<:Real","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n ψ,\n basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,\n basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real\n) -> Any\n\n\nRe-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at Γ-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cg!-Union{Tuple{T}, Tuple{AbstractVector{T}, LinearMaps.LinearMap{T}, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.cg!","text":"cg!(\n x::AbstractArray{T, 1},\n A::LinearMaps.LinearMap{T},\n b::AbstractArray{T, 1};\n precon,\n proj,\n callback,\n tol,\n maxiter,\n miniter\n) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), _A} where _A<:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}\n\n\nImplementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_ionic-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_ionic","text":"charge_ionic(el::DFTK.Element) -> Int64\n\n\nReturn the total ionic charge of an atom type (nuclear charge - core electrons)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_nuclear-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_nuclear","text":"charge_nuclear(_::DFTK.Element) -> Int64\n\n\nReturn the total nuclear charge of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cis2pi-Tuple{Any}","page":"API reference","title":"DFTK.cis2pi","text":"cis2pi(x) -> Any\n\n\nFunction to compute exp(2π i x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_amn_kpoint-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_amn_kpoint","text":"compute_amn_kpoint(\n basis::PlaneWaveBasis,\n kpt,\n ψk,\n projections,\n n_bands\n) -> Any\n\n\nCompute the starting matrix for Wannierization.\n\nWannierization searches for a unitary matrix U_m_n. As a starting point for the search, we can provide an initial guess function g for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called A_k_mn, and is computed as follows: A_k_mn = langle ψ_m^k g^textper_n rangle. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.\n\nCenters are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.\n\nGiven an orbital g_n, the periodized orbital is defined by : g^per_n = sumlimits_R in rm lattice g_n( cdot - R). The Fourier coefficient of g^per_n at any G is given by the value of the Fourier transform of g_n in G.\n\nEach projection is a callable object that accepts the basis and some qpoints as an argument, and returns the Fourier transform of g_n at the qpoints.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{Any, Brillouin.KPaths.KPath}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis_or_scfres,\n kpath::Brillouin.KPaths.KPath;\n kline_density,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization, :kinter)}\n\n\nCompute band data along a specific Brillouin.KPath using a kline_density, the number of k-points per inverse bohrs (i.e. overall in units of length).\n\nIf not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{NamedTuple, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n scfres::NamedTuple,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Any, Any, Vector}\n\n\nCompute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis::PlaneWaveBasis,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n n_extra,\n ρ,\n εF,\n eigensolver,\n tol,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Nothing, Nothing, Vector}\n\n\nCompute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:\n\nkgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.\ntol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.\neigensolver: The diagonalisation method to be employed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_current-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_current","text":"compute_current(\n basis::PlaneWaveBasis,\n ψ,\n occupation\n) -> Vector\n\n\nComputes the probability (not charge) current, ∑ fn Im(ψn* ∇ψn)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_density","text":"compute_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n occupation_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\ncompute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)\n\nCompute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per k-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dos-Tuple{Any, Any, Any}","page":"API reference","title":"DFTK.compute_dos","text":"compute_dos(\n ε,\n basis,\n eigenvalues;\n smearing,\n temperature\n) -> Any\n\n\nTotal density of states at energy ε\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_dynmat","text":"compute_dynmat(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n q,\n ρ,\n ham,\n εF,\n eigenvalues,\n kwargs...\n) -> Any\n\n\nCompute the dynamical matrix in the form of a 3n_rm atoms3n_rm atoms tensor in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_dynmat_cart","text":"compute_dynmat_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCartesian form of compute_dynmat.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_fft_size-Union{Tuple{T}, Tuple{Model{T}, Any}, Tuple{Model{T}, Any, Any}} where T","page":"API reference","title":"DFTK.compute_fft_size","text":"compute_fft_size(\n model::Model{T},\n Ecut\n) -> Tuple{Vararg{Any, _A}} where _A\ncompute_fft_size(\n model::Model{T},\n Ecut,\n kgrid;\n ensure_smallprimes,\n algorithm,\n factors,\n kwargs...\n) -> Tuple{Vararg{Any, _A}} where _A\n\n\nDetermine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).\n\nOptionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.\n\nThe function will determine the smallest parallelepiped containing the wave vectors G^22 leq E_textcut textsupersampling^2. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.\n\nIf factors is not empty, ensure that the resulting fft_size contains all the factors\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_forces","text":"compute_forces(scfres) -> Any\n\n\nCompute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_forces_cart","text":"compute_forces_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCompute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_inverse_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_inverse_lattice","text":"compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the inverse of the lattice. Takes special care of 1D or 2D cases.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_kernel-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_kernel","text":"compute_kernel(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n kwargs...\n) -> Any\n\n\ncompute_kernel(basis::PlaneWaveBasis; kwargs...)\n\nComputes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks\n\nleft(beginarraycc\n K_αα K_αβ\n K_βα K_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_ldos-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_ldos","text":"compute_ldos(\n ε,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues,\n ψ;\n smearing,\n temperature,\n weight_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\nLocal density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, Number}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n εF::Number;\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}\n\n\nCompute occupation given eigenvalues and Fermi level\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, AbstractFermiAlgorithm}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector\n) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}\ncompute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n fermialg::AbstractFermiAlgorithm;\n tol_n_elec,\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}\n\n\nCompute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_recip_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_recip_lattice","text":"compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_stresses_cart-Tuple{Any}","page":"API reference","title":"DFTK.compute_stresses_cart","text":"compute_stresses_cart(scfres) -> Any\n\n\nCompute the stresses (= 1/Vol dE/d(M*lattice), taken at M=I) of an obtained SCF solution.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint}} where T","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_out::Kpoint\n) -> Any\n\n\nReturn a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nReturn a list of sparse matrices (one per k-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_unit_cell_volume-Tuple{Any}","page":"API reference","title":"DFTK.compute_unit_cell_volume","text":"compute_unit_cell_volume(lattice) -> Any\n\n\nCompute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δHψ_sα-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_δHψ_sα","text":"compute_δHψ_sα(\n basis::PlaneWaveBasis,\n ψ,\n q,\n s,\n α;\n kwargs...\n) -> Any\n\n\nAssemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δocc!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.compute_δocc!","text":"compute_δocc!(\n δocc,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n εF,\n ε,\n δHψ\n) -> NamedTuple{(:δocc, :δεF), _A} where _A<:Tuple{Any, Any}\n\n\nCompute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δψ!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 5}}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.compute_δψ!","text":"compute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ\n)\ncompute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ,\n ε_minus_q;\n ψ_extra,\n q,\n kwargs_sternheimer...\n)\n\n\nPerform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_χ0-Tuple{Any}","page":"API reference","title":"DFTK.compute_χ0","text":"compute_χ0(ham; temperature) -> Any\n\n\nCompute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:\n\nleft(beginarraycc\n (χ_0)_αα (χ_0)_αβ \n (χ_0)_βα (χ_0)_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cos2pi-Tuple{Any}","page":"API reference","title":"DFTK.cos2pi","text":"cos2pi(x) -> Any\n\n\nFunction to compute cos(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{Any, Any}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psps, psp_positions) -> Any\n\n\ncount_n_proj(psps, psp_positions)\n\nNumber of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any\n\n\ncount_n_proj(psp, l)\n\nNumber of projector functions for angular momentum l, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj(psp)\n\nNumber of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(\n psp::DFTK.NormConservingPsp,\n l::Integer\n) -> Any\n\n\ncount_n_proj_radial(psp, l)\n\nNumber of projector radial functions at angular momentum l.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj_radial(psp)\n\nNumber of projector radial functions at all angular momenta up to psp.lmax.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.create_supercell-NTuple{4, Any}","page":"API reference","title":"DFTK.create_supercell","text":"create_supercell(\n lattice,\n atoms,\n positions,\n supercell_size\n) -> NamedTuple{(:lattice, :atoms, :positions), _A} where _A<:Tuple{Any, Any, Any}\n\n\nConstruct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.datadir_psp-Tuple{}","page":"API reference","title":"DFTK.datadir_psp","text":"datadir_psp() -> String\n\n\nReturn the data directory with pseudopotential files\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_fermialg-Tuple{DFTK.Smearing.SmearingFunction}","page":"API reference","title":"DFTK.default_fermialg","text":"default_fermialg(\n _::DFTK.Smearing.SmearingFunction\n) -> FermiBisection\n\n\nDefault selection of a Fermi level determination algorithm\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_symmetries-NTuple{6, Any}","page":"API reference","title":"DFTK.default_symmetries","text":"default_symmetries(\n lattice,\n atoms,\n positions,\n magnetic_moments,\n spin_polarization,\n terms;\n tol_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nDefault logic to determine the symmetry operations to be used in the model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_wannier_centers-Tuple{Any}","page":"API reference","title":"DFTK.default_wannier_centers","text":"default_wannier_centers(n_wannier) -> Any\n\n\nDefault random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.determine_spin_polarization-Tuple{Any}","page":"API reference","title":"DFTK.determine_spin_polarization","text":"determine_spin_polarization(magnetic_moments) -> Symbol\n\n\n:none if no element has a magnetic moment, else :collinear or :full.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diagonalize_all_kblocks-Tuple{Any, Hamiltonian, Int64}","page":"API reference","title":"DFTK.diagonalize_all_kblocks","text":"diagonalize_all_kblocks(\n eigensolver,\n ham::Hamiltonian,\n nev_per_kpoint::Int64;\n ψguess,\n prec_type,\n interpolate_kpoints,\n tol,\n miniter,\n maxiter,\n n_conv_check\n) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}\n\n\nFunction for diagonalising each k-Point blow of ham one step at a time. Some logic for interpolating between k-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single k-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diameter-Tuple{AbstractMatrix}","page":"API reference","title":"DFTK.diameter","text":"diameter(lattice::AbstractMatrix) -> Any\n\n\nCompute the diameter of the unit cell\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.direct_minimization-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.direct_minimization","text":"direct_minimization(\n basis::PlaneWaveBasis;\n kwargs...\n) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :ψ, :eigenvalues, :occupation, :εF, :optim_res), _A} where _A<:Tuple{Any, PlaneWaveBasis, Any, Bool, Any, Any, Vector{Any}, Vector, Nothing, Optim.MultivariateOptimizationResults{Optim.LBFGS{DFTK.DMPreconditioner, LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, typeof(DFTK.precondprep!)}, _A, _B, _C, _D, Bool} where {_A, _B, _C, _D}}\n\n\nComputes the ground state by direct minimization. kwargs... are passed to Optim.Options(). Note that the resulting ψ are not necessarily eigenvectors of the Hamiltonian.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.disable_threading-Tuple{}","page":"API reference","title":"DFTK.disable_threading","text":"disable_threading() -> Union{Nothing, Bool}\n\n\nConvenience function to disable all threading in DFTK and assert that Julia threading is off as well.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.divergence_real-Tuple{Any, Any}","page":"API reference","title":"DFTK.divergence_real","text":"divergence_real(operand, basis) -> Any\n\n\nCompute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, AbstractArray, Any}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges::AbstractArray,\n positions;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n S,\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n η\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nCompute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.\n\nFor now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n S,\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n max_radius\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nCompute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).\n\nThe potential is expected to decrease quickly at infinity.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_psp_correction-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.energy_psp_correction","text":"energy_psp_correction(\n lattice::AbstractArray{T, 2},\n atoms,\n atom_groups\n) -> Any\n\n\nCompute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.enforce_real!-Tuple{Any, PlaneWaveBasis}","page":"API reference","title":"DFTK.enforce_real!","text":"enforce_real!(\n fourier_coeffs,\n basis::PlaneWaveBasis\n) -> AbstractArray\n\n\nEnsure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.estimate_integer_lattice_bounds-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.estimate_integer_lattice_bounds","text":"estimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ\n) -> Any\nestimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ,\n shift;\n tol\n) -> Any\n\n\nEstimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_fourier-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_fourier","text":"eval_psp_density_core_fourier(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Real\n\n\neval_psp_density_core_fourier(psp, q)\n\nEvaluate the atomic core charge density in reciprocal space: ρval(q) = ∫{R^3} ρcore(r) e^{-iqr} dr = 4π ∫{R+} ρcore(r) sin(qr)/qr r^2 dr\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_real-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_real","text":"eval_psp_density_core_real(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Any\n\n\neval_psp_density_core_real(psp, r)\n\nEvaluate the atomic core charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_fourier","text":"eval_psp_density_valence_fourier(\n psp::DFTK.NormConservingPsp,\n q::AbstractVector\n) -> Real\n\n\neval_psp_density_valence_fourier(psp, q)\n\nEvaluate the atomic valence charge density in reciprocal space: ρval(q) = ∫{R^3} ρval(r) e^{-iqr} dr = 4π ∫{R+} ρval(r) sin(qr)/qr r^2 dr\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_real","text":"eval_psp_density_valence_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_density_valence_real(psp, r)\n\nEvaluate the atomic valence charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_energy_correction","page":"API reference","title":"DFTK.eval_psp_energy_correction","text":"eval_psp_energy_correction([T=Float64,] psp, n_electrons)\n\nEvaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.\n\nNotice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.\n\nThe energy correction is defined as the limit of the Fourier-transform of the local potential as q to 0, using the same correction as in the Fourier-transform of the local potential: math \\lim_{q \\to 0} 4π N_{\\rm elec} ∫_{ℝ_+} (V(r) - C(r)) \\frac{\\sin(qr)}{qr} r^2 dr + F[C(r)] = 4π N_{\\rm elec} ∫_{ℝ_+} (V(r) + Z/r) r^2 dr\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.eval_psp_local_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_fourier","text":"eval_psp_local_fourier(\n psp::DFTK.NormConservingPsp,\n q::AbstractVector\n) -> Any\n\n\neval_psp_local_fourier(psp, q)\n\nEvaluate the local part of the pseudopotential in reciprocal space:\n\nbeginaligned\nV_rm loc(q) = _ℝ^3 V_rm loc(r) e^-iqr dr \n = 4π _ℝ_+ V_rm loc(r) fracsin(qr)q r dr\nendaligned\n\nIn practice, the local potential should be corrected using a Coulomb-like term C(r) = -Zr to remove the long-range tail of V_rm loc(r) from the integral:\n\nbeginaligned\nV_rm loc(q) = _ℝ^3 (V_rm loc(r) - C(r)) e^-iqr dr + FC(r) \n = 4π _ℝ_+ (V_rm loc(r) + Zr) fracsin(qr)qr r^2 dr - Zq^2\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_local_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_real","text":"eval_psp_local_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_local_real(psp, r)\n\nEvaluate the local part of the pseudopotential in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_fourier","text":"eval_psp_projector_fourier(\n psp::DFTK.NormConservingPsp,\n q::AbstractVector\n)\n\n\neval_psp_projector_fourier(psp, i, l, q)\n\nEvaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus q:\n\nbeginaligned\np(q) = _ℝ^3 p_il(r) e^-iqr dr \n = 4π _ℝ_+ r^2 p_il(r) j_l(qr) dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_real-Tuple{DFTK.NormConservingPsp, Any, Any, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_real","text":"eval_psp_projector_real(\n psp::DFTK.NormConservingPsp,\n i,\n l,\n r::AbstractVector\n) -> Any\n\n\neval_psp_projector_real(psp, i, l, r)\n\nEvaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.filled_occupation-Tuple{Any}","page":"API reference","title":"DFTK.filled_occupation","text":"filled_occupation(model) -> Int64\n\n\nMaximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.find_equivalent_kpt-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.find_equivalent_kpt","text":"find_equivalent_kpt(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kcoord,\n spin;\n tol\n) -> NamedTuple{(:index, :ΔG), _A} where _A<:Tuple{Int64, Any}\n\n\nFind the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts-Tuple{AbstractArray, PlaneWaveBasis}","page":"API reference","title":"DFTK.gather_kpts","text":"gather_kpts(\n data::AbstractArray,\n basis::PlaneWaveBasis\n) -> Any\n\n\nGather the distributed data of a quantity depending on k-Points on the master process and return it. On the other (non-master) processes nothing is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.gather_kpts","text":"gather_kpts(\n basis::PlaneWaveBasis\n) -> Union{Nothing, PlaneWaveBasis}\n\n\nGather the distributed k-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only to extract data for post-processing and serialisation to disk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gaussian_valence_charge_density_fourier-Union{Tuple{T}, Tuple{DFTK.Element, T}} where T<:Real","page":"API reference","title":"DFTK.gaussian_valence_charge_density_fourier","text":"gaussian_valence_charge_density_fourier(\n el::DFTK.Element,\n q::Real\n) -> Real\n\n\nGaussian valence charge density using Abinit's coefficient table, in Fourier space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.guess_density","page":"API reference","title":"DFTK.guess_density","text":"guess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity\n) -> Any\nguess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity,\n magnetic_moments;\n n_electrons\n) -> Any\n\n\nguess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,\n magnetic_moments=[]; n_electrons=basis.model.n_electrons)\n\nBuild a superposition of atomic densities (SAD) guess density or a rarndom guess density.\n\nThe guess atomic densities are taken as one of the following depending on the input method:\n\n-RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:\n\nhatρ(G) = Z_mathrmvalence expleft(-(2π textlength G)^2right)\n\nValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the\n\npseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.\n\nWhen magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of μ_B.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.hamiltonian_with_total_potential-Tuple{Hamiltonian, Any}","page":"API reference","title":"DFTK.hamiltonian_with_total_potential","text":"hamiltonian_with_total_potential(\n ham::Hamiltonian,\n V\n) -> Hamiltonian\n\n\nReturns a new Hamiltonian with local potential replaced by the given one\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.hankel-Union{Tuple{T}, Tuple{AbstractVector, AbstractVector, Integer, T}} where T<:Real","page":"API reference","title":"DFTK.hankel","text":"hankel(\n r::AbstractVector,\n r2_f::AbstractVector,\n l::Integer,\n q::Real\n) -> Real\n\n\nhankel(r, r2_f, l, q)\n\nCompute the Hankel transform\n\n Hf = 4pi int_0^infty r f(r) j_l(qr) r dr\n\nThe integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate q.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.has_core_density-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.has_core_density","text":"has_core_density(_::DFTK.Element) -> Any\n\n\nCheck presence of model core charge density (non-linear core correction).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.index_G_vectors-Tuple{Tuple, AbstractVector{<:Integer}}","page":"API reference","title":"DFTK.index_G_vectors","text":"index_G_vectors(\n fft_size::Tuple,\n G::AbstractVector{<:Integer}\n) -> Any\n\n\nReturn the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Tuple{Any, PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in,\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Any\n\n\nInterpolate a function expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_kpoint-Tuple{AbstractVecOrMat, PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.interpolate_kpoint","text":"interpolate_kpoint(\n data_in::AbstractVecOrMat,\n basis_in::PlaneWaveBasis,\n kpoint_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpoint_out::Kpoint\n) -> Any\n\n\nInterpolate some data from one k-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irfft-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray}} where T","page":"API reference","title":"DFTK.irfft","text":"irfft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_fourier::AbstractArray\n) -> Any\n\n\nPerform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irreducible_kcoords-Tuple{MonkhorstPack, AbstractVector{<:SymOp}}","page":"API reference","title":"DFTK.irreducible_kcoords","text":"irreducible_kcoords(\n kgrid::MonkhorstPack,\n symmetries::AbstractVector{<:SymOp};\n check_symmetry\n) -> Union{NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, Vector{Float64}}}, NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Float64}}, Vector{Float64}}}}\n\n\nConstruct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.is_metal-Tuple{Any, Any}","page":"API reference","title":"DFTK.is_metal","text":"is_metal(eigenvalues, εF; tol) -> Bool\n\n\nis_metal(eigenvalues, εF; tol)\n\nDetermine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.k_to_equivalent_kpq_permutation-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.k_to_equivalent_kpq_permutation","text":"k_to_equivalent_kpq_permutation(\n basis::PlaneWaveBasis,\n qcoord\n) -> Any\n\n\nReturn the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_maximal_spacing-Tuple{Any, Any}","page":"API reference","title":"DFTK.kgrid_from_maximal_spacing","text":"kgrid_from_maximal_spacing(\n lattice,\n spacing;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nBuild a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around 2π * 004 AA^-1).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_minimal_n_kpoints-Tuple{Any, Integer}","page":"API reference","title":"DFTK.kgrid_from_minimal_n_kpoints","text":"kgrid_from_minimal_n_kpoints(\n lattice,\n n_kpoints::Integer;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nSelects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of k-points are used. The distribution of k-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpath_get_kcoords-Union{Tuple{Brillouin.KPaths.KPathInterpolant{D}}, Tuple{D}} where D","page":"API reference","title":"DFTK.kpath_get_kcoords","text":"kpath_get_kcoords(\n kinter::Brillouin.KPaths.KPathInterpolant{D}\n) -> Any\n\n\nReturn kpoint coordinates in reduced coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpq_equivalent_blochwave_to_kpq-NTuple{4, Any}","page":"API reference","title":"DFTK.kpq_equivalent_blochwave_to_kpq","text":"kpq_equivalent_blochwave_to_kpq(\n basis,\n kpt,\n q,\n ψk_plus_q_equivalent\n) -> NamedTuple{(:kpt, :ψk), _A} where _A<:Tuple{Kpoint, Any}\n\n\nCreate the Fourier expansion of ψ_k+q from ψ_k+q, where k+q is in basis.kpoints. while k+q may or may not be inside.\n\nIf ΔG k+q - (k+q), then we have that\n\n _G hatu_k+q(G) e^i(k+q+G)r = _G hatu_k+q(G-ΔG) e^i(k+q+ΔG+G)r\n\nhence\n\n u_k+q(G) = u_k+q(G + ΔG)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.krange_spin-Tuple{PlaneWaveBasis, Integer}","page":"API reference","title":"DFTK.krange_spin","text":"krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any\n\n\nReturn the index range of k-points that have a particular spin component.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.list_psp","page":"API reference","title":"DFTK.list_psp","text":"list_psp() -> Any\nlist_psp(element; family, functional, core) -> Any\n\n\nlist_psp(element; functional, family, core)\n\nList the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.\n\nExamples\n\njulia> list_psp(; family=\"hgh\")\n\nwill list all HGH-type pseudopotentials and\n\njulia> list_psp(; family=\"hgh\", functional=\"lda\")\n\nwill only list those for LDA (also known as Pade in this context) and\n\njulia> list_psp(:O, core=:semicore)\n\nwill list all oxygen semicore pseudopotentials known to DFTK.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.load_psp-Tuple{AbstractString}","page":"API reference","title":"DFTK.load_psp","text":"load_psp(\n key::AbstractString;\n kwargs...\n) -> Union{PspHgh{Float64}, PspUpf}\n\n\nLoad a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.load_scfres","page":"API reference","title":"DFTK.load_scfres","text":"load_scfres(filename)\n\nLoad back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.model_DFT-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}, Xc}","page":"API reference","title":"DFTK.model_DFT","text":"model_DFT(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector},\n xc::Xc;\n extra_terms,\n kwargs...\n) -> Model\n\n\nBuild a DFT model from the specified atoms, with the specified functionals.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_LDA-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_LDA","text":"model_LDA(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an LDA model (Perdew & Wang parametrization) from the specified atoms. DOI:10.1103/PhysRevB.45.13244\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_PBE-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_PBE","text":"model_PBE(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an PBE-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.77.3865\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_SCAN-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_SCAN","text":"model_SCAN(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild a SCAN meta-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.115.036402\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_atomic-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_atomic","text":"model_atomic(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n extra_terms,\n kinetic_blowup,\n kwargs...\n) -> Model\n\n\nConvenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.mpi_nprocs","page":"API reference","title":"DFTK.mpi_nprocs","text":"mpi_nprocs() -> Int64\nmpi_nprocs(comm) -> Int64\n\n\nNumber of processors used in MPI. Can be called without ensuring initialization.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.multiply_ψ_by_blochwave-Tuple{PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.multiply_ψ_by_blochwave","text":"multiply_ψ_by_blochwave(\n basis::PlaneWaveBasis,\n ψ,\n f_real,\n q\n) -> Any\n\n\nmultiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)\n\nReturn the Fourier coefficients for the Bloch waves f^rm real_q ψ_k-q in an element of basis.kpoints equivalent to k-q.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_core-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_core","text":"n_elec_core(el::DFTK.Element) -> Any\n\n\nReturn the number of core electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_valence-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_valence","text":"n_elec_valence(el::DFTK.Element) -> Any\n\n\nReturn the number of valence electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_electrons_from_atoms-Tuple{Any}","page":"API reference","title":"DFTK.n_electrons_from_atoms","text":"n_electrons_from_atoms(atoms) -> Any\n\n\nNumber of valence electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.newton-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.newton","text":"newton(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ0;\n tol,\n tol_cg,\n maxiter,\n callback,\n is_converged\n) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String}\n\n\nnewton(basis::PlaneWaveBasis{T}, ψ0;\n tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),\n is_converged=ScfConvergenceDensity(tol))\n\nNewton algorithm. Be careful that the starting point needs to be not too far from the solution.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_compatible_fft_size-Tuple{Int64}","page":"API reference","title":"DFTK.next_compatible_fft_size","text":"next_compatible_fft_size(\n size::Int64;\n smallprimes,\n factors\n) -> Int64\n\n\nFind the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_density","page":"API reference","title":"DFTK.next_density","text":"next_density(\n ham::Hamiltonian\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Float64}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm,\n fermialg::AbstractFermiAlgorithm;\n eigensolver,\n ψ,\n eigenvalues,\n occupation,\n kwargs...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}\n\n\nObtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.norm2-Tuple{Any}","page":"API reference","title":"DFTK.norm2","text":"norm2(G) -> Any\n\n\nSquare of the ℓ²-norm.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.norm_cplx-Tuple{Any}","page":"API reference","title":"DFTK.norm_cplx","text":"norm_cplx(x) -> Any\n\n\nComplex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.normalize_kpoint_coordinate-Tuple{Real}","page":"API reference","title":"DFTK.normalize_kpoint_coordinate","text":"normalize_kpoint_coordinate(x::Real) -> Any\n\n\nBring k-point coordinates into the range [-0.5, 0.5)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.overlap_Mmn_k_kpb-Tuple{PlaneWaveBasis, Vararg{Any, 5}}","page":"API reference","title":"DFTK.overlap_Mmn_k_kpb","text":"overlap_Mmn_k_kpb(\n basis::PlaneWaveBasis,\n ψ,\n ik,\n ikpb,\n G_shift,\n n_bands\n) -> Any\n\n\nComputes the matrix M^kb_mn = langle u_mk u_nk+b rangle for given k, kpb = k+b.\n\nG_shift is the \"shifting\" vector, correction due to the periodicity conditions imposed on k to ψ_k. It is non zero if kpb is taken in another unit cell of the reciprocal lattice. We use here that: u_n(k + G_rm shift)(r) = e^-i*langle G_rm shiftr rangle u_nk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.phonon_modes-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.phonon_modes","text":"phonon_modes(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n dynmat\n) -> NamedTuple{(:frequencies, :vectors), _A} where _A<:Tuple{Any, Any}\n\n\nSolve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.plot_bandstructure","page":"API reference","title":"DFTK.plot_bandstructure","text":"Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u\"eV\" (electron volts).\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.plot_dos","page":"API reference","title":"DFTK.plot_dos","text":"Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_local_polynomial","page":"API reference","title":"DFTK.psp_local_polynomial","text":"psp_local_polynomial(T, psp::PspHgh) -> Any\npsp_local_polynomial(T, psp::PspHgh, t) -> Any\n\n\nThe local potential of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) (t^2 exp(t^2 2)) where t = r_textloc q and Q is a polynomial of at most degree 8. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_projector_polynomial","page":"API reference","title":"DFTK.psp_projector_polynomial","text":"psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any\npsp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any\n\n\nThe nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) exp(-t^2 2) where t = r_l q and Q is a polynomial. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.qcut_psp_local-Union{Tuple{PspHgh{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.qcut_psp_local","text":"qcut_psp_local(psp::PspHgh{T}) -> Any\n\n\nEstimate an upper bound for the argument q after which abs(eval_psp_local_fourier(psp, q)) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.qcut_psp_projector-Union{Tuple{T}, Tuple{PspHgh{T}, Any, Any}} where T","page":"API reference","title":"DFTK.qcut_psp_projector","text":"qcut_psp_projector(psp::PspHgh{T}, i, l) -> Any\n\n\nEstimate an upper bound for the argument q after which eval_psp_projector_fourier(psp, q) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.r_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors","text":"r_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real\n\n\nr_vectors(basis::PlaneWaveBasis)\n\nThe list of r vectors, in reduced coordinates. By convention, this is in [0,1)^3.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.r_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors_cart","text":"r_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nr_vectors_cart(basis::PlaneWaveBasis)\n\nThe list of r vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.radial_hydrogenic-Union{Tuple{T}, Tuple{AbstractVector{T}, Integer}, Tuple{AbstractVector{T}, Integer, Real}} where T<:Real","page":"API reference","title":"DFTK.radial_hydrogenic","text":"radial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer\n) -> Any\nradial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer,\n α::Real\n) -> Any\n\n\nRadial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.\n\nArguments\n\nr: radial grid\nn: principal quantum number\nα: diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.random_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Integer}} where T","page":"API reference","title":"DFTK.random_density","text":"random_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n n_electrons::Integer\n) -> Any\n\n\nBuild a random charge density normalized to the provided number of electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.read_w90_nnkp-Tuple{String}","page":"API reference","title":"DFTK.read_w90_nnkp","text":"read_w90_nnkp(\n fileprefix::String\n) -> NamedTuple{(:nntot, :nnkpts), Tuple{Int64, Vector{NamedTuple{(:ik, :ikpb, :G_shift), Tuple{Int64, Int64, Vector{Int64}}}}}}\n\n\nRead the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. \"wannier90.x -pp prefix\") Returns:\n\nthe array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).\nthe number 'nntot' of neighbors per k point.\n\nTODO: add the possibility to exclude bands\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.reducible_kcoords-Tuple{MonkhorstPack}","page":"API reference","title":"DFTK.reducible_kcoords","text":"reducible_kcoords(\n kgrid::MonkhorstPack\n) -> NamedTuple{(:kcoords,), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}}\n\n\nConstruct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.run_wannier90","page":"API reference","title":"DFTK.run_wannier90","text":"Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.\n\nwarning: Experimental feature\nCurrently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.save_bands-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_bands","text":"save_bands(\n filename::AbstractString,\n band_data::NamedTuple;\n save_ψ,\n kwargs...\n)\n\n\nWrite the computed bands to a file. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.save_scfres-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_scfres","text":"save_scfres(\n filename::AbstractString,\n scfres::NamedTuple;\n kwargs...\n) -> Any\n\n\nsave_scfres(filename, scfres)\n\nSave an scfres obtained from self_consistent_field to a file. The format is determined from the file extension. Currently the following file extensions are recognized and supported:\n\njld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. See Saving SCF results on disk and SCF checkpoints for details.\nvts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density and some metadata (energy, Fermi level, occupation etc.). Supports these keyword arguments:\nsave_ψ: Save the real-space representation of the orbitals as well (may lead to larger files).\nextra_data: Dict{String,Array} with additional data on the 3D real-space grid to store into the VTK file.\njson: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, norm of the most recent density change, eigenvalues, Fermi level etc.\n\nwarning: No compatibility guarantees\nNo guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions or stop working / be removed in the future.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_anderson_solver","page":"API reference","title":"DFTK.scf_anderson_solver","text":"scf_anderson_solver(\n\n) -> DFTK.var\"#anderson#650\"{DFTK.var\"#anderson#649#651\"{Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, Int64}}\nscf_anderson_solver(m; kwargs...) -> DFTK.var\"#anderson#650\"\n\n\nCreate a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scf_damping_quadratic_model-Tuple{Any, Any}","page":"API reference","title":"DFTK.scf_damping_quadratic_model","text":"scf_damping_quadratic_model(\n info,\n info_next;\n modeltol\n) -> NamedTuple{(:α, :relerror), _A} where _A<:Tuple{Any, Any}\n\n\nUse the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_damping_solver","page":"API reference","title":"DFTK.scf_damping_solver","text":"scf_damping_solver(\n\n) -> DFTK.var\"#fp_solver#646\"{DFTK.var\"#fp_solver#645#647\"}\nscf_damping_solver(\n β\n) -> DFTK.var\"#fp_solver#646\"{DFTK.var\"#fp_solver#645#647\"}\n\n\nCreate a damped SCF solver updating the density as x = β * x_new + (1 - β) * x\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.select_eigenpairs_all_kblocks-Tuple{Any, Any}","page":"API reference","title":"DFTK.select_eigenpairs_all_kblocks","text":"select_eigenpairs_all_kblocks(eigres, range) -> Any\n\n\nFunction to select a subset of eigenpairs on each k-Point. Works on the Tuple returned by diagonalize_all_kblocks.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.self_consistent_field-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.self_consistent_field","text":"self_consistent_field(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n ρ,\n ψ,\n tol,\n is_converged,\n maxiter,\n mixing,\n damping,\n solver,\n eigensolver,\n determine_diagtol,\n nbandsalg,\n fermialg,\n callback,\n compute_consistent_energies,\n response\n) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :norm_Δρ), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}\n\n\nself_consistent_field(basis; [tol, mixing, damping, ρ, ψ])\n\nSolve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where ρ_textnext = α P^-1 (ρ_textout - ρ_textin).\n\nOverview of parameters:\n\nρ: Initial density\nψ: Initial orbitals\ntol: Tolerance for the density change (ρ_textout - ρ_textin) to flag convergence. Default is 1e-6.\nis_converged: Convergence control callback. Typical objects passed here are DFTK.ScfConvergenceDensity(tol) (the default), DFTK.ScfConvergenceEnergy(tol) or DFTK.ScfConvergenceForce(tol).\nmaxiter: Maximal number of SCF iterations\nmixing: Mixing method, which determines the preconditioner P^-1 in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()\ndamping: Damping parameter α in the above equation. Default is 0.8.\nnbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.\ncallback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.simpson","page":"API reference","title":"DFTK.simpson","text":"simpson(x, y)\n\nIntegrate y(x) over x using Simpson's method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.sin2pi-Tuple{Any}","page":"API reference","title":"DFTK.sin2pi","text":"sin2pi(x) -> Any\n\n\nFunction to compute sin(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any, Any}} where T","page":"API reference","title":"DFTK.solve_ΩplusK","text":"solve_ΩplusK(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n rhs,\n occupation;\n callback,\n tol\n) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), _A} where _A<:Tuple{Any, Bool, Any, Any, Int64}\n\n\nsolve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;\n tol=1e-10, verbose=false) where {T}\n\nReturn δψ where (Ω+K) δψ = rhs\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK_split-Union{Tuple{T}, Tuple{Hamiltonian, AbstractArray{T}, Vararg{Any, 5}}} where T","page":"API reference","title":"DFTK.solve_ΩplusK_split","text":"solve_ΩplusK_split(\n ham::Hamiltonian,\n ρ::AbstractArray{T},\n ψ,\n occupation,\n εF,\n eigenvalues,\n rhs;\n tol,\n tol_sternheimer,\n verbose,\n occupation_threshold,\n q,\n kwargs...\n)\n\n\nSolve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spglib_standardize_cell-Union{Tuple{T}, Tuple{AbstractArray{T}, Any, Any}, Tuple{AbstractArray{T}, Any, Any, Any}} where T","page":"API reference","title":"DFTK.spglib_standardize_cell","text":"spglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\nspglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions,\n magnetic_moments;\n correct_symmetry,\n primitive,\n tol_symmetry\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\n\n\nReturns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.sphericalbesselj_fast-Union{Tuple{T}, Tuple{Integer, T}} where T","page":"API reference","title":"DFTK.sphericalbesselj_fast","text":"sphericalbesselj_fast(l::Integer, x) -> Any\n\n\nsphericalbesselj_fast(l::Integer, x::Number)\n\nReturns the spherical Bessel function of the first kind jl(x). Consistent with https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spin_components-Tuple{Symbol}","page":"API reference","title":"DFTK.spin_components","text":"spin_components(\n spin_polarization::Symbol\n) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}\n\n\nExplicit spin components of the KS orbitals and the density\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.split_evenly-Tuple{Any, Any}","page":"API reference","title":"DFTK.split_evenly","text":"split_evenly(itr, N) -> Any\n\n\nSplit an iterable evenly into N chunks, which will be returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.standardize_atoms","page":"API reference","title":"DFTK.standardize_atoms","text":"standardize_atoms(\n lattice,\n atoms,\n positions\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\nstandardize_atoms(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n kwargs...\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\n\n\nApply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetries_preserving_kgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_kgrid","text":"symmetries_preserving_kgrid(symmetries, kcoords) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete BZ grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetries_preserving_rgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_rgrid","text":"symmetries_preserving_rgrid(symmetries, fft_size) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete real-space grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_forces-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_forces","text":"symmetrize_forces(model::Model, forces; symmetries)\n\n\nSymmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i]\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_stresses-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_stresses","text":"symmetrize_stresses(model::Model, stresses; symmetries)\n\n\nSymmetrize the stress tensor, given as a Matrix in cartesian coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_ρ-Union{Tuple{T}, Tuple{Any, AbstractArray{T}}} where T","page":"API reference","title":"DFTK.symmetrize_ρ","text":"symmetrize_ρ(\n basis,\n ρ::AbstractArray{T};\n symmetries,\n do_lowpass\n) -> Any\n\n\nSymmetrize a density by applying all the basis (by default) symmetries and forming the average.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetry_operations","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n lattice,\n atoms,\n positions\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\nsymmetry_operations(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n tol_symmetry,\n check_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nReturn the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetry_operations-Tuple{Integer}","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n hall_number::Integer\n) -> Vector{SymOp{Float64}}\n\n\nReturn the Symmetry operations given a hall_number.\n\nThis function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.\n\nThe definition of hall_number is found at Space group type.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.synchronize_device-Tuple{DFTK.AbstractArchitecture}","page":"API reference","title":"DFTK.synchronize_device","text":"synchronize_device(_::DFTK.AbstractArchitecture)\n\n\nSynchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_cpu-Tuple{AbstractArray}","page":"API reference","title":"DFTK.to_cpu","text":"to_cpu(x::AbstractArray) -> Array\n\n\nTransfer an array from a device (typically a GPU) to the CPU.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_device-Tuple{DFTK.CPU, Any}","page":"API reference","title":"DFTK.to_device","text":"to_device(_::DFTK.CPU, x) -> Any\n\n\nTransfer an array to a particular device (typically a GPU)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Energies}","page":"API reference","title":"DFTK.todict","text":"todict(energies::Energies) -> Dict{String}\n\n\nConvert an Energies struct to a dictionary representation\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Model}","page":"API reference","title":"DFTK.todict","text":"todict(model::Model) -> Dict\n\n\nConvert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).\n\nSome details on the conventions for the returned data:\n\nlattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension\natomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.\natomic_symbols: Atomic symbols if known.\nterms: Some rough information on the terms used for the computation.\nn_electrons: Number of electrons, may be missing if εF is fixed instead\nεF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.todict","text":"todict(basis::PlaneWaveBasis) -> Dict\n\n\nConvert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.\n\nSome details on the conventions for the returned data:\n\ndvol: Volume element for real-space integration\nvariational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.\nkweights: Weights for the k-points, summing to 1.0\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.total_local_potential-Tuple{Hamiltonian}","page":"API reference","title":"DFTK.total_local_potential","text":"total_local_potential(ham::Hamiltonian) -> Any\n\n\nGet the total local potential of the given Hamiltonian, in real space in the spin components.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.transfer_blochwave","text":"transfer_blochwave(\n ψ_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nTransfer Bloch wave between two basis sets. Limited feature set.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Tuple{Any, PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis::PlaneWaveBasis,\n kpt_in,\n kpt_out,\n ΔG\n) -> Any\n\n\nTransfer an array ψk_in expanded on kpt_in, and produce ψ(r) e^i ΔGr expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint}} where T","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_out::Kpoint\n) -> Any\n\n\nTransfer an array ψk defined on basisin k-point kptin to basisout k-point kptout.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_density-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.transfer_density","text":"transfer_density(\n ρ_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nTransfer density (in real space) between two basis sets.\n\nThis function is fast by transferring only the Fourier coefficients from the small basis to the big basis.\n\nNote that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity c_G = c_-G^ast does not fully hold).\n\nNote further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Tuple{PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}\n\n\nCompute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint}} where T","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_out::Kpoint\n) -> Tuple{Any, Any}\n\n\nCompute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.trapezoidal","page":"API reference","title":"DFTK.trapezoidal","text":"trapezoidal(x, y)\n\nIntegrate y(x) over x using trapezoidal method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.unfold_bz-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.unfold_bz","text":"unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis\n\n\n\" Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.versioninfo","page":"API reference","title":"DFTK.versioninfo","text":"versioninfo()\nversioninfo(io::IO)\n\n\nDFTK.versioninfo([io::IO=stdout])\n\nSummary of version and configuration of DFTK and its key dependencies.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.weighted_ksum-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.weighted_ksum","text":"weighted_ksum(basis::PlaneWaveBasis, array) -> Any\n\n\nSum an array over kpoints, taking weights into account\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_eig-Tuple{String, Any}","page":"API reference","title":"DFTK.write_w90_eig","text":"write_w90_eig(fileprefix::String, eigenvalues; n_bands)\n\n\nWrite the eigenvalues in a format readable by Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_win-Tuple{String, PlaneWaveBasis}","page":"API reference","title":"DFTK.write_w90_win","text":"write_w90_win(\n fileprefix::String,\n basis::PlaneWaveBasis;\n bands_plot,\n wannier_plot,\n kwargs...\n)\n\n\nWrite a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_wannier90_files-Tuple{Any, Any}","page":"API reference","title":"DFTK.write_wannier90_files","text":"write_wannier90_files(\n preprocess_call,\n scfres;\n n_bands,\n n_wannier,\n projections,\n fileprefix,\n wannier_plot,\n kwargs...\n)\n\n\nShared file writing code for Wannier.jl and Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ylm_real-Union{Tuple{T}, Tuple{Integer, Integer, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.ylm_real","text":"ylm_real(\n l::Integer,\n m::Integer,\n rvec::AbstractArray{T, 1}\n) -> Any\n\n\nReturns the (l,m) real spherical harmonic Ylm(r). Consistent with https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.zeros_like","page":"API reference","title":"DFTK.zeros_like","text":"zeros_like(X::AbstractArray) -> Any\nzeros_like(\n X::AbstractArray,\n T::Type,\n dims::Integer...\n) -> Any\n\n\nCreate an array of same \"array type\" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.@timing-Tuple","page":"API reference","title":"DFTK.@timing","text":"Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.\n\n\n\n\n\n","category":"macro"},{"location":"api/#DFTK.Smearing.A-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.A","text":"A term in the Hermite delta expansion\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.H-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.H","text":"Standard Hermite function using physicist's convention.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.entropy-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.entropy","text":"Entropy. Note that this is a function of the energy x, not of occupation(x). This function satisfies s' = x f' (see https://www.vasp.at/vasp-workshop/k-points.pdf p. 12 and https://arxiv.org/pdf/1805.07144.pdf p. 18.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation","page":"API reference","title":"DFTK.Smearing.occupation","text":"occupation(S::SmearingFunction, x)\n\nOccupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.Smearing.occupation_derivative-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.occupation_derivative","text":"Derivative of the occupation function, approximation to minus the delta function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation_divided_difference-Tuple{DFTK.Smearing.SmearingFunction, Vararg{Any, 4}}","page":"API reference","title":"DFTK.Smearing.occupation_divided_difference","text":"(f(x) - f(y))/(x - y), computed stably in the case where x and y are close\n\n\n\n\n\n","category":"method"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"EditURL = \"../../../examples/supercells.jl\"","category":"page"},{"location":"examples/supercells/#Creating-and-modelling-metallic-supercells","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"section"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An n-fold repetition along one of the axes of the original lattice.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"The following code achieves this for aluminium:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"using DFTK\nusing LinearAlgebra\nusing ASEconvert\n\nfunction aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])\n a = 7.65339\n lattice = a * Matrix(I, 3, 3)\n Al = ElementPsp(:Al; psp=load_psp(\"hgh/lda/al-q3\"))\n atoms = [Al, Al, Al, Al]\n positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]\n unit_cell = periodic_system(lattice, atoms, positions)\n\n # Make supercell in ASE:\n # We convert our lattice to the conventions used in ASE, make the supercell\n # and then convert back ...\n supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))\n supercell = pyconvert(AbstractSystem, supercell_ase)\n\n # Unfortunately right now the conversion to ASE drops the pseudopotential information,\n # so we need to reattach it:\n supercell = attach_psp(supercell; Al=\"hgh/lda/al-q3\")\n\n # Construct an LDA model and discretise\n # Note: We disable symmetries explicitly here. Otherwise the problem sizes\n # we are able to run on the CI are too simple to observe the numerical\n # instabilities we want to trigger here.\n model = model_LDA(supercell; temperature=1e-3, symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid)\nend;\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As part of the code we are using a routine inside the ASE, the atomistic simulation environment for creating the supercell and make use of the two-way interoperability of DFTK and ASE. For more details on this aspect see the documentation on Input and output formats.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"Write an example supercell structure to a file to plot it:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"setup = aluminium_setup(5)\nconvert_ase(periodic_system(setup.model)).write(\"al_supercell.png\")","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As we will see in this notebook the modelling of a system generally becomes harder if the system becomes larger.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"This sounds like a trivial statement as per se the cost per SCF step increases as the system (and thus N) gets larger.\nBut there is more to it: If one is not careful also the number of SCF iterations increases as the system gets larger.\nThe aim of a proper computational treatment of such supercells is therefore to ensure that the number of SCF iterations remains constant when the system size increases.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For achieving the latter DFTK by default employs the LdosMixing preconditioner [HL2021] during the SCF iterations. This mixing approach is completely parameter free, but still automatically adapts to the treated system in order to efficiently prevent charge sloshing. As a result, modelling aluminium slabs indeed takes roughly the same number of SCF iterations irrespective of the supercell size:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"[HL2021]: ","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"M. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. J. Phys. Cond. Matt 33 085503 (2021). ArXiv:2009.01665","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(2); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.","category":"page"},{"location":"developer/symmetries/#Crystal-symmetries","page":"Crystal symmetries","title":"Crystal symmetries","text":"","category":"section"},{"location":"developer/symmetries/#Theory","page":"Crystal symmetries","title":"Theory","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"In this discussion we will only describe the situation for a monoatomic crystal mathcal C subset mathbb R^3, the extension being easy. A symmetry of the crystal is an orthogonal matrix W and a real-space vector w such that","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"W mathcalC + w = mathcalC","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries where W = 1 and w is a lattice vector are always assumed and ignored in the following.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can define a corresponding unitary operator U on L^2(mathbb R^3) with action","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":" (Uu)(x) = uleft( W x + w right)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that U commutes with the Hamiltonian.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This operator acts on a plane-wave as","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\n(U e^iqcdot x) (x) = e^iq cdot w e^i (W^T q) x\n= e^- i(S q) cdot tau e^i (S q) cdot x\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"where we set","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nS = W^T\ntau = -W^-1w\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"It follows that the Fourier transform satisfies","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"widehatUu(q) = e^- iq cdot tau widehat u(S^-1 q)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(all of these equations being also valid in reduced coordinates). In particular, if e^ikcdot x u_k(x) is an eigenfunction, then by decomposing u_k over plane-waves e^i G cdot x one can see that e^i(S^T k) cdot x (U u_k)(x) is also an eigenfunction: we can choose","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"u_Sk = U u_k","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This is used to reduce the computations needed. For a uniform sampling of the Brillouin zone (the reducible k-points), one can find a reduced set of k-points (the irreducible k-points) such that the eigenvectors at the reducible k-points can be deduced from those at the irreducible k-points.","category":"page"},{"location":"developer/symmetries/#Symmetrization","page":"Crystal symmetries","title":"Symmetrization","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Quantities that are calculated by summing over the reducible k points can be calculated by first summing over the irreducible k points and then symmetrizing. Let mathcalK_textreducible denote the reducible k-points sampling the Brillouin zone, mathcalS be the group of all crystal symmetries that leave this BZ mesh invariant (mathcalSmathcalK_textreducible = mathcalK_textreducible) and mathcalK be the irreducible k-points obtained from mathcalK_textreducible using the symmetries mathcalS. Clearly","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"mathcalK_textred = Sk S in mathcalS k in mathcalK","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let Q be a k-dependent quantity to sum (for instance, energies, densities, forces, etc). Q transforms in a particular way under symmetries: Q(Sk) = S(Q(k)) where the (linear) action of S on Q depends on the particular Q.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nsum_k in mathcalK_textred Q(k)\n= sum_k in mathcalK sum_S text with Sk in mathcalK_textred S(Q(k)) \n= sum_k in mathcalK frac1N_mathcalSk sum_S in mathcalS S(Q(k))\n= frac1N_mathcalS sum_S in mathcalS\n left(sum_k in mathcalK fracN_mathcalSN_mathcalSk Q(k) right)\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Here, N_mathcalS = mathcalS is the total number of symmetry operations and N_mathcalSk denotes the number of operations such that leave k invariant. The latter operations form a subgroup of the group of all symmetry operations, sometimes called the small/little group of k. The factor fracN_mathcalSN_Sk, also equal to the ratio of number of reducible points encoded by this particular irreducible k to the total number of reducible points, determines the weight of each irreducible k point.","category":"page"},{"location":"developer/symmetries/#Example","page":"Crystal symmetries","title":"Example","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using DFTK\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nEcut = 5\nkgrid = [4, 4, 4]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let us demonstrate this in practice. We consider silicon, setup appropriately in the lattice, atoms and positions objects as in Tutorial and to reach a fast execution, we take a small Ecut of 5 and a [4, 4, 4] Monkhorst-Pack grid. First we perform the DFT calculation disabling symmetry handling","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_nosym = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid)\nscfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"and then redo it using symmetry (the default):","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_sym = model_LDA(lattice, atoms, positions)\nbasis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)\nscfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Clearly both yield the same energy but the version employing symmetry is faster, since less k-points are explicitly treated:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(length(basis_sym.kpoints), length(basis_nosym.kpoints))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can also explicitly verify both methods to yield the same density:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using LinearAlgebra # hide\n(norm(scfres_sym.ρ - scfres_nosym.ρ),\n norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries can be used to map reducible to irreducible points:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"ikpt_red = rand(1:length(basis_nosym.kpoints))\n# find a (non-unique) corresponding irreducible point in basis_nosym,\n# and the symmetry that relates them\nikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])\n[basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The eigenvalues match also:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"[scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"EditURL = \"../../../examples/compare_solvers.jl\"","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-DFT-solvers","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"First we setup our problem","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"using DFTK\nusing LinearAlgebra\n\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])\n\n# Convergence we desire in the density\ntol = 1e-6","category":"page"},{"location":"examples/compare_solvers/#Density-based-self-consistent-field","page":"Comparison of DFT solvers","title":"Density-based self-consistent field","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scf = self_consistent_field(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Potential-based-SCF","page":"Comparison of DFT solvers","title":"Potential-based SCF","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scfv = DFTK.scf_potential_mixing(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Direct-minimization","page":"Comparison of DFT solvers","title":"Direct minimization","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_dm = direct_minimization(basis; tol=tol^2);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Newton-algorithm","page":"Comparison of DFT solvers","title":"Newton algorithm","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_start = self_consistent_field(basis; tol=0.5);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Remove the virtual orbitals (which Newton cannot treat yet)","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ\nscfres_newton = newton(basis, ψ; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-results","page":"Comparison of DFT solvers","title":"Comparison of results","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"println(\"|ρ_newton - ρ_scf| = \", norm(scfres_newton.ρ - scfres_scf.ρ))\nprintln(\"|ρ_newton - ρ_scfv| = \", norm(scfres_newton.ρ - scfres_scfv.ρ))\nprintln(\"|ρ_newton - ρ_dm| = \", norm(scfres_newton.ρ - scfres_dm.ρ))","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"EditURL = \"../../../examples/forwarddiff.jl\"","category":"page"},{"location":"examples/forwarddiff/#Polarizability-using-automatic-differentiation","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"","category":"section"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"using DFTK\nusing LinearAlgebra\nusing ForwardDiff\n\n# Construct PlaneWaveBasis given a particular electric field strength\n# Again we take the example of a Helium atom.\nfunction make_basis(ε::T; a=10., Ecut=30) where {T}\n lattice=T(a) * I(3) # lattice is a cube of ``a`` Bohrs\n # Helium at the center of the box\n atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n positions = [[1/2, 1/2, 1/2]]\n\n model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1]) # No k-point sampling on isolated system\nend\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n @assert isdiag(basis.model.lattice)\n a = basis.model.lattice[1, 1]\n rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]\n sum(rr .* ρ) * basis.dvol\nend\n\n# Function to compute the dipole for a given field strength\nfunction compute_dipole(ε; tol=1e-8, kwargs...)\n scfres = self_consistent_field(make_basis(ε; kwargs...); tol)\n dipole(scfres.basis, scfres.ρ)\nend;\nnothing #hide","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"With this in place we can compute the polarizability from finite differences (just like in the previous example):","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability_fd = let\n ε = 0.01\n (compute_dipole(ε) - compute_dipole(0.0)) / ε\nend","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability = ForwardDiff.derivative(compute_dipole, 0.0)\nprintln()\nprintln(\"Polarizability via ForwardDiff: $polarizability\")\nprintln(\"Polarizability via finite difference: $polarizability_fd\")","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"EditURL = \"tutorial.jl\"","category":"page"},{"location":"guide/tutorial/#Tutorial","page":"Tutorial","title":"Tutorial","text":"","category":"section"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"note: Convergence parameters in the documentation\nWe use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\n# 1. Define lattice and atomic positions\na = 5.431u\"angstrom\" # Silicon lattice constant\nlattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors\n [1 0 1.]; # specified column by column\n [1 1 0.]];\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"By default, all numbers passed as arguments are assumed to be in atomic units. Quantities such as temperature, energy cutoffs, lattice vectors, and the k-point grid spacing can optionally be annotated with Unitful units, which are automatically converted to the atomic units used internally. For more details, see the Unitful package documentation and the UnitfulAtomic.jl package.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"# Load HGH pseudopotential for Silicon\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n\n# Specify type and positions of atoms\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# 2. Select model and basis\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 7 # kinetic energy cutoff\n# Ecut = 190.5u\"eV\" # Could also use eV or other energy-compatible units\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n# Note the implicit passing of keyword arguments here:\n# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)\n\n# 3. Run the SCF procedure to obtain the ground state\nscfres = self_consistent_field(basis, tol=1e-5);\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"scfres.energies","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Eigenvalues:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"hcat(scfres.eigenvalues...)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number). The \"splatting\" operation ... calls hcat with all the inner arrays as arguments, which collects them into a matrix.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can check the occupations ...","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"hcat(scfres.occupation...)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[1, :, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"compute_forces_cart(scfres)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_bandstructure(scfres; kline_density=10)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"or plot a density of states, for which we increase the kgrid a bit to get smoother plots:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))\nplot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Note that directly employing the scfres also works, but the results are much cruder:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"EditURL = \"../../../examples/polarizability.jl\"","category":"page"},{"location":"examples/polarizability/#Polarizability-by-linear-response","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"μ = r ρ(r) dr","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"with respect to a small uniform electric field E = -x.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using DFTK\nusing LinearAlgebra\n\na = 10.\nlattice = a * I(3) # cube of ``a`` bohrs\n# Helium at the center of the box\natoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\npositions = [[1/2, 1/2, 1/2]]\n\n\nkgrid = [1, 1, 1] # no k-point sampling for an isolated system\nEcut = 30\ntol = 1e-8\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]\n sum(rr .* ρ) * basis.dvol\nend;\nnothing #hide","category":"page"},{"location":"examples/polarizability/#Using-finite-differences","page":"Polarizability by linear response","title":"Using finite differences","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We first compute the polarizability by finite differences. First compute the dipole moment at rest:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"model = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nres = self_consistent_field(basis; tol)\nμref = dipole(basis, res.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Then in a small uniform field:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"ε = .01\nmodel_ε = model_LDA(lattice, atoms, positions;\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\nbasis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)\nres_ε = self_consistent_field(basis_ε; tol)\nμε = dipole(basis_ε, res_ε.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"polarizability = (με - μref) / ε\n\nprintln(\"Reference dipole: $μref\")\nprintln(\"Displaced dipole: $με\")\nprintln(\"Polarizability : $polarizability\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).","category":"page"},{"location":"examples/polarizability/#Using-linear-response","page":"Polarizability by linear response","title":"Using linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, χ_0 is the independent-particle polarizability, and K the Hartree-exchange-correlation kernel. We denote with δV_rm ext an external perturbing potential (like in this case the uniform electric field). Then:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = χ_0 δV = χ_0 (δV_rm ext + K δρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"which implies","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = (1-χ_0 K)^-1 χ_0 δV_rm ext","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"From this we identify the polarizability operator to be χ = (1-χ_0 K)^-1 χ_0. Numerically, we apply χ to δV = -x by solving a linear equation (the Dyson equation) iteratively.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using KrylovKit\n\n# Apply ``(1- χ_0 K)``\nfunction dielectric_operator(δρ)\n δV = apply_kernel(basis, δρ; res.ρ)\n χ0δV = apply_χ0(res, δV)\n δρ - χ0δV\nend\n\n# `δVext` is the potential from a uniform field interacting with the dielectric dipole\n# of the density.\nδVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]\nδVext = cat(δVext; dims=4)\n\n# Apply ``χ_0`` once to get non-interacting dipole\nδρ_nointeract = apply_χ0(res, δVext)\n\n# Solve Dyson equation to get interacting dipole\nδρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]\n\nprintln(\"Non-interacting polarizability: $(dipole(basis, δρ_nointeract))\")\nprintln(\"Interacting polarizability: $(dipole(basis, δρ))\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"EditURL = \"../../../examples/input_output.jl\"","category":"page"},{"location":"examples/input_output/#Input-and-output-formats","page":"Input and output formats","title":"Input and output formats","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.","category":"page"},{"location":"examples/input_output/#Reading-/-writing-files-supported-by-AtomsIO","page":"Input and output formats","title":"Reading / writing files supported by AtomsIO","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using AtomsIO # Use Julia-only IO parsers\nusing AtomsIOPython # Use python-based IO parsers (e.g. ASE)\nsystem = load_system(\"Fe_afm.pwi\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Next we attach pseudopotential information, since currently the parser is not yet capable to read this information from the file.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using DFTK\nsystem = attach_psp(system, Fe=\"hgh/pbe/fe-q16.hgh\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Finally we make use of DFTK's AtomsBase integration to run the calculation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"model = model_LDA(system; temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))\nρ0 = guess_density(basis, system)\nscfres = self_consistent_field(basis, ρ=ρ0);\nnothing #hide","category":"page"},{"location":"examples/input_output/#Writing-VTK-files-for-visualization","page":"Input and output formats","title":"Writing VTK files for visualization","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using WriteVTK\nsave_scfres(\"iron_afm.vts\", scfres; save_ψ=true);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.","category":"page"},{"location":"examples/input_output/#Parsable-data-export-using-json","page":"Input and output formats","title":"Parsable data-export using json","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"DFTK.todict(scfres.energies)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nopen(\"iron_afm_energies.json\", \"w\") do io\n JSON3.pretty(io, DFTK.todict(scfres.energies))\nend\nprintln(read(\"iron_afm_energies.json\", String))","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nsave_scfres(\"iron_afm.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"save_bands(\"iron_afm_scfres.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"bands = compute_bands(scfres, kline_density=10)\nsave_bands(\"iron_afm_bands.json\", bands)","category":"page"},{"location":"examples/input_output/#Writing-and-reading-JLD2-files","page":"Input and output formats","title":"Writing and reading JLD2 files","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5).","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JLD2\nsave_scfres(\"iron_afm.jld2\", scfres);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Cleanup files generated by this notebook.)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"rm.([\"iron_afm.vts\", \"iron_afm.jld2\",\n \"iron_afm.json\", \"iron_afm_energies.json\", \"iron_afm_scfres.json\",\n \"iron_afm_bands.json\"])","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"EditURL = \"periodic_problems.jl\"","category":"page"},{"location":"guide/periodic_problems/#periodic-problems","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/#Periodicity-and-lattices","page":"Problems and plane-wave discretisations","title":"Periodicity and lattices","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A periodic problem is characterized by being invariant to certain translations. For example the sin function is periodic with periodicity 2π, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" sin(x) = sin(x + 2πm) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This is nothing else than saying that any translation by an integer multiple of 2π keeps the sin function invariant. More formally, one can use the translation operator T_2πm to write this as:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_2πm sin(x) = sin(x - 2πm) = sin(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function f mathbbR mathbbR, but a priori the solution is known to be periodic with periodicity a. As a consequence of said periodicity it is sufficient to determine the values of f for all x from the interval -a2 a2) to uniquely define f on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -3a/2 -a/2 +a/2 +3a/2\n ... |---------|---------|---------| ...\n a a a","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with lattice constant a. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding f it is thus sufficient to consider only the problem inside a unit cell -a2 a2) (this is the convention used by DFTK, but this is arbitrary, and for instance 0a) would have worked just as well).","category":"page"},{"location":"guide/periodic_problems/#Periodic-operators-and-the-Bloch-transform","page":"Problems and plane-wave discretisations","title":"Periodic operators and the Bloch transform","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H = -frac12 Δ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case H one can easily show exactly that, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma H = H T_ma quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We note in passing that the free-electron model is actually very special in the sense that the choice of a is completely arbitrary here. In other words H is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations a and we will take this viewpoint here.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H ψ_kn = ε_kn ψ_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"satisfy a factorization","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" ψ_kn(x) = e^i kx u_kn(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"into a plane wave e^i kx and a lattice-periodic function","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma u_kn(x) = u_kn(x - ma) = u_kn(x) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this n is a labeling integer index and k is a real number, whose details will be clarified in the next section. The index n is sometimes also called the band index and functions ψ_kn satisfying this factorization are also known as Bloch functions or Bloch states.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Consider the application of 2H = -Δ = - fracd^2d x^2 to such a Bloch wave. First we notice for any function f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -i left( e^i kx f right)\n = -ifracddx left( e^i kx f right)\n = k e^i kx f + e^i kx (-i) f = e^i kx (-i + k) f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Using this result twice one shows that applying -Δ yields","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"beginaligned\n -Delta left(e^i kx u_kn(x)right)\n = -i left-i left(u_kn(x) e^i kx right) right \n = -i lefte^i kx (-i + k) u_kn(x) right \n = e^i kx (-i + k)^2 u_kn(x) \n = e^i kx 2H_k u_kn(x)\nendaligned","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"where we defined","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k = frac12 (-i + k)^2","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The action of this operator on a function u_kn is given by","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = e^-i kx H e^i kx u_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"which in particular implies that","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = ε_kn u_kn quad quad H (e^i kx u_kn) = ε_kn (e^i kx u_kn)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"To seek the eigenpairs of H we may thus equivalently find the eigenpairs of all H_k. The point of this is that the eigenfunctions u_kn of H_k are periodic (unlike the eigenfunctions ψ_kn of H). In contrast to ψ_kn the functions u_kn can thus be fully represented considering the eigenproblem only on the unit cell.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A detailed mathematical analysis shows that the transformation from H to the set of all H_k for a suitable set of values for k (details below) is actually a unitary transformation, the so-called Bloch transform. This transform brings the Hamiltonian into the symmetry-adapted basis for translational symmetry, which are exactly the Bloch functions. Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries (like the point group symmetry in molecules), the Bloch transform also makes the Hamiltonian H block-diagonal[1]:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_B H T_B^-1 left( beginarraycccc H_10 H_2H_30ddots endarray right)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with each block H_k taking care of one value k. This block-diagonal structure under the basis of Bloch functions lets us completely describe the spectrum of H by looking only at the spectrum of all H_k blocks.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"[1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.","category":"page"},{"location":"guide/periodic_problems/#The-Brillouin-zone","page":"Problems and plane-wave discretisations","title":"The Brillouin zone","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We now consider the parameter k of the Hamiltonian blocks in detail.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"As discussed k is a real number. It turns out, however, that some of these kmathbbR give rise to operators related by unitary transformations (again due to translational symmetry).\nSince such operators have the same eigenspectrum, only one version needs to be considered.\nThe smallest subset from which k is chosen is the Brillouin zone (BZ).\nThe BZ is the unit cell of the reciprocal lattice, which may be constructed from the real-space lattice by a Fourier transform.\nIn our simple 1D case the reciprocal lattice is just\n ... |--------|--------|--------| ...\n 2π/a 2π/a 2π/a\ni.e. like the real-space lattice, but just with a different lattice constant b = 2π a.\nThe BZ in our example is thus B = -πa πa). The members of B are typically called k-points.","category":"page"},{"location":"guide/periodic_problems/#Discretization-and-plane-wave-basis-sets","page":"Problems and plane-wave discretisations","title":"Discretization and plane-wave basis sets","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With what we discussed so far the strategy to find all eigenpairs of a periodic Hamiltonian H thus reduces to finding the eigenpairs of all H_k with k B. This requires two discretisations:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"B is infinite (and not countable). To discretize we first only pick a finite number of k-points. Usually this k-point sampling is done by picking k-points along a regular grid inside the BZ, the k-grid.\nEach H_k is still an infinite-dimensional operator. Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis and diagonalize the resulting matrix.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For the second step multiple types of bases are used in practice (finite differences, finite elements, Gaussians, ...). In DFTK we currently support only plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For our 1D example normalized plane waves are defined as the functions","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"e_G(x) = frace^i G xsqrta qquad G in bmathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"and typically one forms basis sets from these by specifying a kinetic energy cutoff E_textcut:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"left e_G big (G + k)^2 leq 2E_textcut right","category":"page"},{"location":"guide/periodic_problems/#Correspondence-of-theory-to-DFTK-code","page":"Problems and plane-wave discretisations","title":"Correspondence of theory to DFTK code","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Before solving a few example problems numerically in DFTK, a short overview of the correspondence of the introduced quantities to data structures inside DFTK.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"H is represented by a Hamiltonian object and variables for hamiltonians are usually called ham.\nH_k by a HamiltonianBlock and variables are hamk.\nψ_kn is usually just called ψ. u_kn is not stored (in favor of ψ_kn).\nε_kn is called eigenvalues.\nk-points are represented by Kpoint and respective variables called kpt.\nThe basis of plane waves is managed by PlaneWaveBasis and variables usually just called basis.","category":"page"},{"location":"guide/periodic_problems/#Solving-the-free-electron-Hamiltonian","page":"Problems and plane-wave discretisations","title":"Solving the free-electron Hamiltonian","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"One typical approach to get physical insight into a Hamiltonian H is to plot a so-called band structure, that is the eigenvalues of H_k versus k. In DFTK we achieve this using the following steps:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. Therefore quantities related to the problem space are have a fixed dimension 3. The convention is that for 1D / 2D problems the trailing entries are always zero and ignored in the computation. For the lattice we therefore construct a 3x3 matrix with only one entry.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using DFTK\n\nlattice = zeros(3, 3)\nlattice[1, 1] = 20.;\nnothing #hide","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 2: Select a model. In this case we choose a free-electron model, which is the same as saying that there is only a Kinetic term (and no potential) in the model.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"model = Model(lattice; terms=[Kinetic()])","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 3: Define a plane-wave basis using this model and a cutoff E_textcut of 300 Hartree. The k-point grid is given as a regular grid in the BZ (a so-called Monkhorst-Pack grid). Here we select only one k-point (1x1x1), see the note below for some details on this choice.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 4: Plot the bands! Select a density of k-points for the k-grid to use for the bandstructure calculation, discretize the problem and diagonalize it. Afterwards plot the bands.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\nusing Plots\n\nplot_bandstructure(basis; n_bands=6, kline_density=100)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"note: Selection of k-point grids in `PlaneWaveBasis` construction\nYou might wonder why we only selected a single k-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different k-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.","category":"page"},{"location":"guide/periodic_problems/#Adding-potentials","page":"Problems and plane-wave discretisations","title":"Adding potentials","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The modified problem we will look at consists of diagonalizing\nH_k = frac12 (-i nabla + k)^2 + V\nfor all k in B with a periodic potential V interacting with the electrons.\nA number of \"standard\" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct\ndensity-functial theory (DFT) models for treating electronic structures (see the Tutorial).\nGross-Pitaevskii models for bosonic systems (see Gross-Pitaevskii equation in one dimension)\neven some more unusual cases like anyonic models.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A single potential looks like:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Plots\nusing LinearAlgebra\nnucleus = ElementGaussian(0.3, 10.0)\nplot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this element at hand we can easily construct a setting where two potentials of this form are located at positions 20 and 80 inside the lattice 0 100:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using LinearAlgebra\n\n# Define the 1D lattice [0, 100]\nlattice = diagm([100., 0, 0])\n\n# Place them at 20 and 80 in *fractional coordinates*,\n# that is 0.2 and 0.8, since the lattice is 100 wide.\nnucleus = ElementGaussian(0.3, 10.0)\natoms = [nucleus, nucleus]\npositions = [[0.2, 0, 0], [0.8, 0, 0]]\n\n# Assemble the model, discretize and build the Hamiltonian\nmodel = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));\nham = Hamiltonian(basis)\n\n# Extract the total potential term of the Hamiltonian and plot it\npotential = DFTK.total_local_potential(ham)[:, 1, 1]\nrvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, potential, label=\"\", xlabel=\"x\", ylabel=\"V(x)\")","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This potential is the sum of two \"atomic\" potentials (the two \"Gaussian\" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this setup, let's look at the bands:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\n\nplot_bandstructure(basis; n_bands=6, kline_density=500)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands are noticeably different.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands no longer overlap, meaning that the spectrum of H is no longer continuous but has gaps.\nThe two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.\nThe higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense \"free electrons\" correspond to perfect delocalization.","category":"page"},{"location":"guide/introductory_resources/#introductory-resources","page":"Introductory resources","title":"Introductory resources","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.","category":"page"},{"location":"guide/introductory_resources/#Workshop-material-and-tutorials","page":"Introductory resources","title":"Workshop material and tutorials","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFTK school 2022: Numerical methods for density-functional theory simulations: Summer school centred around the DFTK code and modern approaches to density-functional theory. See the programme and lecture notes, in particular:\nIntroduction to DFT\nIntroduction to periodic problems\nAnalysis of plane-wave DFT\nAnalysis of SCF convergence\nExercises","category":"page"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFT in a nutshell by Kieron Burke and Lucas Wagner: Short tutorial-style article introducing the basic DFT setting, basic equations and terminology. Great introduction from the physical / chemical perspective.\nWorkshop on mathematics and numerics of DFT: Two-day workshop at MIT centred around DFTK by M. F. Herbst, in particular the summary of DFT theory.","category":"page"},{"location":"guide/introductory_resources/#Textbooks","page":"Introductory resources","title":"Textbooks","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Electronic Structure: Basic theory and practical methods by R. M. Martin (Cambridge University Press, 2004): Standard textbook introducing most common methods of the field (lattices, pseudopotentials, DFT, ...) from the perspective of a physicist.\nA Mathematical Introduction to Electronic Structure Theory by L. Lin and J. Lu (SIAM, 2019): Monograph attacking DFT from a mathematical angle. Covers topics such as DFT, pseudos, SCF, response, ...","category":"page"},{"location":"guide/introductory_resources/#Recordings","page":"Introductory resources","title":"Recordings","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Julia for Materials Modelling by M. F. Herbst: One-hour talk providing an overview of materials modelling tools for Julia. Key features of DFTK are highlighted as part of the talk. Pluto notebooks\nDFTK: A Julian approach for simulating electrons in solids by M. F. Herbst: Pre-recorded talk for JuliaCon 2020. Assumes no knowledge about DFT and gives the broad picture of DFTK. Slides.\nJuliacon 2021 DFT workshop by M. F. Herbst: Three-hour workshop session at the 2021 Juliacon providing a mathematical look on DFT, SCF solution algorithms as well as the integration of DFTK into the Julia package ecosystem. Material starts to become a little outdated. Workshop material","category":"page"},{"location":"developer/useful_formulas/#Useful-formulas","page":"Useful formulas","title":"Useful formulas","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.","category":"page"},{"location":"developer/useful_formulas/#Fourier-transforms","page":"Useful formulas","title":"Fourier transforms","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"The Fourier transform is\nwidehatf(q) = int_mathbb R^3 e^-i q cdot x f(x) dx\nFourier transforms of centered functions: If f(x) = R(x) Y_l^m(xx), then\nbeginaligned\n hat f( q)\n = int_mathbb R^3 R(x) Y_l^m(xx) e^-i q cdot x dx \n = sum_l = 0^infty 4 pi i^l\n sum_m = -l^l int_mathbb R^3\n R(x) j_l(q x)Y_l^m(-qq) Y_l^m(xx)\n Y_l^mast(xx)\n dx \n = 4 pi Y_l^m(-qq) i^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n = 4 pi Y_l^m(qq) (-i)^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n endaligned\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"developer/useful_formulas/#Spherical-harmonics","page":"Useful formulas","title":"Spherical harmonics","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"Plane wave expansion formula\ne^i q cdot r =\n 4 pi sum_l = 0^infty sum_m = -l^l\n i^l j_l(q r) Y_l^m(qq) Y_l^mast(rr)\nSpherical harmonics orthogonality\nint_mathbbS^2 Y_l^m*(r)Y_l^m(r) dr\n = delta_ll delta_mm\nThis also holds true for real spherical harmonics.\nSpherical harmonics parity\nY_l^m(-r) = (-1)^l Y_l^m(r)\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"EditURL = \"../../../examples/wannier.jl\"","category":"page"},{"location":"examples/wannier/#Wannierization-using-Wannier.jl-or-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"warning: No guarantees on Wannier interface\nThis code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\nd = 10u\"Å\"\na = 2.641u\"Å\" # Graphene Lattice constant\nlattice = [a -a/2 0;\n 0 √3*a/2 0;\n 0 0 d]\n\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\npositions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]\nmodel = model_PBE(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])\nnbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)\nscfres = self_consistent_field(basis; nbandsalg, tol=1e-5);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Plot bandstructure of the system","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"bands = compute_bands(scfres; kline_density=10)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier.jl","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier.jl","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder \"wannierjl\" under the prefix \"wannier\" (i.e. \"wannierjl/wannier.win\", \"wannierjl/wannier.wout\", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We now produce a simple Wannier model for 5 MLFWs.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"3 bond-centered 2s hydrogenic orbitals for the expected σ bonds\n2 atom-centered 2pz hydrogenic orbitals for the expected π bands","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using Wannier # Needed to make Wannier.Model available","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"From chemical intuition, we know that the bonds with the lowest energy are:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"the 3 σ bonds,\nthe π and π* bonds.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We provide relevant initial projections to help Wannierization converge to functions with a similar shape.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)\npz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)\nprojections = [\n # Note: fractional coordinates for the centers!\n # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds\n s_guess((positions[1] + positions[2]) / 2),\n s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),\n s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),\n # 2 atom-centered 2pz hydrogenic orbitals\n pz_guess(positions[1]),\n pz_guess(positions[2]),\n]","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Wannierize:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"wannier_model = Wannier.Model(scfres;\n fileprefix=\"wannier/graphene\",\n n_bands=scfres.n_bands_converge,\n n_wannier=5,\n projections,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Once we have the wannier_model, we can use the functions in the Wannier.jl package:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Compute MLWF:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"U = disentangle(wannier_model, max_iter=200);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Inspect localization before and after Wannierization:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"omega(wannier_model)\nomega(wannier_model, U)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Build a Wannier interpolation model:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"kpath = irrfbz_path(model)\ninterp_model = Wannier.InterpModel(wannier_model; kpath=kpath)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"And so on... Refer to the Wannier.jl documentation for further examples.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files when done.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"examples/wannier/#Custom-initial-guesses","page":"Wannierization using Wannier.jl or Wannier90","title":"Custom initial guesses","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can also provide custom initial guesses for Wannierization, by passing a callable function in the projections array. The function receives the basis and a list of points (fractional coordinates in reciprocal space), and returns the Fourier transform of the initial guess function evaluated at each point.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For example, we could use Gaussians for the σ and pz guesses with the following code:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.GaussianWannierProjection(center)\nfunction pz_guess(center)\n # Approximate with two Gaussians offset by 0.5 Å from the center of the atom\n offset = model.inv_lattice * [0, 0, austrip(0.5u\"Å\")]\n center1 = center + offset\n center2 = center - offset\n # Build the custom projector\n (basis, qs) -> DFTK.GaussianWannierProjection(center1)(basis, qs) - DFTK.GaussianWannierProjection(center2)(basis, qs)\nend\n# Feed to Wannier via the `projections` as before...","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using wannier90_jll # Needed to make run_wannier90 available\nrun_wannier90(scfres;\n fileprefix=\"wannier/graphene\",\n n_wannier=5,\n projections,\n num_print_cycles=25,\n num_iter=200,\n #\n dis_win_max=19.0,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1, # 1 eV above Fermi level\n dis_num_iter=300,\n dis_mix_ratio=1.0,\n #\n wannier_plot=true,\n wannier_plot_format=\"cube\",\n wannier_plot_supercell=5,\n write_xyz=true,\n translate_home_cell=true,\n );\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"developer/setup/#Developer-setup","page":"Developer setup","title":"Developer setup","text":"","category":"section"},{"location":"developer/setup/#Source-code-installation","page":"Developer setup","title":"Source code installation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"To achieve such a setup you have two recommended options:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Clone DFTK into a location of your choice\n$ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/\nWhenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:\nimport Pkg\nPkg.develop(\"/some/path/\")\nTo run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use\n$ julia --project=/some/path/\nThe advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.\nAdd a development version of DFTK to the global Julia environment:\nimport Pkg\nPkg.develop(\"DFTK\")\nThis clones DFTK to the path ~/.julia/dev/DFTK\" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.","category":"page"},{"location":"developer/setup/#Disabling-precompilation","page":"Developer setup","title":"Disabling precompilation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"[DFTK]\nprecompile_workload = false","category":"page"},{"location":"developer/setup/#Running-the-tests","page":"Developer setup","title":"Running the tests","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using TestEnv # Optional: automatically installs required packages\nTestEnv.activate() # for tests in a temporary environment.\nusing TestItemRunner\ncd(\"test\") # By default, the following macro runs everything from the parent folder.\n@run_package_tests filter = ti -> :core ∈ ti.tags","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Or to only run the tests of a particular file serialisation.jl use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"@run_package_tests filter = ti -> occursin(\"serialisation.jl\", ti.filename)","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using .MySetup: my_function","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using ..MySetup: my_function","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"EditURL = \"../../../examples/cohen_bergstresser.jl\"","category":"page"},{"location":"examples/cohen_bergstresser/#Cohen-Bergstresser-model","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"","category":"section"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"[CB1966]: M. L. Cohen and T. K. Bergstresser Phys. Rev. 141, 789 (1966) DOI 10.1103/PhysRev.141.789","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using DFTK\n\nSi = ElementCohenBergstresser(:Si)\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nlattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"Next we build the rather simple model and discretize it with moderate Ecut:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We diagonalise at the Gamma point to find a Fermi level …","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"ham = Hamiltonian(basis)\neigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)\nεF = DFTK.compute_occupation(basis, eigres.λ).εF","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"… and compute and plot 8 bands:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using Plots\nusing Unitful\n\nbands = compute_bands(basis; n_bands=8, εF, kline_density=10)\np = plot_bandstructure(bands; unit=u\"eV\")\nylims!(p, (-5, 6))","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"EditURL = \"../../../examples/custom_potential.jl\"","category":"page"},{"location":"examples/custom_potential/#custom-potential","page":"Custom potential","title":"Custom potential","text":"","category":"section"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"using DFTK\nusing LinearAlgebra","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"First, we define a new element which represents a nucleus generating a Gaussian potential.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"struct CustomPotential <: DFTK.Element\n α # Prefactor\n L # Width of the Gaussian nucleus\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Some default values","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"CustomPotential() = CustomPotential(1.0, 0.5);\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"function DFTK.local_potential_real(el::CustomPotential, r::Real)\n -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\nend\nfunction DFTK.local_potential_fourier(el::CustomPotential, q::Real)\n # = ∫ V(r) exp(-ix⋅q) dx\n -el.α * exp(- (q * el.L)^2 / 2)\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tip: Gaussian potentials and DFTK\nDFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We set up the lattice. For a 1D case we supply two zero lattice vectors","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"In this example, we want to generate two Gaussian potentials generated by two \"nuclei\" localized at positions x_1 and x_2, that are expressed in 01) in fractional coordinates. x_1 - x_2 should be different from 05 to break symmetry and get nonzero forces.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"x1 = 0.2\nx2 = 0.8\npositions = [[x1, 0, 0], [x2, 0, 0]]\ngauss = CustomPotential()\natoms = [gauss, gauss];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We setup a Gross-Pitaevskii model","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"C = 1.0\nα = 2;\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n AtomicLocal(),\n LocalNonlinearity(ρ -> C * ρ^α)]\nmodel = Model(lattice, atoms, positions; n_electrons, terms,\n spin_polarization=:spinless); # use \"spinless electrons\"\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We discretize using a moderate Ecut and run a SCF algorithm to compute forces afterwards. As there is no ionic charge associated to gauss we have to specify a starting density and we choose to start from a zero density.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))\nρ = zeros(eltype(basis), basis.fft_size..., 1)\nscfres = self_consistent_field(basis; tol=1e-5, ρ)\nscfres.energies","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Computing the forces can then be done as usual:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"compute_forces(scfres)","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract the converged total local potential","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract other quantities before plotting them","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ρ = scfres.ρ[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1] # first k-point, all G components, first eigenvector","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\n\nusing Plots\nx = a * vec(first.(DFTK.r_vectors(basis)))\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")\nplot!(p, x, tot_local_pot, label=\"tot local pot\")","category":"page"},{"location":"#DFTK.jl:-The-density-functional-toolkit.","page":"Home","title":"DFTK.jl: The density-functional toolkit.","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"#getting-started","page":"Home","title":"Getting started","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Convergence parameters in the documentation\nIn the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!","category":"page"},{"location":"developer/conventions/#Notation-and-conventions","page":"Notation and conventions","title":"Notation and conventions","text":"","category":"section"},{"location":"developer/conventions/#Usage-of-unicode-characters","page":"Notation and conventions","title":"Usage of unicode characters","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.","category":"page"},{"location":"developer/conventions/#symbol-conventions","page":"Notation and conventions","title":"Symbol conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Reciprocal-space vectors: k for vectors in the Brillouin zone, G for vectors of the reciprocal lattice, q for general vectors\nReal-space vectors: R for lattice vectors, r and x are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.\nOmega is the unit cell, and Omega (or sometimes just Omega) is its volume.\nA are the real-space lattice vectors (model.lattice) and B the Brillouin zone lattice vectors (model.recip_lattice).\nThe Bloch waves are\npsi_nk(x) = e^ikcdot x u_nk(x)\nwhere n is the band index and k the k-point. In the code we sometimes use psi and u interchangeably.\nvarepsilon are the eigenvalues, varepsilon_F is the Fermi level.\nrho is the density.\nIn the code we use normalized plane waves:\ne_G(r) = frac 1 sqrtOmega e^i G cdot r\nY^l_m are the complex spherical harmonics, and Y_lm the real ones.\nj_l are the Bessel functions. In particular, j_0(x) = fracsin xx.","category":"page"},{"location":"developer/conventions/#Units","page":"Notation and conventions","title":"Units","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful\nusing UnitfulAtomic\naustrip(10u\"eV\") # 10eV in Hartree","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful: Å\nusing UnitfulAtomic\nauconvert(Å, 1.2) # 1.2 Bohr in Ångström","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Differing unit conventions\nDifferent electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.","category":"page"},{"location":"developer/conventions/#conventions-lattice","page":"Notation and conventions","title":"Lattices and lattice vectors","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still 3 times 3 matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by A and the reciprocal-space lattice vectors by B = 2pi A^-T.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Row-major versus column-major storage order\nJulia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices A before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"We use the convention that the unit cell in real space is 0 1)^3 in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is -12 12)^3.","category":"page"},{"location":"developer/conventions/#Reduced-and-cartesian-coordinates","page":"Notation and conventions","title":"Reduced and cartesian coordinates","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as k, G, q or real-space vectors like r and R (see Symbol conventions). One switches to Cartesian coordinates by","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"x_textcart = M x_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"where M is either A / model.lattice (for real-space vectors) or B / model.recip_lattice (for reciprocal-space vectors). A useful relationship is","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"b_textcart cdot a_textcart=2pi b_textred cdot a_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"if a and b are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for G-vectors) or fractional coordinates (usually for k-points).","category":"page"},{"location":"developer/conventions/#Normalization-conventions","page":"Notation and conventions","title":"Normalization conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points and in reciprocal space its coefficients are ell^2-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"EditURL = \"../../../examples/anyons.jl\"","category":"page"},{"location":"examples/anyons/#Anyonic-models","page":"Anyonic models","title":"Anyonic models","text":"","category":"section"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 14\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);\n\n# Parameters\nEcut = 50\nn_electrons = 1\nβ = 5;\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(; scaling_factor=2),\n ExternalFromReal(X -> pot(X...)),\n Anyonic(1, β)\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # \"spinless electrons\"\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-14) # Reduce tol for production\nE = scfres.energies.total\ns = 2\nE11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β\nprintln(\"e(1,1) / (2π) = \", E11 / (2π))\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"}] +[{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"EditURL = \"../../../examples/gaas_surface.jl\"","category":"page"},{"location":"examples/gaas_surface/#Modelling-a-gallium-arsenide-surface","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"section"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"miller = (1, 1, 0) # Surface Miller indices\nn_GaAs = 2 # Number of GaAs layers\nn_vacuum = 4 # Number of vacuum layers\nEcut = 5 # Hartree\nkgrid = (4, 4, 1); # Monkhorst-Pack mesh\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use ASE to build the structure:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using ASEconvert\n\na = 5.6537 # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)\ngaas = ase.build.bulk(\"GaAs\", \"zincblende\"; a)\nsurface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Get the amount of vacuum in Ångström we need to add","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum\nsurface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Write an image of the surface and embed it as a nice illustration:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"ase.io.write(\"surface.png\", surface * pytuple((3, 3, 1)), rotation=\"-90x, 30y, -75z\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use the pyconvert function from PythonCall to convert to an AtomsBase-compatible system. These two functions not only support importing ASE atoms into DFTK, but a few more third-party data structures as well. Typically the imported atoms use a bare Coulomb potential, such that appropriate pseudopotentials need to be attached in a post-step:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using DFTK\nsystem = attach_psp(pyconvert(AbstractSystem, surface);\n Ga=\"hgh/pbe/ga-q3.hgh\",\n As=\"hgh/pbe/as-q5.hgh\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"We model this surface with (quite large a) temperature of 0.01 Hartree to ease convergence. Try lowering the SCF convergence tolerance (tol) or the temperature or try mixing=KerkerMixing() to see the full challenge of this system.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],\n temperature=0.001, smearing=DFTK.Smearing.Gaussian())\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n\nscfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"scfres.energies","category":"page"},{"location":"tricks/parallelization/#Timings-and-parallelization","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"This section summarizes the options DFTK offers to monitor and influence performance of the code.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2])\n\nDFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)","category":"page"},{"location":"tricks/parallelization/#Timing-measurements","page":"Timings and parallelization","title":"Timing measurements","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For example to measure the timing of an SCF:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)\n\nDFTK.timer","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"note: Timing measurements and stack traces\nTiming measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.","category":"page"},{"location":"tricks/parallelization/#Rough-timing-estimates","page":"Timings and parallelization","title":"Rough timing estimates","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"function estimate_time_per_scf_step(basis::PlaneWaveBasis)\n # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.\n time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3\n\n (time_per_FFT_per_grid_point\n * prod(basis.fft_size)\n * length(basis.kpoints)\n * div(basis.model.n_electrons, DFTK.filled_occupation(basis.model), RoundUp)\n * 8 # mean number of FFT steps per state per k-point per iteration\n )\nend\n\n\"Time per SCF (s): $(estimate_time_per_scf_step(basis))\"","category":"page"},{"location":"tricks/parallelization/#Options-for-parallelization","page":"Timings and parallelization","title":"Options for parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"At the moment DFTK offers two ways to parallelize a calculation, firstly shared-memory parallelism using threading and secondly multiprocessing using MPI (via the MPI.jl Julia interface). MPI-based parallelism is currently only over k-points, such that it cannot be used for calculations with only a single k-point. Otherwise combining both forms of parallelism is possible as well.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The scaling of both forms of parallelism for a number of test cases is demonstrated in the following figure. These values were obtained using DFTK version 0.1.17 and Julia 1.6 and the precise scalings will likely be different depending on architecture, DFTK or Julia version. The rough trends should, however, be similar.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The MPI-based parallelization strategy clearly shows a superior scaling and should be preferred if available.","category":"page"},{"location":"tricks/parallelization/#MPI-based-parallelism","page":"Timings and parallelization","title":"MPI-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Currently DFTK uses MPI to distribute on k-points only. This implies that calculations with only a single k-point cannot use make use of this. For details on setting up and configuring MPI with Julia see the MPI.jl documentation.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"First disable all threading inside DFTK, by adding the following to your script running the DFTK calculation:\nusing DFTK\ndisable_threading()\nRun Julia in parallel using the mpiexecjl wrapper script from MPI.jl:\nmpiexecjl -np 16 julia myscript.jl\nIn this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"As usual with MPI printing will be garbled. You can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"at the top of your script to disable printing on all processes but one.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"info: MPI-based parallelism not fully supported\nWhile standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.","category":"page"},{"location":"tricks/parallelization/#Thread-based-parallelism","page":"Timings and parallelization","title":"Thread-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Threading in DFTK currently happens on multiple layers distributing the workload over different k-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:\nusing DFTK\nsetup_threading()\nThis disables FFT threading and sets the number of BLAS threads to the number of Julia threads.\nRun Julia passing the desired number of threads using the flag -t:\njulia -t 8 myscript.jl","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For some cases (e.g. a single k-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.","category":"page"},{"location":"tricks/parallelization/#Advanced-threading-tweaks","page":"Timings and parallelization","title":"Advanced threading tweaks","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.","category":"page"},{"location":"tricks/parallelization/#BLAS-threads","page":"Timings and parallelization","title":"BLAS threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using LinearAlgebra\nBLAS.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"or (from Julia 1.6) simply BLAS.get_num_threads().","category":"page"},{"location":"tricks/parallelization/#Julia-threads","page":"Timings and parallelization","title":"Julia threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over k-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().","category":"page"},{"location":"tricks/parallelization/#FFT-threads","page":"Timings and parallelization","title":"FFT threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using FFTW\nFFTW.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"EditURL = \"../../../examples/custom_solvers.jl\"","category":"page"},{"location":"examples/custom_solvers/#Custom-solvers","page":"Custom solvers","title":"Custom solvers","text":"","category":"section"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"using DFTK, LinearAlgebra\n\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# We take very (very) crude parameters\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"We define our custom fix-point solver: simply a damped fixed-point","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_fp_solver(f, x0, max_iter; tol)\n mixing_factor = .7\n x = x0\n fx = f(x)\n for n = 1:max_iter\n inc = fx - x\n if norm(inc) < tol\n break\n end\n x = x + mixing_factor * inc\n fx = f(x)\n end\n (; fixpoint=x, converged=norm(fx-x) < tol)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Our eigenvalue solver just forms the dense matrix and diagonalizes it explicitly (this only works for very small systems)","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_eig_solver(A, X0; maxiter, tol, kwargs...)\n n = size(X0, 2)\n A = Array(A)\n E = eigen(A)\n λ = E.values[1:n]\n X = E.vectors[:, 1:n]\n (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Finally we also define our custom mixing scheme. It will be a mixture of simple mixing (for the first 2 steps) and than default to Kerker mixing. In the mixing interface δF is (ρ_textout - ρ_textin), i.e. the difference in density between two subsequent SCF steps and the mix function returns δρ, which is added to ρ_textin to yield ρ_textnext, the density for the next SCF step.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"struct MyMixing\n n_simple # Number of iterations for simple mixing\nend\nMyMixing() = MyMixing(2)\n\nfunction DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)\n if n_iter <= mixing.n_simple\n return δF # Simple mixing -> Do not modify update at all\n else\n # Use the default KerkerMixing from DFTK\n DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)\n end\nend","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"That's it! Now we just run the SCF with these solvers","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"scfres = self_consistent_field(basis;\n tol=1e-4,\n solver=my_fp_solver,\n eigensolver=my_eig_solver,\n mixing=MyMixing());\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Note that the default convergence criterion is the difference in density. When this gets below tol, the \"driver\" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"EditURL = \"../../../examples/gross_pitaevskii_2D.jl\"","category":"page"},{"location":"examples/gross_pitaevskii_2D/#Gross-Pitaevskii-equation-with-external-magnetic-field","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"","category":"section"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 15\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential, and magnetic vector potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2\nω = .6\nApot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]\nApot(X) = Apot(X...);\n\n\n# Parameters\nEcut = 20 # Increase this for production\nη = 500\nC = η/2\nα = 2\nn_electrons = 1; # Increase this for fun\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(),\n ExternalFromReal(X -> pot(X...)),\n LocalNonlinearity(ρ -> C * ρ^α),\n Magnetic(Apot),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # spinless electrons\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-5) # Reduce tol for production\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"EditURL = \"periodic_problems.jl\"","category":"page"},{"location":"guide/periodic_problems/#periodic-problems","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/#Periodicity-and-lattices","page":"Problems and plane-wave discretisations","title":"Periodicity and lattices","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A periodic problem is characterized by being invariant to certain translations. For example the sin function is periodic with periodicity 2π, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" sin(x) = sin(x + 2πm) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This is nothing else than saying that any translation by an integer multiple of 2π keeps the sin function invariant. More formally, one can use the translation operator T_2πm to write this as:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_2πm sin(x) = sin(x - 2πm) = sin(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function f mathbbR mathbbR, but a priori the solution is known to be periodic with periodicity a. As a consequence of said periodicity it is sufficient to determine the values of f for all x from the interval -a2 a2) to uniquely define f on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -3a/2 -a/2 +a/2 +3a/2\n ... |---------|---------|---------| ...\n a a a","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with lattice constant a. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding f it is thus sufficient to consider only the problem inside a unit cell -a2 a2) (this is the convention used by DFTK, but this is arbitrary, and for instance 0a) would have worked just as well).","category":"page"},{"location":"guide/periodic_problems/#Periodic-operators-and-the-Bloch-transform","page":"Problems and plane-wave discretisations","title":"Periodic operators and the Bloch transform","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H = -frac12 Δ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case H one can easily show exactly that, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma H = H T_ma quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We note in passing that the free-electron model is actually very special in the sense that the choice of a is completely arbitrary here. In other words H is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations a and we will take this viewpoint here.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H ψ_kn = ε_kn ψ_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"satisfy a factorization","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" ψ_kn(x) = e^i kx u_kn(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"into a plane wave e^i kx and a lattice-periodic function","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma u_kn(x) = u_kn(x - ma) = u_kn(x) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this n is a labeling integer index and k is a real number, whose details will be clarified in the next section. The index n is sometimes also called the band index and functions ψ_kn satisfying this factorization are also known as Bloch functions or Bloch states.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Consider the application of 2H = -Δ = - fracd^2d x^2 to such a Bloch wave. First we notice for any function f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -i left( e^i kx f right)\n = -ifracddx left( e^i kx f right)\n = k e^i kx f + e^i kx (-i) f = e^i kx (-i + k) f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Using this result twice one shows that applying -Δ yields","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"beginaligned\n -Delta left(e^i kx u_kn(x)right)\n = -i left-i left(u_kn(x) e^i kx right) right \n = -i lefte^i kx (-i + k) u_kn(x) right \n = e^i kx (-i + k)^2 u_kn(x) \n = e^i kx 2H_k u_kn(x)\nendaligned","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"where we defined","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k = frac12 (-i + k)^2","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The action of this operator on a function u_kn is given by","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = e^-i kx H e^i kx u_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"which in particular implies that","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = ε_kn u_kn quad quad H (e^i kx u_kn) = ε_kn (e^i kx u_kn)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"To seek the eigenpairs of H we may thus equivalently find the eigenpairs of all H_k. The point of this is that the eigenfunctions u_kn of H_k are periodic (unlike the eigenfunctions ψ_kn of H). In contrast to ψ_kn the functions u_kn can thus be fully represented considering the eigenproblem only on the unit cell.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A detailed mathematical analysis shows that the transformation from H to the set of all H_k for a suitable set of values for k (details below) is actually a unitary transformation, the so-called Bloch transform. This transform brings the Hamiltonian into the symmetry-adapted basis for translational symmetry, which are exactly the Bloch functions. Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries (like the point group symmetry in molecules), the Bloch transform also makes the Hamiltonian H block-diagonal[1]:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_B H T_B^-1 left( beginarraycccc H_10 H_2H_30ddots endarray right)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with each block H_k taking care of one value k. This block-diagonal structure under the basis of Bloch functions lets us completely describe the spectrum of H by looking only at the spectrum of all H_k blocks.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"[1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.","category":"page"},{"location":"guide/periodic_problems/#The-Brillouin-zone","page":"Problems and plane-wave discretisations","title":"The Brillouin zone","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We now consider the parameter k of the Hamiltonian blocks in detail.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"As discussed k is a real number. It turns out, however, that some of these kmathbbR give rise to operators related by unitary transformations (again due to translational symmetry).\nSince such operators have the same eigenspectrum, only one version needs to be considered.\nThe smallest subset from which k is chosen is the Brillouin zone (BZ).\nThe BZ is the unit cell of the reciprocal lattice, which may be constructed from the real-space lattice by a Fourier transform.\nIn our simple 1D case the reciprocal lattice is just\n ... |--------|--------|--------| ...\n 2π/a 2π/a 2π/a\ni.e. like the real-space lattice, but just with a different lattice constant b = 2π a.\nThe BZ in our example is thus B = -πa πa). The members of B are typically called k-points.","category":"page"},{"location":"guide/periodic_problems/#Discretization-and-plane-wave-basis-sets","page":"Problems and plane-wave discretisations","title":"Discretization and plane-wave basis sets","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With what we discussed so far the strategy to find all eigenpairs of a periodic Hamiltonian H thus reduces to finding the eigenpairs of all H_k with k B. This requires two discretisations:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"B is infinite (and not countable). To discretize we first only pick a finite number of k-points. Usually this k-point sampling is done by picking k-points along a regular grid inside the BZ, the k-grid.\nEach H_k is still an infinite-dimensional operator. Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis and diagonalize the resulting matrix.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For the second step multiple types of bases are used in practice (finite differences, finite elements, Gaussians, ...). In DFTK we currently support only plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For our 1D example normalized plane waves are defined as the functions","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"e_G(x) = frace^i G xsqrta qquad G in bmathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"and typically one forms basis sets from these by specifying a kinetic energy cutoff E_textcut:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"left e_G big (G + k)^2 leq 2E_textcut right","category":"page"},{"location":"guide/periodic_problems/#Correspondence-of-theory-to-DFTK-code","page":"Problems and plane-wave discretisations","title":"Correspondence of theory to DFTK code","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Before solving a few example problems numerically in DFTK, a short overview of the correspondence of the introduced quantities to data structures inside DFTK.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"H is represented by a Hamiltonian object and variables for hamiltonians are usually called ham.\nH_k by a HamiltonianBlock and variables are hamk.\nψ_kn is usually just called ψ. u_kn is not stored (in favor of ψ_kn).\nε_kn is called eigenvalues.\nk-points are represented by Kpoint and respective variables called kpt.\nThe basis of plane waves is managed by PlaneWaveBasis and variables usually just called basis.","category":"page"},{"location":"guide/periodic_problems/#Solving-the-free-electron-Hamiltonian","page":"Problems and plane-wave discretisations","title":"Solving the free-electron Hamiltonian","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"One typical approach to get physical insight into a Hamiltonian H is to plot a so-called band structure, that is the eigenvalues of H_k versus k. In DFTK we achieve this using the following steps:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. Therefore quantities related to the problem space are have a fixed dimension 3. The convention is that for 1D / 2D problems the trailing entries are always zero and ignored in the computation. For the lattice we therefore construct a 3x3 matrix with only one entry.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using DFTK\n\nlattice = zeros(3, 3)\nlattice[1, 1] = 20.;\nnothing #hide","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 2: Select a model. In this case we choose a free-electron model, which is the same as saying that there is only a Kinetic term (and no potential) in the model.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"model = Model(lattice; terms=[Kinetic()])","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 3: Define a plane-wave basis using this model and a cutoff E_textcut of 300 Hartree. The k-point grid is given as a regular grid in the BZ (a so-called Monkhorst-Pack grid). Here we select only one k-point (1x1x1), see the note below for some details on this choice.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 4: Plot the bands! Select a density of k-points for the k-grid to use for the bandstructure calculation, discretize the problem and diagonalize it. Afterwards plot the bands.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\nusing Plots\n\nplot_bandstructure(basis; n_bands=6, kline_density=100)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"note: Selection of k-point grids in `PlaneWaveBasis` construction\nYou might wonder why we only selected a single k-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different k-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.","category":"page"},{"location":"guide/periodic_problems/#Adding-potentials","page":"Problems and plane-wave discretisations","title":"Adding potentials","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The modified problem we will look at consists of diagonalizing\nH_k = frac12 (-i nabla + k)^2 + V\nfor all k in B with a periodic potential V interacting with the electrons.\nA number of \"standard\" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct\ndensity-functial theory (DFT) models for treating electronic structures (see the Tutorial).\nGross-Pitaevskii models for bosonic systems (see Gross-Pitaevskii equation in one dimension)\neven some more unusual cases like anyonic models.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A single potential looks like:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Plots\nusing LinearAlgebra\nnucleus = ElementGaussian(0.3, 10.0)\nplot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this element at hand we can easily construct a setting where two potentials of this form are located at positions 20 and 80 inside the lattice 0 100:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using LinearAlgebra\n\n# Define the 1D lattice [0, 100]\nlattice = diagm([100., 0, 0])\n\n# Place them at 20 and 80 in *fractional coordinates*,\n# that is 0.2 and 0.8, since the lattice is 100 wide.\nnucleus = ElementGaussian(0.3, 10.0)\natoms = [nucleus, nucleus]\npositions = [[0.2, 0, 0], [0.8, 0, 0]]\n\n# Assemble the model, discretize and build the Hamiltonian\nmodel = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));\nham = Hamiltonian(basis)\n\n# Extract the total potential term of the Hamiltonian and plot it\npotential = DFTK.total_local_potential(ham)[:, 1, 1]\nrvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, potential, label=\"\", xlabel=\"x\", ylabel=\"V(x)\")","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This potential is the sum of two \"atomic\" potentials (the two \"Gaussian\" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this setup, let's look at the bands:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\n\nplot_bandstructure(basis; n_bands=6, kline_density=500)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands are noticeably different.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands no longer overlap, meaning that the spectrum of H is no longer continuous but has gaps.\nThe two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.\nThe higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense \"free electrons\" correspond to perfect delocalization.","category":"page"},{"location":"developer/useful_formulas/#Useful-formulas","page":"Useful formulas","title":"Useful formulas","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.","category":"page"},{"location":"developer/useful_formulas/#Fourier-transforms","page":"Useful formulas","title":"Fourier transforms","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"The Fourier transform is\nwidehatf(q) = int_mathbb R^3 e^-i q cdot x f(x) dx\nFourier transforms of centered functions: If f(x) = R(x) Y_l^m(xx), then\nbeginaligned\n hat f( q)\n = int_mathbb R^3 R(x) Y_l^m(xx) e^-i q cdot x dx \n = sum_l = 0^infty 4 pi i^l\n sum_m = -l^l int_mathbb R^3\n R(x) j_l(q x)Y_l^m(-qq) Y_l^m(xx)\n Y_l^mast(xx)\n dx \n = 4 pi Y_l^m(-qq) i^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n = 4 pi Y_l^m(qq) (-i)^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n endaligned\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"developer/useful_formulas/#Spherical-harmonics","page":"Useful formulas","title":"Spherical harmonics","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"Plane wave expansion formula\ne^i q cdot r =\n 4 pi sum_l = 0^infty sum_m = -l^l\n i^l j_l(q r) Y_l^m(qq) Y_l^mast(rr)\nSpherical harmonics orthogonality\nint_mathbbS^2 Y_l^m*(r)Y_l^m(r) dr\n = delta_ll delta_mm\nThis also holds true for real spherical harmonics.\nSpherical harmonics parity\nY_l^m(-r) = (-1)^l Y_l^m(r)\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"EditURL = \"../../../examples/cohen_bergstresser.jl\"","category":"page"},{"location":"examples/cohen_bergstresser/#Cohen-Bergstresser-model","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"","category":"section"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"[CB1966]: M. L. Cohen and T. K. Bergstresser Phys. Rev. 141, 789 (1966) DOI 10.1103/PhysRev.141.789","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using DFTK\n\nSi = ElementCohenBergstresser(:Si)\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nlattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"Next we build the rather simple model and discretize it with moderate Ecut:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We diagonalise at the Gamma point to find a Fermi level …","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"ham = Hamiltonian(basis)\neigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)\nεF = DFTK.compute_occupation(basis, eigres.λ).εF","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"… and compute and plot 8 bands:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using Plots\nusing Unitful\n\nbands = compute_bands(basis; n_bands=8, εF, kline_density=10)\np = plot_bandstructure(bands; unit=u\"eV\")\nylims!(p, (-5, 6))","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"EditURL = \"../../../examples/geometry_optimization.jl\"","category":"page"},{"location":"examples/geometry_optimization/#Geometry-optimization","page":"Geometry optimization","title":"Geometry optimization","text":"","category":"section"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the H_2 molecule. We setup H_2 in an LDA model just like in the Tutorial for silicon.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"using DFTK\nusing Optim\nusing LinearAlgebra\nusing Printf\n\nkgrid = [1, 1, 1] # k-point grid\nEcut = 5 # kinetic energy cutoff in Hartree\ntol = 1e-8 # tolerance for the optimization routine\na = 10 # lattice constant in Bohr\nlattice = a * I(3)\nH = ElementPsp(:H; psp=load_psp(\"hgh/lda/h-q1\"));\natoms = [H, H];\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We define a Bloch wave and a density to be used as global variables so that we can transfer the solution from one iteration to another and therefore reduce the optimization time.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"ψ = nothing\nρ = nothing","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"First, we create a function that computes the solution associated to the position x ℝ^6 of the atoms in reduced coordinates (cf. Reduced and cartesian coordinates for more details on the coordinates system). They are stored as a vector: x[1:3] represents the position of the first atom and x[4:6] the position of the second. We also update ψ and ρ for the next iteration.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function compute_scfres(x)\n model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n global ψ, ρ\n if isnothing(ρ)\n ρ = guess_density(basis)\n end\n is_converged = ScfConvergenceForce(tol / 10)\n scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n ψ = scfres.ψ\n ρ = scfres.ρ\n scfres\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Then, we create the function we want to optimize: fg! is used to update the value of the objective function F, namely the energy, and its gradient G, here computed with the forces (which are, by definition, the negative gradient of the energy).","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function fg!(F, G, x)\n scfres = compute_scfres(x)\n if !isnothing(G)\n grad = compute_forces(scfres)\n G .= -[grad[1]; grad[2]]\n end\n scfres.energies.total\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Now, we can optimize on the 6 parameters x = [x1, y1, z1, x2, y2, z2] in reduced coordinates, using LBFGS(), the default minimization algorithm in Optim. We start from x0, which is a first guess for the coordinates. By default, optimize traces the output of the optimization algorithm during the iterations. Once we have the minimizer xmin, we compute the bond length in Cartesian coordinates.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"x0 = vcat(lattice \\ [0., 0., 0.], lattice \\ [1.4, 0., 0.])\nxres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),\n Optim.Options(; show_trace=true, f_tol=tol))\nxmin = Optim.minimizer(xres)\ndmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])\n@printf \"\\nOptimal bond length for Ecut=%.2f: %.3f Bohr\\n\" Ecut dmin","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"note: Degrees of freedom\nWe used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as H_2O). In the particular case of H_2, we could use only the internal degree of freedom which, in this case, is just the bond length.","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"EditURL = \"../../../examples/anyons.jl\"","category":"page"},{"location":"examples/anyons/#Anyonic-models","page":"Anyonic models","title":"Anyonic models","text":"","category":"section"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 14\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);\n\n# Parameters\nEcut = 50\nn_electrons = 1\nβ = 5;\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(; scaling_factor=2),\n ExternalFromReal(X -> pot(X...)),\n Anyonic(1, β)\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # \"spinless electrons\"\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-14) # Reduce tol for production\nE = scfres.energies.total\ns = 2\nE11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β\nprintln(\"e(1,1) / (2π) = \", E11 / (2π))\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"},{"location":"publications/#Publications","page":"Publications","title":"Publications","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"@article{DFTKjcon,\n author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},\n doi = {10.21105/jcon.00069},\n journal = {Proc. JuliaCon Conf.},\n title = {DFTK: A Julian approach for simulating electrons in solids},\n volume = {3},\n pages = {69},\n year = {2021},\n}","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"Additionally the following publications describe DFTK or one of its algorithms:","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"E. Cancès, M. Hassan and L. Vidal. Modified-Operator Method for the Calculation of Band Diagrams of Crystalline Materials. Mathematics of Computation (2023). ArXiv:2210.00442. (Supplementary material and computational scripts.\nE. Cancès, M. F. Herbst, G. Kemlin, A. Levitt and B. Stamm. Numerical stability and efficiency of response property calculations in density functional theory Letters in Mathematical Physics, 113, 21 (2023). ArXiv:2210.04512. (Supplementary material and computational scripts).\nM. F. Herbst and A. Levitt. A robust and efficient line search for self-consistent field iterations Journal of Computational Physics, 459, 111127 (2022). ArXiv:2109.14018. (Supplementary material and computational scripts).\nM. F. Herbst, A. Levitt and E. Cancès. DFTK: A Julian approach for simulating electrons in solids. JuliaCon Proceedings, 3, 69 (2021).\nM. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. Journal of Physics: Condensed Matter, 33, 085503 (2021). ArXiv:2009.01665. (Supplementary material and computational scripts).","category":"page"},{"location":"publications/#Research-conducted-with-DFTK","page":"Publications","title":"Research conducted with DFTK","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"J. Cazalis. Dirac cones for a mean-field model of graphene (Submitted). ArXiv:2207.09893. (Computational script).\nE. Cancès, L. Garrigue, D. Gontier. A simple derivation of moiré-scale continuous models for twisted bilayer graphene Physical Review B, 107, 155403 (2023). ArXiv:2206.05685.\nG. Dusson, I. Sigal and B. Stamm. Analysis of the Feshbach-Schur method for the Fourier spectral discretizations of Schrödinger operators Mathematics of Computation, 92, 217 (2023). ArXiv:2008.10871.\nE. Cancès, G. Dusson, G. Kemlin and A. Levitt. Practical error bounds for properties in plane-wave electronic structure calculations SIAM Journal on Scientific Computing, 44, B1312 (2022). ArXiv:2111.01470. (Supplementary material and computational scripts).\nE. Cancès, G. Kemlin and A. Levitt. Convergence analysis of direct minimization and self-consistent iterations SIAM Journal on Matrix Analysis and Applications, 42, 243 (2021). ArXiv:2004.09088. (Computational script).\nM. F. Herbst, A. Levitt and E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations. Faraday Discussions, 224, 227 (2020). ArXiv:2004.13549. (Reference implementation).","category":"page"},{"location":"school2022/#DFTK-School-2022","page":"DFTK School 2022","title":"DFTK School 2022","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"EditURL = \"../../../examples/error_estimates_forces.jl\"","category":"page"},{"location":"examples/error_estimates_forces/#Practical-error-bounds-for-the-forces","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"This is a simple example showing how to compute error estimates for the forces on a rm TiO_2 molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"[CDKL2021]: E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"using DFTK\nusing Printf\nusing LinearAlgebra\nusing ForwardDiff\nusing LinearMaps\nusing IterativeSolvers","category":"page"},{"location":"examples/error_estimates_forces/#Setup","page":"Practical error bounds for the forces","title":"Setup","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We setup manually the rm TiO_2 configuration from Materials Project.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ti = ElementPsp(:Ti; psp=load_psp(\"hgh/lda/ti-q4.hgh\"))\nO = ElementPsp(:O; psp=load_psp(\"hgh/lda/o-q6.hgh\"))\natoms = [Ti, Ti, O, O, O, O]\npositions = [[0.5, 0.5, 0.5], # Ti\n [0.0, 0.0, 0.0], # Ti\n [0.19542, 0.80458, 0.5], # O\n [0.80458, 0.19542, 0.5], # O\n [0.30458, 0.30458, 0.0], # O\n [0.69542, 0.69542, 0.0]] # O\nlattice = [[8.79341 0.0 0.0];\n [0.0 8.79341 0.0];\n [0.0 0.0 5.61098]];\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We apply a small displacement to one of the rm Ti atoms to get nonzero forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"positions[1] .+= [-0.022, 0.028, 0.035]","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We build a model with one k-point only, not too high Ecut_ref and small tolerance to limit computational time. These parameters can be increased for more precise results.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"model = model_LDA(lattice, atoms, positions)\nkgrid = [1, 1, 1]\nEcut_ref = 35\nbasis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)\ntol = 1e-5;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Computations","page":"Practical error bounds for the forces","title":"Computations","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute the reference solution P_* from which we will compute the references forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)\nψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute a variational approximation of the reference solution with smaller Ecut. ψr, ρr and Er are the quantities computed with Ecut and then extended to the reference grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"note: Choice of convergence parameters\nBe careful to choose Ecut not too close to Ecut_ref. Note also that the current choice Ecut_ref = 35 is such that the reference solution is not converged and Ecut = 15 is such that the asymptotic regime (crucial to validate the approach) is barely established.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ecut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol, callback=identity)\nψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)\nρr = compute_density(basis_ref, ψr, scfres.occupation)\nEr, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then compute several quantities that we need to evaluate the error bounds.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the residual R(P), and remove the virtual orbitals, as required in src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)\nres, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)\nψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the error P-P_* on the associated orbitals ϕ-ψ after aligning them: this is done by solving min ϕ - ψU for U unitary matrix of size NN (N being the number of electrons) whose solution is U = S(S^*S)^-12 where S is the overlap matrix ψ^*ϕ.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function compute_error(basis, ϕ, ψ)\n map(zip(ϕ, ψ)) do (ϕk, ψk)\n S = ψk'ϕk\n U = S*(S'S)^(-1/2)\n ϕk - ψk*U\n end\nend\nerr = compute_error(basis_ref, ψr, ψ_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1R(P) with boldsymbol M^-1 defined in [CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]\nmap(zip(P, ψr)) do (Pk, ψk)\n DFTK.precondprep!(Pk, ψk)\nend\nfunction apply_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_inv_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n op(x) = apply_M(φk, Pk, x, n)\n function f_ldiv!(x, y)\n x .= DFTK.proj_tangent_kpt(y, φk)\n x ./= (Pk.mean_kin[n] .+ Pk.kin)\n DFTK.proj_tangent_kpt!(x, φk)\n end\n J = LinearMap{eltype(φk)}(op, size(δφnk, 1))\n δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),\n verbose=false, reltol=0, abstol=1e-15)\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_metric(φ, P, δφ, A::Function)\n map(enumerate(δφ)) do (ik, δφk)\n Aδφk = similar(δφk)\n φk = φ[ik]\n for n = 1:size(δφk,2)\n Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)\n end\n Aδφk\n end\nend\nMres = apply_metric(ψr, P, res, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We can now compute the modified residual R_rm Schur(P) using a Schur complement to approximate the error on low-frequencies[CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"beginbmatrix\n(boldsymbol Ω + boldsymbol K)_11 (boldsymbol Ω + boldsymbol K)_12 \n0 boldsymbol M_22\nendbmatrix\nbeginbmatrix\nP_1 - P_*1 P_2-P_*2\nendbmatrix =\nbeginbmatrix\nR_1 R_2\nendbmatrix","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the projection of the residual onto the high and low frequencies:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"resLF = DFTK.transfer_blochwave(res, basis_ref, basis)\nresHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1_22R_2(P):","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"e2 = apply_metric(ψr, P, resHF, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the right hand side of the Schur system:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"# Rayleigh coefficients needed for `apply_Ω`\nΛ = map(enumerate(ψr)) do (ik, ψk)\n Hk = hamr.blocks[ik]\n Hψk = Hk * ψk\n ψk'Hψk\nend\nΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)\nΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)\nrhs = resLF - ΩpKe2;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Solve the Schur system to compute R_rm Schur(P): this is the most costly step, but inverting boldsymbolΩ + boldsymbolK on the small space has the same cost than the full SCF cycle on the small grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)\ne1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ\ne1 = DFTK.transfer_blochwave(e1, basis, basis_ref)\nres_schur = e1 + Mres;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Error-estimates","page":"Practical error bounds for the forces","title":"Error estimates","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We start with different estimations of the forces:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the reference solution","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f_ref = compute_forces(scfres_ref)\nforces = Dict(\"F(P_*)\" => f_ref)\nrelerror = Dict(\"F(P_*)\" => 0.0)\ncompute_relerror(f) = norm(f - f_ref) / norm(f_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the variational solution and relative error without any post-processing:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f = compute_forces(scfres)\nforces[\"F(P)\"] = f\nrelerror[\"F(P)\"] = compute_relerror(f);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then try to improve F(P) using the first order linearization:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"F(P) = F(P_*) + rm dF(P)(P-P_*)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"To this end, we use the ForwardDiff.jl package to compute rm dF(P) using automatic differentiation.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function df(basis, occupation, ψ, δψ, ρ)\n δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)\n ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)\nend;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument if we have access to the actual error P-P_*. Usually this is of course not the case, but this is the \"best\" improvement we can hope for with a linearisation, so we are aiming for this precision.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)\nforces[\"F(P) - df(P)⋅(P-P_*)\"] = f - df_err\nrelerror[\"F(P) - df(P)⋅(P-P_*)\"] = compute_relerror(f - df_err);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument when replacing the error P-P_* by the modified residual R_rm Schur(P). The latter quantity is computable in practice.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_schur = df(basis_ref, occ, ψr, res_schur, ρr)\nforces[\"F(P) - df(P)⋅Rschur(P)\"] = f - df_schur\nrelerror[\"F(P) - df(P)⋅Rschur(P)\"] = compute_relerror(f - df_schur);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Summary of all forces on the first atom (Ti)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"for (key, value) in pairs(forces)\n @printf(\"%30s = [%7.5f, %7.5f, %7.5f] (rel. error: %7.5f)\\n\",\n key, (value[1])..., relerror[key])\nend","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Notice how close the computable expression F(P) - rm dF(P)R_rm Schur(P) is to the best linearization ansatz F(P) - rm dF(P)(P-P_*).","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"EditURL = \"../../../examples/metallic_systems.jl\"","category":"page"},{"location":"examples/metallic_systems/#metallic-systems","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"","category":"section"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\na = 3.01794 # bohr\nb = 5.22722 # bohr\nc = 9.77362 # bohr\nlattice = [[-a -a 0]; [-b b 0]; [0 0 -c]]\nMg = ElementPsp(:Mg; psp=load_psp(\"hgh/pbe/Mg-q2\"))\natoms = [Mg, Mg]\npositions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Next we build the PBE model and discretize it. Since magnesium is a metal we apply a small smearing temperature to ease convergence using the Fermi-Dirac smearing scheme. Note that both the Ecut is too small as well as the minimal k-point spacing kspacing far too large to give a converged result. These have been selected to obtain a fast execution time. By default PlaneWaveBasis chooses a kspacing of 2π * 0.022 inverse Bohrs, which is much more reasonable.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kspacing = 0.945 / u\"angstrom\" # Minimal spacing of k-points,\n# in units of wavevectors (inverse Bohrs)\nEcut = 5 # Kinetic energy cutoff in Hartree\ntemperature = 0.01 # Smearing temperature in Hartree\nsmearing = DFTK.Smearing.FermiDirac() # Smearing method\n# also supported: Gaussian,\n# MarzariVanderbilt,\n# and MethfesselPaxton(order)\n\nmodel = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];\n temperature, smearing)\nkgrid = kgrid_from_maximal_spacing(lattice, kspacing)\nbasis = PlaneWaveBasis(model; Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.occupation[1]","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.energies","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u\"Å\")\nbands = compute_bands(scfres, kgrid_dos)\nplot_dos(bands)","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"EditURL = \"../../../examples/scf_callbacks.jl\"","category":"page"},{"location":"examples/scf_callbacks/#Monitoring-self-consistent-field-calculations","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"","category":"section"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"This example discusses a few aspects of the callback function taking again our favourite silicon example.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using DFTK\nusing ASEconvert\n\nsystem = pyconvert(AbstractSystem, ase.build.bulk(\"Si\"))\nmodel = model_LDA(attach_psp(system; Si=\"hgh/pbe/si-q4.hgh\"))\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfSaveCheckpoints, which stores the state of an SCF at each iterations to allow resuming from a failed calculation at a later point. See Saving SCF results on disk and SCF checkpoints for details how to use checkpointing with DFTK.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. This example is a bit artificial, since the norms of all density differences is available as scfres.history_Δρ after the SCF has finished and could be directly plotted, but the following nicely illustrates the use of callbacks in DFTK.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"To enable plotting we first define the empty canvas and an empty container for all the density differences:","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using Plots\np = plot(; yaxis=:log)\ndensity_differences = Float64[];\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using LinearAlgebra\n\nfunction plot_callback(info)\n if info.stage == :finalize\n plot!(p, density_differences, label=\"|ρout - ρin|\", markershape=:x)\n else\n push!(density_differences, norm(info.ρout - info.ρin))\n end\n info\nend\ncallback = ScfDefaultCallback() ∘ plot_callback;\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback. The latter is the function responsible for printing the usual convergence table. Therefore if we simply did callback=plot_callback the SCF would go silent. The chaining of both callbacks (plot_callback for plotting and ScfDefaultCallback() for the convergence table) makes sure both features are enabled. We run the SCF with the chained callback …","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"scfres = self_consistent_field(basis; tol=1e-5, callback);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"… and show the plot","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"p","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"tip: Debugging with callbacks\nVery handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.","category":"page"},{"location":"tricks/compute_clusters/#Using-DFTK-on-compute-clusters","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"This chapter summarises a few tips and tricks for running on compute clusters. It assumes you have already installed Julia on the machine in question (see Julia downloads and Julia installation instructions).","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"We will use EPFL's scitas clusters as examples, but the basic principles should apply to other systems as well.","category":"page"},{"location":"tricks/compute_clusters/#Julia-depot-path","page":"Using DFTK on compute clusters","title":"Julia depot path","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"By default on Linux-based systems Julia puts all installed packages, including the binary packages into the path $HOME/.julia, which can easily take a few tens of GB. On many compute clusters the /home partition is on a shared filesystem (thus access is slower) and has a tight space quota. Usually it is therefore more advantageous to put Julia packages on a less persistent, faster filesystem. On many systems (such as EPFL scitas) this is the /scratch partition. In your ~/.bashrc or otherwise you should thus redirect the JULIA_DEPOT_PATH to be a subdirectory of /scratch.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"EPFL scitas. On scitas the right thing to do is to insert","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"export JULIA_DEPOT_PATH=\"/scratch/$USER/.julia\"","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"into your ~/.bashrc.","category":"page"},{"location":"tricks/compute_clusters/#Installing-DFTK-into-a-local-Julia-environment","page":"Using DFTK on compute clusters","title":"Installing DFTK into a local Julia environment","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"When employing a compute cluster, it is often desirable to integrate with the matching cluster-specific libraries, such as vendor-specific versions of BLAS, LAPACK etc. This is easiest achieved by installing DFTK not into the global Julia environment, but instead bundle the installation and the cluster-specific configuration in a local, cluster-specific environment.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"On top of the discussion of the main Installation instructions, this requires one additional step, namely the use of a custom Julia package environment.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Setting up a package environment. In the Julia REPL, create a new environment (essentially a new Julia project) using the following commands:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"import Pkg\nPkg.activate(\"path/to/new/environment\")","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Replace path/to/new/environment with the directory where you wish to create the new environment. This will generate a folder containing Project.toml and Manifest.toml files. Both together provide a reproducible image of the packages you installed in your project. Once the activate call has been issued, you can than install packages as usual. E.g. use Pkg.add(\"DFTK\") to install DFTK. The difference is that instead of tracking this in your global environment, the installations will be tracked in the local Project.toml and Manifest.toml files of the path/to/new/environment folder.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"To start a Julia shell directly with such this environment activated, run it as julia --project=path/to/new/environment.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Updating an environment. Start Julia and activate the environment. Then run Pkg.update(), i.e.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"import Pkg\nPkg.activate(\"path/to/new/environment\")\nPkg.update()","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"For more information on Julia environments, see the respective documentation on Code loading and on Managing Environments.","category":"page"},{"location":"tricks/compute_clusters/#Setting-up-local-preferences","page":"Using DFTK on compute clusters","title":"Setting up local preferences","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"On cluster machines often highly optimised versions of BLAS, LAPACK, FFTW, MPI or other basic packages are provided by the cluster vendor or operator. These can be used with DFTK by configuring an appropriate LocalPreferences.toml file, which tells Julia where the cluster-specific libraries are located. The following sections explain how to generate such a LocalPreferences.toml specific for your cluster. Once this file has been generated and sits next to a Project.toml in a Julia environment, it ensures that the cluster-specific libraries are used instead of the default ones. Therefore this setup only needs to be done once per project.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"A useful way to check whether the setup has been successful and DFTK indeed employs the desired cluster-specific libraries provides the","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"DFTK.versioninfo()","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"command. It produces an output such as","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"DFTK Version 0.6.16\nJulia Version 1.10.0\nFFTW.jl provider fftw v3.3.10\n\nBLAS.get_config()\n LinearAlgebra.BLAS.LBTConfig\n Libraries:\n └ [ILP64] libopenblas64_.so\n\nMPI.versioninfo()\n MPIPreferences:\n binary: MPICH_jll\n abi: MPICH\n\n Package versions\n MPI.jl: 0.20.19\n MPIPreferences.jl: 0.1.10\n MPICH_jll: 4.1.2+1\n\n Library information:\n libmpi: /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so\n libmpi dlpath: /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so\n\n[...]","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"which thus specifies in one overview the details of the employed BLAS, LAPACK, FFTW, MPI, etc. libraries.","category":"page"},{"location":"tricks/compute_clusters/#Switching-to-MKL-for-BLAS-and-FFT","page":"Using DFTK on compute clusters","title":"Switching to MKL for BLAS and FFT","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"The MKL Julia package provides the Intel MKL library as a BLAS backend in Julia. To use fully use it you need to do two things:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Add a using MKL to your scripts.\nConfigure a LocalPreferences.jl to employ the MKL also for FFT operations: to do so run the following Julia script:\nusing MKL\nusing FFTW\nFFTW.set_provider!(\"mkl\")","category":"page"},{"location":"tricks/compute_clusters/#Switching-to-the-system-provided-MPI-library","page":"Using DFTK on compute clusters","title":"Switching to the system-provided MPI library","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"To use a system-provided MPI library, load the required modules. On scitas that is","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"module load gcc\nmodule load openmpi","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Afterwards follow the MPI system binary instructions and execute","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"using MPIPreferences\nMPIPreferences.use_system_binary()","category":"page"},{"location":"tricks/compute_clusters/#Running-slurm-jobs","page":"Using DFTK on compute clusters","title":"Running slurm jobs","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"This example shows how to run a DFTK calculation on a slurm-based system such as scitas. We use the MKL for FFTW and BLAS and the system-provided MPI. This setup will create five files LocalPreferences.toml, Project.toml, dftk.jl, silicon.extxyz and job.sh.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"At the time of writing (Dec 2023) following the setup indicated above leads to this LocalPreferences.toml file:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"[FFTW]\nprovider = \"mkl\"\n\n[MPIPreferences]\n__clear__ = [\"preloads_env_switch\"]\n_format = \"1.0\"\nabi = \"OpenMPI\"\nbinary = \"system\"\ncclibs = []\nlibmpi = \"libmpi\"\nmpiexec = \"mpiexec\"\npreloads = []","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"We place this into a folder next to a Project.toml to define our project:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"[deps]\nAtomsIO = \"1692102d-eeb4-4df9-807b-c9517f998d44\"\nDFTK = \"acf6eb54-70d9-11e9-0013-234b7a5f5337\"\nFFTW = \"7a1cc6ca-52ef-59f5-83cd-3a7055c09341\"\nMKL = \"33e6dc65-8f57-5167-99aa-e5a354878fb2\"\nMPIPreferences = \"3da0fdf6-3ccc-4f1b-acd9-58baa6c99267\"","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"We additionally create a small file dftk.jl to run an MPI-parallelised calculation from a passed structure","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"using MKL\nusing DFTK\nusing AtomsIO\n\ndisable_threading() # Threading and MPI not compatible\n\nfunction main(structure, pseudos; Ecut, kspacing)\n if mpi_master()\n println(\"DEPOT_PATH=$DEPOT_PATH\")\n println(DFTK.versioninfo())\n println()\n end\n\n system = attach_psp(load_system(structure); pseudos...)\n model = model_PBE(system; temperature=1e-3, smearing=Smearing.MarzariVanderbilt())\n\n kgrid = kgrid_from_minimal_spacing(model, kspacing)\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n\n if mpi_master()\n println()\n show(stdout, MIME(\"text/plain\"), basis)\n println()\n flush(stdout)\n end\n\n DFTK.reset_timer!(DFTK.timer)\n scfres = self_consistent_field(basis)\n println(DFTK.timer)\n\n if mpi_master()\n show(stdout, MIME(\"text/plain\"), scfres.energies)\n end\nend","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"and we dump the structure file silicon.extxyz with content","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"2\npbc=[T, T, T] Lattice=\"0.00000000 2.71467909 2.71467909 2.71467909 0.00000000 2.71467909 2.71467909 2.71467909 0.00000000\" Properties=species:S:1:pos:R:3\nSi 0.67866977 0.67866977 0.67866977\nSi -0.67866977 -0.67866977 -0.67866977","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Finally the jobscript job.sh for a slurm job looks like this:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"#!/bin/bash\n# This is the block interpreted by slurm and used as a Job submission script.\n# The actual julia payload is in dftk.jl\n# In this case it sets the parameters for running with 2 MPI processes using a maximal\n# wall time of 2 hours.\n\n#SBATCH --time 2:00:00\n#SBATCH --nodes 1\n#SBATCH --ntasks 2\n#SBATCH --cpus-per-task 1\n\n# Now comes the setup of the environment on the cluster node (the \"jobscript\")\n\n# IMPORTANT: Set Julia's depot path to be a local scratch\n# direction (not your home !).\nexport JULIA_DEPOT_PATH=\"/scratch/$USER/.julia\"\n\n# Load modules to setup julia (this is specific to EPFL scitas systems)\nmodule purge\nmodule load gcc\nmodule load openmpi\nmodule load julia\n\n# Run the actual payload of Julia using 1 thread. Use the name of this\n# file as an include to make everything self-contained.\nsrun julia -t 1 --project -e '\n include(\"dftk.jl\")\n pseudos = (; Si=\"hgh/pbe/si-q4.hgh\" )\n main(\"silicon.extxyz\",\n pseudos;\n Ecut=10,\n kspacing=0.3,\n )\n'","category":"page"},{"location":"tricks/compute_clusters/#Using-DFTK-via-the-Aiida-workflow-engine","page":"Using DFTK on compute clusters","title":"Using DFTK via the Aiida workflow engine","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"A preliminary integration of DFTK with the Aiida high-throughput workflow engine is available via the aiida-dftk plugin. This can be a useful alternative if many similar DFTK calculations should be run.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"EditURL = \"scf_checkpoints.jl\"","category":"page"},{"location":"tricks/scf_checkpoints/#Saving-SCF-results-on-disk-and-SCF-checkpoints","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"(Image: ) (Image: )","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"note: Availability of `load_scfres`, `save_scfres` and checkpointing\nAs JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"warning: DFTK data formats are not yet fully matured\nThe data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing LinearAlgebra\nusing JLD2\n\nd = 2.079 # oxygen-oxygen bondlength\na = 9.0 # size of the simulation box\nlattice = a * I(3)\nO = ElementPsp(:O; psp=load_psp(\"hgh/pbe/O-q6.hgh\"))\natoms = [O, O]\npositions = d / 2a * [[0, 0, 1], [0, 0, -1]]\nmagnetic_moments = [1., 1.]\n\nEcut = 10 # Far too small to be converged\nmodel = model_PBE(lattice, atoms, positions; temperature=0.02, smearing=Smearing.Gaussian(),\n magnetic_moments)\nbasis = PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])\n\nscfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))\nsave_scfres(\"scfres.jld2\", scfres);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"scfres.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The scfres.jld2 file could now be transferred to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing JLD2\nloaded = load_scfres(\"scfres.jld2\")\npropertynames(loaded)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"loaded.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres(\"scfres.jld2\")) directly from the stored data.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that both load_scfres and save_scfres work by transferring all data to/from the master process, which performs the IO operations without parallelisation. Since this can become slow, both functions support optional arguments to speed up the processing. An overview:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"save_scfres(\"scfres.jld2\", scfres; save_ψ=false) avoids saving the Bloch wave, which is usually faster and saves storage space.\nload_scfres(\"scfres.jld2\", basis) avoids reconstructing the basis from the file, but uses the passed basis instead. This save the time of constructing the basis twice and allows to specify parallelisation options (via the passed basis). Usually this is useful for continuing a calculation on a supercomputer or cluster.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"See also the discussion on Input and output formats on JLD2 files.","category":"page"},{"location":"tricks/scf_checkpoints/#Checkpointing-of-SCF-calculations","page":"Saving SCF results on disk and SCF checkpoints","title":"Checkpointing of SCF calculations","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The easiest way to enable checkpointing is to use the kwargs_scf_checkpoints function, which does two things. (1) It sets up checkpointing using the ScfSaveCheckpoints callback and (2) if a checkpoint file is detected, the stored density is used to continue the calculation instead of the usual atomic-orbital based guess. In practice this is done by modifying the keyword arguments passed to # self_consistent_field appropriately, e.g. by using the density or orbitals from the checkpoint file. For example:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\nscfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that the ρ argument is now passed to kwargsscfcheckpoints instead. If we run in the same folder the SCF again (here using a tighter tolerance), the calculation just continues.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\nscfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since only the density is stored in a checkpoint (and not the Bloch waves), the first step needs a slightly elevated number of diagonalizations. Notice, that reconstructing the checkpointargs in this second call is important as the checkpointargs now contain different data, such that the SCF continues from the checkpoint. By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which can be changed using the filename keyword argument of kwargs_scf_checkpoints. Note that the file is not deleted by DFTK, so it is your responsibility to clean it up. Further note that warnings or errors will arise if you try to use a checkpoint, which is incompatible with your calculation.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"We can also inspect the checkpoint file manually using the load_scfres function and use it manually to continue the calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"oldstate = load_scfres(\"dftk_scf_checkpoint.jld2\")\nscfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Some details on what happens under the hood in this mechanism: When using the kwargs_scf_checkpoints function, the ScfSaveCheckpoints callback is employed during the SCF, which causes the density to be stored to the JLD2 file in every iteration. When reading the file, the kwargs_scf_checkpoints transparently patches away the ψ and ρ keyword arguments and replaces them by the data obtained from the file. For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"(Cleanup files generated by this notebook)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"rm(\"dftk_scf_checkpoint.jld2\")\nrm(\"scfres.jld2\")","category":"page"},{"location":"api/#API-reference","page":"API reference","title":"API reference","text":"","category":"section"},{"location":"api/","page":"API reference","title":"API reference","text":"This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.","category":"page"},{"location":"api/","page":"API reference","title":"API reference","text":"Modules = [DFTK, DFTK.Smearing]","category":"page"},{"location":"api/#DFTK.timer","page":"API reference","title":"DFTK.timer","text":"TimerOutput object used to store DFTK timings.\n\n\n\n\n\n","category":"constant"},{"location":"api/#DFTK.AbstractArchitecture","page":"API reference","title":"DFTK.AbstractArchitecture","text":"Abstract supertype for architectures supported by DFTK.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveBands","page":"API reference","title":"DFTK.AdaptiveBands","text":"Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveDiagtol","page":"API reference","title":"DFTK.AdaptiveDiagtol","text":"Algorithm for the tolerance used for the next diagonalization. This function takes ρ_rm next - ρ_rm in and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Applyχ0Model","page":"API reference","title":"DFTK.Applyχ0Model","text":"Full χ0 application, optionally dropping terms or disabling Sternheimer. All keyword arguments passed to apply_χ0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicLocal","page":"API reference","title":"DFTK.AtomicLocal","text":"Atomic local potential defined by model.atoms.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicNonlocal","page":"API reference","title":"DFTK.AtomicNonlocal","text":"Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. textEnergy = _a _ij _n f_n braketψ_nrm proj_ai D_ij braketrm proj_ajψ_n\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupAbinit","page":"API reference","title":"DFTK.BlowupAbinit","text":"Blow-up function as used in Abinit.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupCHV","page":"API reference","title":"DFTK.BlowupCHV","text":"Blow-up function as proposed in arXiv:2210.00442. The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupIdentity","page":"API reference","title":"DFTK.BlowupIdentity","text":"Default blow-up corresponding to the standard kinetic energies.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DFTKCalculator-Tuple{DFTK.DFTKParameters}","page":"API reference","title":"DFTK.DFTKCalculator","text":"DFTKCalculator(\n params::DFTK.DFTKParameters\n) -> DFTKCalculator\n\n\nConstruct a AtomsCalculators compatible calculator for DFTK. The model_kwargs are passed onto the Model constructor, the basis_kwargs to the PlaneWaveBasis constructor, the scf_kwargs to self_consistent_field. At the very least the DFT functionals and the Ecut needs to be specified.\n\nBy default the calculator preserves the symmetries that are stored inside the state (the basis is re-built, but symmetries are fixed and not re-computed).\n\nExample\n\njulia> DFTKCalculator(; model_kwargs=(; functionals=[:lda_x, :lda_c_vwn]),\n basis_kwargs=(; Ecut=10, kgrid=(2, 2, 2)),\n scf_kwargs=(; tol=1e-4))\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.DielectricMixing","page":"API reference","title":"DFTK.DielectricMixing","text":"We use a simplification of the Resta model and set χ_0(q) = fracC_0 G^24π (1 - C_0 G^2 k_TF^2) where C_0 = 1 - ε_r with ε_r being the macroscopic relative permittivity. We neglect K_textxc, such that J^-1 frack_TF^2 - C_0 G^2ε_r k_TF^2 - C_0 G^2\n\nBy default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to ρ and ρ_textspin in the same way.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DielectricModel","page":"API reference","title":"DFTK.DielectricModel","text":"A localised dielectric model for χ_0:\n\nsqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\n\nwhere C_0 = 1 - ε_r, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DivAgradOperator","page":"API reference","title":"DFTK.DivAgradOperator","text":"Nonlocal \"divAgrad\" operator -½ (A ) where A is a scalar field on the real-space grid. The -½ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for A=1).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ElementCohenBergstresser-Tuple{Any}","page":"API reference","title":"DFTK.ElementCohenBergstresser","text":"ElementCohenBergstresser(\n key;\n lattice_constant\n) -> ElementCohenBergstresser\n\n\nElement where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).\n\nkey may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementCoulomb-Tuple{Any}","page":"API reference","title":"DFTK.ElementCoulomb","text":"ElementCoulomb(key; mass) -> ElementCoulomb\n\n\nElement interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementGaussian-Tuple{Any, Any}","page":"API reference","title":"DFTK.ElementGaussian","text":"ElementGaussian(α, L; symbol) -> ElementGaussian\n\n\nElement interacting with electrons via a Gaussian potential. Symbol is non-mandatory.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementPsp-Tuple{Any}","page":"API reference","title":"DFTK.ElementPsp","text":"ElementPsp(key; psp, mass)\n\n\nElement interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Energies","page":"API reference","title":"DFTK.Energies","text":"A simple struct to contain a vector of energies, and utilities to print them in a nice format.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Entropy","page":"API reference","title":"DFTK.Entropy","text":"Entropy term -TS, where S is the electronic entropy. Turns the energy E into the free energy F=E-TS. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Ewald","page":"API reference","title":"DFTK.Ewald","text":"Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExplicitKpoints","page":"API reference","title":"DFTK.ExplicitKpoints","text":"Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromFourier","page":"API reference","title":"DFTK.ExternalFromFourier","text":"External potential from the (unnormalized) Fourier coefficients V(G) G is passed in cartesian coordinates\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromReal","page":"API reference","title":"DFTK.ExternalFromReal","text":"External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromValues","page":"API reference","title":"DFTK.ExternalFromValues","text":"External potential given as values.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FermiTwoStage","page":"API reference","title":"DFTK.FermiTwoStage","text":"Two-stage Fermi level finding algorithm starting from a Gaussian-smearing guess.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FixedBands","page":"API reference","title":"DFTK.FixedBands","text":"In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FourierMultiplication","page":"API reference","title":"DFTK.FourierMultiplication","text":"Fourier space multiplication, like a kinetic energy term:\n\n(Hψ)(G) = rm multiplier(G) ψ(G)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.GPU-Union{Tuple{Type{T}}, Tuple{T}} where T<:AbstractArray","page":"API reference","title":"DFTK.GPU","text":"Construct a particular GPU architecture by passing the ArrayType\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.GaussianWannierProjection","page":"API reference","title":"DFTK.GaussianWannierProjection","text":"A Gaussian-shaped initial guess. Can be used as an approximation of an s- or σ-like orbital.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Hartree","page":"API reference","title":"DFTK.Hartree","text":"Hartree term: for a decaying potential V the energy would be\n\n12 ρ(x)ρ(y)V(x-y) dxdy\n\nwith the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather\n\n12 ρ(x)ρ(y) G(x-y) dx dy\n\nwhere G is the Green's function of the periodic Laplacian with zero mean (-Δ G = _R 4π δ_R, integral of G zero on a unit cell).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.HydrogenicWannierProjection","page":"API reference","title":"DFTK.HydrogenicWannierProjection","text":"A hydrogenic initial guess.\n\nα is the diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerDosMixing","page":"API reference","title":"DFTK.KerkerDosMixing","text":"The same as KerkerMixing, but the Thomas-Fermi wavevector is computed from the current density of states at the Fermi level.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerMixing","page":"API reference","title":"DFTK.KerkerMixing","text":"Kerker mixing: J^-1 fracG^2k_TF^2 + G^2 where k_TF is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for ΔDOS_Ω is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.\n\nNotes:\n\nAbinit calls 1k_TF the dielectric screening length (parameter dielng)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kinetic","page":"API reference","title":"DFTK.Kinetic","text":"Kinetic energy:\n\n12 _n f_n ψ_n^2 * rm blowup(-iΨ_n)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kpoint","page":"API reference","title":"DFTK.Kpoint","text":"Discretization information for k-point-dependent quantities such as orbitals. More generally, a k-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LazyHcat","page":"API reference","title":"DFTK.LazyHcat","text":"Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LdosModel","page":"API reference","title":"DFTK.LdosModel","text":"Represents the LDOS-based χ_0 model\n\nχ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\n\nwhere D_textloc is the local density of states and D the density of states. For details see Herbst, Levitt 2020.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LibxcDensities-Tuple{Any, Integer, Any, Any}","page":"API reference","title":"DFTK.LibxcDensities","text":"LibxcDensities(\n basis,\n max_derivative::Integer,\n ρ,\n τ\n) -> DFTK.LibxcDensities\n\n\nCompute density in real space and its derivatives starting from ρ\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LocalNonlinearity","page":"API reference","title":"DFTK.LocalNonlinearity","text":"Local nonlinearity, with energy ∫f(ρ) where ρ is the density\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Magnetic","page":"API reference","title":"DFTK.Magnetic","text":"Magnetic term A(-i). It is assumed (but not checked) that A = 0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.MagneticFieldOperator","page":"API reference","title":"DFTK.MagneticFieldOperator","text":"Magnetic field operator A⋅(-i∇).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Model-Tuple{AtomsBase.AbstractSystem}","page":"API reference","title":"DFTK.Model","text":"Model(system::AbstractSystem; kwargs...)\n\nAtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{AbstractMatrix{T}}, Tuple{T}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,\n smearing, spin_polarization, symmetries)\n\nCreates the physical specification of a model (without any discretization information).\n\nn_electrons is taken from atoms if not specified.\n\nspin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.\n\nmagnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.\n\nsmearing is Fermi-Dirac if temperature is non-zero, none otherwise\n\nThe symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{Model}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(model; [lattice, positions, atoms, kwargs...])\nModel{T}(model; [lattice, positions, atoms, kwargs...])\n\nConstruct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.MonkhorstPack","page":"API reference","title":"DFTK.MonkhorstPack","text":"Perform BZ sampling employing a Monkhorst-Pack grid.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NbandsAlgorithm","page":"API reference","title":"DFTK.NbandsAlgorithm","text":"NbandsAlgorithm subtypes determine how many bands to compute and converge in each SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NonlocalOperator","page":"API reference","title":"DFTK.NonlocalOperator","text":"Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NoopOperator","page":"API reference","title":"DFTK.NoopOperator","text":"Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PairwisePotential-Tuple{Any, Any}","page":"API reference","title":"DFTK.PairwisePotential","text":"PairwisePotential(\n V,\n params;\n max_radius\n) -> PairwisePotential\n\n\nPairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"A plane-wave discretized Model. Normalization conventions:\n\nThings that are expressed in the G basis are normalized so that if x is the vector, then the actual function is sum_G x_G e_G with e_G(x) = e^iG x sqrt(Omega), where Omega is the unit cell volume. This is so that, eg norm(ψ) = 1 gives the correct normalization. This also holds for the density and the potentials.\nQuantities expressed on the real-space grid are in actual values.\n\nifft and fft convert between these representations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PlaneWaveBasis-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a new basis identical to basis, but with a new k-point grid, e.g. an MonkhorstPack or a ExplicitKpoints grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis-Union{Tuple{Model{T}}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PreconditionerNone","page":"API reference","title":"DFTK.PreconditionerNone","text":"No preconditioning.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PreconditionerTPA","page":"API reference","title":"DFTK.PreconditionerTPA","text":"(Simplified version of) Tetter-Payne-Allan preconditioning.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspCorrection","page":"API reference","title":"DFTK.PspCorrection","text":"Pseudopotential correction energy. TODO discuss the need for this.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspHgh-Tuple{Any}","page":"API reference","title":"DFTK.PspHgh","text":"PspHgh(path[, identifier, description])\n\nConstruct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PspUpf-Tuple{Any}","page":"API reference","title":"DFTK.PspUpf","text":"PspUpf(path[, identifier])\n\nConstruct a Unified Pseudopotential Format pseudopotential from file.\n\nDoes not support:\n\nFully-realtivistic / spin-orbit pseudos\nBare Coulomb / all-electron potentials\nSemilocal potentials\nUltrasoft potentials\nProjector-augmented wave potentials\nGIPAW reconstruction data\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.RealFourierOperator","page":"API reference","title":"DFTK.RealFourierOperator","text":"Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (; real, fourier). They also implement mul! and Matrix(op) for exploratory use.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.RealSpaceMultiplication","page":"API reference","title":"DFTK.RealSpaceMultiplication","text":"Real space multiplication by a potential:\n\n(Hψ)(r) = V(r) ψ(r)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceDensity","page":"API reference","title":"DFTK.ScfConvergenceDensity","text":"Flag convergence by using the L2Norm of the density change in one SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceEnergy","page":"API reference","title":"DFTK.ScfConvergenceEnergy","text":"Flag convergence as soon as total energy change drops below a tolerance.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceForce","page":"API reference","title":"DFTK.ScfConvergenceForce","text":"Flag convergence on the change in cartesian force between two iterations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfDefaultCallback","page":"API reference","title":"DFTK.ScfDefaultCallback","text":"Default callback function for self_consistent_field methods, which prints a convergence table.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfSaveCheckpoints","page":"API reference","title":"DFTK.ScfSaveCheckpoints","text":"Adds checkpointing to a DFTK self-consistent field calculation. The checkpointing file is silently overwritten. Requires the package for writing the output file (usually JLD2) to be loaded.\n\nfilename: Name of the checkpointing file.\ncompress: Should compression be used on writing (rarely useful)\nsave_ψ: Should the bands also be saved (noteworthy additional cost ... use carefully)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.SimpleMixing","page":"API reference","title":"DFTK.SimpleMixing","text":"Simple mixing: J^-1 1\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.TermNoop","page":"API reference","title":"DFTK.TermNoop","text":"A term with a constant zero energy.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Xc","page":"API reference","title":"DFTK.Xc","text":"Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.χ0Mixing","page":"API reference","title":"DFTK.χ0Mixing","text":"Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).\n\n\n\n\n\n","category":"type"},{"location":"api/#AbstractFFTs.fft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.fft!","text":"fft!(\n f_fourier::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_real::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.fft-Union{Tuple{U}, Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray{U}}} where {T, U}","page":"API reference","title":"AbstractFFTs.fft","text":"fft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_real::AbstractArray{U}\n) -> Any\n\n\nfft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)\n\nPerform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.ifft!","text":"ifft!(\n f_real::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_fourier::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of ifft.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft-Tuple{PlaneWaveBasis, AbstractArray}","page":"API reference","title":"AbstractFFTs.ifft","text":"ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any\n\n\nifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)\n\nPerform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_mass-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_mass","text":"atomic_mass(el::DFTK.Element) -> Any\n\n\nReturn the atomic mass of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_symbol-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_symbol","text":"atomic_symbol(_::DFTK.Element) -> Any\n\n\nChemical symbol corresponding to an element\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_system","page":"API reference","title":"AtomsBase.atomic_system","text":"atomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector\n) -> AtomsBase.FlexibleSystem\natomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector,\n magnetic_moments::AbstractVector\n) -> AtomsBase.FlexibleSystem\n\n\natomic_system(model::DFTK.Model, magnetic_moments=[])\natomic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#AtomsBase.periodic_system","page":"API reference","title":"AtomsBase.periodic_system","text":"periodic_system(model::Model) -> AtomsBase.FlexibleSystem\nperiodic_system(\n model::Model,\n magnetic_moments\n) -> AtomsBase.FlexibleSystem\n\n\nperiodic_system(model::DFTK.Model, magnetic_moments=[])\nperiodic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#Brillouin.KPaths.irrfbz_path","page":"API reference","title":"Brillouin.KPaths.irrfbz_path","text":"irrfbz_path(\n model::Model;\n ...\n) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}\nirrfbz_path(\n model::Model,\n magnetic_moments;\n dim,\n space_group_number\n) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}\n\n\nExtract the high-symmetry k-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the k-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.\n\nIf the cell is a supercell of a smaller primitive cell, the standard k-path of the associated primitive cell is returned. So, the high-symmetry k points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.\n\nThe dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).\n\nDue to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.CROP","page":"API reference","title":"DFTK.CROP","text":"CROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real\n) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}\nCROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real,\n warming\n) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}\n\n\nCROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.G_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}\n\n\nG_vectors(basis::PlaneWaveBasis)\nG_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of wave vectors G in reduced (integer) coordinates of a basis or a k-point kpt.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors-Tuple{Union{Tuple, AbstractVector}}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any\n\n\nG_vectors(fft_size::Tuple)\n\nThe wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors_cart","text":"G_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nG_vectors_cart(basis::PlaneWaveBasis)\nG_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G vectors of a given basis or kpt, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors","text":"Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any\n\n\nGplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_cart-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_cart","text":"Gplusk_vectors_cart(\n basis::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nGplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_in_supercell-Tuple{PlaneWaveBasis, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_in_supercell","text":"Gplusk_vectors_in_supercell(\n basis::PlaneWaveBasis,\n basis_supercell::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nMaps all k+G vectors of an given basis as G vectors of the supercell basis, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.HybridMixing-Tuple{}","page":"API reference","title":"DFTK.HybridMixing","text":"HybridMixing(\n;\n εr,\n kTF,\n localization,\n adjust_temperature,\n kwargs...\n) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D) \n + sqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\nendaligned\n\nwhere C_0 = 1 - ε_r, D_textloc is the local density of states, D is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020.\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.IncreaseMixingTemperature-Tuple{}","page":"API reference","title":"DFTK.IncreaseMixingTemperature","text":"IncreaseMixingTemperature(\n;\n factor,\n above_ρdiff,\n temperature_max\n) -> DFTK.var\"#callback#688\"{DFTK.var\"#callback#687#689\"{Int64, Float64}}\n\n\nIncrease the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LdosMixing-Tuple{}","page":"API reference","title":"DFTK.LdosMixing","text":"LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\nendaligned\n\nwhere D_textloc is the local density of states, D is the density of states. For details see Herbst, Levitt 2020.\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfAcceptImprovingStep-Tuple{}","page":"API reference","title":"DFTK.ScfAcceptImprovingStep","text":"ScfAcceptImprovingStep(\n;\n max_energy_change,\n max_relative_residual\n) -> DFTK.var\"#accept_step#778\"{Float64, Float64}\n\n\nAccept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_K-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.apply_K","text":"apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any\n\n\napply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)\n\nCompute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_kernel-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.apply_kernel","text":"apply_kernel(\n basis::PlaneWaveBasis,\n δρ;\n RPA,\n kwargs...\n) -> Any\n\n\napply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)\n\nComputes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any, AbstractVecOrMat}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(\n symop::SymOp,\n basis,\n kpoint,\n ψk::AbstractVecOrMat\n) -> Tuple{Any, Any}\n\n\nApply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new k-point).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any\n\n\nApply a symmetry operation to a density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_Ω-Tuple{Any, Any, Hamiltonian, Any}","page":"API reference","title":"DFTK.apply_Ω","text":"apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any\n\n\napply_Ω(δψ, ψ, H::Hamiltonian, Λ)\n\nCompute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_χ0-Union{Tuple{TδV}, Tuple{T}, Tuple{Any, Any, Any, T, Any, AbstractArray{TδV}}} where {T, TδV}","page":"API reference","title":"DFTK.apply_χ0","text":"apply_χ0(\n ham,\n ψ,\n occupation,\n εF,\n eigenvalues,\n δV::AbstractArray{TδV};\n occupation_threshold,\n q,\n kwargs_sternheimer...\n) -> Any\n\n\nGet the density variation δρ corresponding to a potential variation δV.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.attach_psp-Tuple{AtomsBase.AbstractSystem, AbstractDict{Symbol, String}}","page":"API reference","title":"DFTK.attach_psp","text":"attach_psp(\n system::AtomsBase.AbstractSystem,\n pspmap::AbstractDict{Symbol, String}\n) -> AtomsBase.FlexibleSystem\n\n\nattach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})\nattach_psp(system::AbstractSystem; psps::String...)\n\nReturn a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.\n\nExamples\n\nSelect pseudopotentials for all silicon and oxygen atoms in the system.\n\njulia> attach_psp(system, Dict(:Si => \"hgh/lda/si-q4\", :O => \"hgh/lda/o-q6\")\n\nSame thing but using the kwargs syntax:\n\njulia> attach_psp(system, Si=\"hgh/lda/si-q4\", O=\"hgh/lda/o-q6\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.band_data_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.band_data_to_dict","text":"band_data_to_dict(\n band_data::NamedTuple;\n kwargs...\n) -> Dict{String, Any}\n\n\nConvert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns meaningful data. All other processors still return a dictionary (to simplify code in calling locations), but the data may be dummy.\n\nSome details on the conventions for the returned data:\n\nεF: Computed Fermi level (if present in band_data)\nlabels: A mapping of high-symmetry k-Point labels to the index in the \"kcoords\" vector of the corresponding k-Point.\neigenvalues, eigenvalues_error, occupation, residual_norms: (n_bands, n_kpoints, n_spin) arrays of the respective data.\nn_iter: (n_kpoints, n_spin) array of the number of iterations the diagonalization routine required.\nkpt_max_n_G: Maximal number of G-vectors used for any k-point.\nkpt_n_G_vectors: (n_kpoints, n_spin) array, the number of valid G-vectors for each k-point, i.e. the extend along the first axis of ψ where data is valid.\nkpt_G_vectors: (3, max_n_G, n_kpoints, n_spin) array of the integer (reduced) coordinates of the G-points used for each k-point.\nψ: (max_n_G, n_bands, n_kpoints, n_spin) arrays where max_n_G is the maximal number of G-vectors used for any k-point. The data is zero-padded, i.e. for k-points which have less G-vectors than maxnG, then there are tailing zeros.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_fft_plans!-Tuple{Array{ComplexF64}}","page":"API reference","title":"DFTK.build_fft_plans!","text":"build_fft_plans!(\n tmp::Array{ComplexF64}\n) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}\n\n\nPlan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_form_factors-Union{Tuple{TT}, Tuple{Any, AbstractArray{StaticArraysCore.SVector{3, TT}, 1}}} where TT","page":"API reference","title":"DFTK.build_form_factors","text":"build_form_factors(\n psp,\n G_plus_k::AbstractArray{StaticArraysCore.SArray{Tuple{3}, TT, 1, 3}, 1}\n) -> Matrix{T} where T<:(Complex{_A} where _A)\n\n\nBuild form factors (Fourier transforms of projectors) for an atom centered at 0.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_projection_vectors-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, Any, Any}} where T","page":"API reference","title":"DFTK.build_projection_vectors","text":"build_projection_vectors(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt::Kpoint,\n psps,\n psp_positions\n) -> Any\n\n\nBuild projection vectors for a atoms array generated by term_nonlocal\n\nbeginaligned\nH_rm at = sum_ij C_ij ketrm proj_i brarm proj_j \nH_rm per = sum_R sum_ij C_ij ketrm proj_i(x-R) brarm proj_j(x-R)\nendaligned\n\nbeginaligned\nbrakete_k(G) middle H_rm pere_k(G)\n = ldots \n = frac1Ω sum_ij C_ij widehatrm proj_i(k+G) widehatrm proj_j^*(k+G)\nendaligned\n\nwhere widehatrm proj_i(p) = _ℝ^3 rm proj_i(r) e^-ipr dr.\n\nWe store frac1sqrt Ω widehatrm proj_i(k+G) in proj_vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Tuple{NamedTuple}","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(scfres::NamedTuple) -> NamedTuple\n\n\nTranspose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:\n\nbasis_supercell and ψ_supercell are computed by the routines above.\nThe supercell occupations vector is the concatenation of all input occupations vectors.\nThe supercell density is computed with supercell occupations and ψ_supercell.\nSupercell energies are the multiplication of input energies by the number of unit cells in the supercell.\n\nOther parameters stay untouched.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n basis::PlaneWaveBasis{T, VT} where VT<:Real\n) -> PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}\n\n\nConstruct a plane-wave basis whose unit cell is the supercell associated to an input basis k-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T<:Real","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n ψ,\n basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,\n basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real\n) -> Any\n\n\nRe-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at Γ-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cg!-Union{Tuple{T}, Tuple{AbstractVector{T}, LinearMaps.LinearMap{T}, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.cg!","text":"cg!(\n x::AbstractArray{T, 1},\n A::LinearMaps.LinearMap{T},\n b::AbstractArray{T, 1};\n precon,\n proj,\n callback,\n tol,\n maxiter,\n miniter\n) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), <:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}}\n\n\nImplementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_ionic-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_ionic","text":"charge_ionic(el::DFTK.Element) -> Int64\n\n\nReturn the total ionic charge of an atom type (nuclear charge - core electrons)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_nuclear-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_nuclear","text":"charge_nuclear(_::DFTK.Element) -> Int64\n\n\nReturn the total nuclear charge of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cis2pi-Tuple{Any}","page":"API reference","title":"DFTK.cis2pi","text":"cis2pi(x) -> Any\n\n\nFunction to compute exp(2π i x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_amn_kpoint-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_amn_kpoint","text":"compute_amn_kpoint(\n basis::PlaneWaveBasis,\n kpt,\n ψk,\n projections,\n n_bands\n) -> Any\n\n\nCompute the starting matrix for Wannierization.\n\nWannierization searches for a unitary matrix U_m_n. As a starting point for the search, we can provide an initial guess function g for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called A_k_mn, and is computed as follows: A_k_mn = langle ψ_m^k g^textper_n rangle. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.\n\nCenters are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.\n\nGiven an orbital g_n, the periodized orbital is defined by : g^per_n = sumlimits_R in rm lattice g_n( cdot - R). The Fourier coefficient of g^per_n at any G is given by the value of the Fourier transform of g_n in G.\n\nEach projection is a callable object that accepts the basis and some p-points as an argument, and returns the Fourier transform of g_n at the p-points.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{Any, Brillouin.KPaths.KPath}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis_or_scfres,\n kpath::Brillouin.KPaths.KPath;\n kline_density,\n kwargs...\n) -> NamedTuple\n\n\nCompute band data along a specific Brillouin.KPath using a kline_density, the number of k-points per inverse bohrs (i.e. overall in units of length).\n\nIf not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{NamedTuple, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n scfres::NamedTuple,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Any, Any, Vector{T} where T<:NamedTuple}}\n\n\nCompute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis::PlaneWaveBasis,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n n_extra,\n ρ,\n εF,\n eigensolver,\n tol,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Nothing, Nothing, Vector{T} where T<:NamedTuple}}\n\n\nCompute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:\n\nkgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.\ntol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.\neigensolver: The diagonalisation method to be employed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_current-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_current","text":"compute_current(\n basis::PlaneWaveBasis,\n ψ,\n occupation\n) -> Vector\n\n\nComputes the probability (not charge) current, _n f_n Im(ψ_n ψ_n).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_density","text":"compute_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n occupation_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\ncompute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)\n\nCompute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per k-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dos-Tuple{Any, Any, Any}","page":"API reference","title":"DFTK.compute_dos","text":"compute_dos(\n ε,\n basis,\n eigenvalues;\n smearing,\n temperature\n) -> Any\n\n\nTotal density of states at energy ε\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_dynmat","text":"compute_dynmat(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n q,\n ρ,\n ham,\n εF,\n eigenvalues,\n kwargs...\n) -> Any\n\n\nCompute the dynamical matrix in the form of a 3n_rm atoms3n_rm atoms tensor in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_dynmat_cart","text":"compute_dynmat_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCartesian form of compute_dynmat.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_fft_size-Union{Tuple{T}, Tuple{Model{T}, Any}, Tuple{Model{T}, Any, Any}} where T","page":"API reference","title":"DFTK.compute_fft_size","text":"compute_fft_size(\n model::Model{T},\n Ecut;\n ...\n) -> Tuple{Vararg{Any, _A}} where _A\ncompute_fft_size(\n model::Model{T},\n Ecut,\n kgrid;\n ensure_smallprimes,\n algorithm,\n factors,\n kwargs...\n) -> Tuple{Vararg{Any, _A}} where _A\n\n\nDetermine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).\n\nOptionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.\n\nThe function will determine the smallest parallelepiped containing the wave vectors G^22 leq E_textcut textsupersampling^2. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.\n\nIf factors is not empty, ensure that the resulting fft_size contains all the factors\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_forces","text":"compute_forces(scfres) -> Any\n\n\nCompute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_forces_cart","text":"compute_forces_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCompute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_inverse_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_inverse_lattice","text":"compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the inverse of the lattice. Takes special care of 1D or 2D cases.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_kernel-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_kernel","text":"compute_kernel(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n kwargs...\n) -> Any\n\n\ncompute_kernel(basis::PlaneWaveBasis; kwargs...)\n\nComputes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks\n\nleft(beginarraycc\n K_αα K_αβ\n K_βα K_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_ldos-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_ldos","text":"compute_ldos(\n ε,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues,\n ψ;\n smearing,\n temperature,\n weight_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\nLocal density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, Number}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n εF::Number;\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}\n\n\nCompute occupation given eigenvalues and Fermi level\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, AbstractFermiAlgorithm}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector;\n ...\n) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}\ncompute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n fermialg::AbstractFermiAlgorithm;\n tol_n_elec,\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}\n\n\nCompute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_recip_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_recip_lattice","text":"compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_stresses_cart-Tuple{Any}","page":"API reference","title":"DFTK.compute_stresses_cart","text":"compute_stresses_cart(scfres) -> Any\n\n\nCompute the stresses of an obtained SCF solution. The stress tensor is given by\n\nleft( beginarrayccc\nσ_xx σ_xy σ_xz \nσ_yx σ_yy σ_yz \nσ_zx σ_zy σ_zz\nright) = frac1Ω left fracdE (I+ϵ) * LdMright_ϵ=0\n\nwhere ϵ is the strain. See O. Nielsen, R. Martin Phys. Rev. B. 32, 3792 (1985) for details. In Voigt notation one would use the vector σ_xx σ_yy σ_zz σ_zy σ_zx σ_yx.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Tuple{PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpt_out::Kpoint\n) -> Any\n\n\nReturn a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Tuple{PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Vector\n\n\nReturn a list of sparse matrices (one per k-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_unit_cell_volume-Tuple{Any}","page":"API reference","title":"DFTK.compute_unit_cell_volume","text":"compute_unit_cell_volume(lattice) -> Any\n\n\nCompute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δHψ_αs-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_δHψ_αs","text":"compute_δHψ_αs(basis::PlaneWaveBasis, ψ, α, s, q) -> Any\n\n\nAssemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δocc!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.compute_δocc!","text":"compute_δocc!(\n δocc,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n εF,\n ε,\n δHψ\n) -> NamedTuple{(:δocc, :δεF), <:Tuple{Any, Any}}\n\n\nCompute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δψ!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 5}}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.compute_δψ!","text":"compute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ;\n ...\n)\ncompute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ,\n ε_minus_q;\n ψ_extra,\n q,\n kwargs_sternheimer...\n)\n\n\nPerform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_χ0-Tuple{Any}","page":"API reference","title":"DFTK.compute_χ0","text":"compute_χ0(ham; temperature) -> Any\n\n\nCompute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:\n\nleft(beginarraycc\n (χ_0)_αα (χ_0)_αβ \n (χ_0)_βα (χ_0)_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cos2pi-Tuple{Any}","page":"API reference","title":"DFTK.cos2pi","text":"cos2pi(x) -> Any\n\n\nFunction to compute cos(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{Any, Any}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psps, psp_positions) -> Any\n\n\ncount_n_proj(psps, psp_positions)\n\nNumber of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any\n\n\ncount_n_proj(psp, l)\n\nNumber of projector functions for angular momentum l, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj(psp)\n\nNumber of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(\n psp::DFTK.NormConservingPsp,\n l::Integer\n) -> Any\n\n\ncount_n_proj_radial(psp, l)\n\nNumber of projector radial functions at angular momentum l.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj_radial(psp)\n\nNumber of projector radial functions at all angular momenta up to psp.lmax.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.create_supercell-NTuple{4, Any}","page":"API reference","title":"DFTK.create_supercell","text":"create_supercell(\n lattice,\n atoms,\n positions,\n supercell_size\n) -> NamedTuple{(:lattice, :atoms, :positions), <:Tuple{Any, Any, Any}}\n\n\nConstruct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.datadir_psp-Tuple{}","page":"API reference","title":"DFTK.datadir_psp","text":"datadir_psp() -> String\n\n\nReturn the data directory with pseudopotential files\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_fermialg-Tuple{DFTK.Smearing.SmearingFunction}","page":"API reference","title":"DFTK.default_fermialg","text":"default_fermialg(\n _::DFTK.Smearing.SmearingFunction\n) -> FermiBisection\n\n\nDefault selection of a Fermi level determination algorithm\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_symmetries-NTuple{6, Any}","page":"API reference","title":"DFTK.default_symmetries","text":"default_symmetries(\n lattice,\n atoms,\n positions,\n magnetic_moments,\n spin_polarization,\n terms;\n tol_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nDefault logic to determine the symmetry operations to be used in the model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_wannier_centers-Tuple{Any}","page":"API reference","title":"DFTK.default_wannier_centers","text":"default_wannier_centers(n_wannier) -> Any\n\n\nDefault random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.determine_spin_polarization-Tuple{Any}","page":"API reference","title":"DFTK.determine_spin_polarization","text":"determine_spin_polarization(magnetic_moments) -> Symbol\n\n\n:none if no element has a magnetic moment, else :collinear or :full.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diagonalize_all_kblocks-Tuple{Any, Hamiltonian, Int64}","page":"API reference","title":"DFTK.diagonalize_all_kblocks","text":"diagonalize_all_kblocks(\n eigensolver,\n ham::Hamiltonian,\n nev_per_kpoint::Int64;\n ψguess,\n prec_type,\n interpolate_kpoints,\n tol,\n miniter,\n maxiter,\n n_conv_check\n) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}\n\n\nFunction for diagonalising each k-Point blow of ham one step at a time. Some logic for interpolating between k-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single k-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diameter-Tuple{AbstractMatrix}","page":"API reference","title":"DFTK.diameter","text":"diameter(lattice::AbstractMatrix) -> Any\n\n\nCompute the diameter of the unit cell\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.direct_minimization-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.direct_minimization","text":"direct_minimization(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n ψ,\n tol,\n is_converged,\n maxiter,\n prec_type,\n callback,\n optim_method,\n linesearch,\n kwargs...\n) -> Any\n\n\nComputes the ground state by direct minimization. kwargs... are passed to Optim.Options() and optim_method selects the optim approach which is employed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.disable_threading-Tuple{}","page":"API reference","title":"DFTK.disable_threading","text":"disable_threading() -> Union{Nothing, Bool}\n\n\nConvenience function to disable all threading in DFTK and assert that Julia threading is off as well.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.divergence_real-Tuple{Any, Any}","page":"API reference","title":"DFTK.divergence_real","text":"divergence_real(operand, basis) -> Any\n\n\nCompute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, AbstractArray, Any}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges::AbstractArray,\n positions;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n S,\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n η\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nCompute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.\n\nFor now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n S,\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n max_radius\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nCompute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).\n\nThe potential is expected to decrease quickly at infinity.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_psp_correction-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.energy_psp_correction","text":"energy_psp_correction(\n lattice::AbstractArray{T, 2},\n atoms,\n atom_groups\n) -> Any\n\n\nCompute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.enforce_real!-Tuple{Any, PlaneWaveBasis}","page":"API reference","title":"DFTK.enforce_real!","text":"enforce_real!(\n fourier_coeffs,\n basis::PlaneWaveBasis\n) -> AbstractArray\n\n\nEnsure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.estimate_integer_lattice_bounds-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.estimate_integer_lattice_bounds","text":"estimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ;\n ...\n) -> Vector\nestimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ,\n shift;\n tol\n) -> Vector\n\n\nEstimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_fourier-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_fourier","text":"eval_psp_density_core_fourier(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Any\n\n\neval_psp_density_core_fourier(psp, p)\n\nEvaluate the atomic core charge density in reciprocal space:\n\nbeginaligned\nρ_rm core(p) = _ℝ^3 ρ_rm core(r) e^-ipr dr \n = 4π _ℝ_+ ρ_rm core(r) fracsin(pr)ρr r^2 dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_real-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_real","text":"eval_psp_density_core_real(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Any\n\n\neval_psp_density_core_real(psp, r)\n\nEvaluate the atomic core charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_fourier","text":"eval_psp_density_valence_fourier(\n psp::DFTK.NormConservingPsp,\n p::AbstractVector\n) -> Any\n\n\neval_psp_density_valence_fourier(psp, p)\n\nEvaluate the atomic valence charge density in reciprocal space:\n\nbeginaligned\nρ_rm val(p) = _ℝ^3 ρ_rm val(r) e^-ipr dr \n = 4π _ℝ_+ ρ_rm val(r) fracsin(pr)ρr r^2 dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_real","text":"eval_psp_density_valence_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_density_valence_real(psp, r)\n\nEvaluate the atomic valence charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_energy_correction","page":"API reference","title":"DFTK.eval_psp_energy_correction","text":"eval_psp_energy_correction([T=Float64,] psp, n_electrons)\n\nEvaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.\n\nNotice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.\n\nThe energy correction is defined as the limit of the Fourier-transform of the local potential as p to 0, using the same correction as in the Fourier-transform of the local potential:\n\nlim_p to 0 4π N_rm elec _ℝ_+ (V(r) - C(r)) fracsin(pr)pr r^2 dr + FC(r)\n = 4π N_rm elec _ℝ_+ (V(r) + Zr) r^2 dr\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.eval_psp_local_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_fourier","text":"eval_psp_local_fourier(\n psp::DFTK.NormConservingPsp,\n p::AbstractVector\n) -> Any\n\n\neval_psp_local_fourier(psp, p)\n\nEvaluate the local part of the pseudopotential in reciprocal space:\n\nbeginaligned\nV_rm loc(p) = _ℝ^3 V_rm loc(r) e^-ipr dr \n = 4π _ℝ_+ V_rm loc(r) fracsin(pr)p r dr\nendaligned\n\nIn practice, the local potential should be corrected using a Coulomb-like term C(r) = -Zr to remove the long-range tail of V_rm loc(r) from the integral:\n\nbeginaligned\nV_rm loc(p) = _ℝ^3 (V_rm loc(r) - C(r)) e^-ipr dr + FC(r) \n = 4π _ℝ_+ (V_rm loc(r) + Zr) fracsin(pr)pr r^2 dr - Zp^2\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_local_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_real","text":"eval_psp_local_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_local_real(psp, r)\n\nEvaluate the local part of the pseudopotential in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_fourier","text":"eval_psp_projector_fourier(\n psp::DFTK.NormConservingPsp,\n p::AbstractVector\n)\n\n\neval_psp_projector_fourier(psp, i, l, p)\n\nEvaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus p:\n\nbeginaligned\nrm proj(p) = _ℝ^3 rm proj_il(r) e^-ipr dr \n = 4π _ℝ_+ r^2 rm proj_il(r) j_l(pr) dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_real-Tuple{DFTK.NormConservingPsp, Any, Any, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_real","text":"eval_psp_projector_real(\n psp::DFTK.NormConservingPsp,\n i,\n l,\n r::AbstractVector\n) -> Any\n\n\neval_psp_projector_real(psp, i, l, r)\n\nEvaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.filled_occupation-Tuple{Any}","page":"API reference","title":"DFTK.filled_occupation","text":"filled_occupation(model) -> Int64\n\n\nMaximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.find_equivalent_kpt-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.find_equivalent_kpt","text":"find_equivalent_kpt(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kcoord,\n spin;\n tol\n) -> NamedTuple{(:index, :ΔG), <:Tuple{Int64, Any}}\n\n\nFind the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.gather_kpts","text":"gather_kpts(\n basis::PlaneWaveBasis\n) -> Union{Nothing, PlaneWaveBasis}\n\n\nGather the distributed k-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only for debugging or to extract data for serialisation to disk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts_block!-Union{Tuple{A}, Tuple{Any, PlaneWaveBasis, AbstractVector{A}}} where A","page":"API reference","title":"DFTK.gather_kpts_block!","text":"gather_kpts_block!(\n dest,\n basis::PlaneWaveBasis,\n kdata::AbstractArray{A, 1}\n) -> Any\n\n\nGather the distributed data of a quantity depending on k-Points on the master process and save it in dest as a dense (size(kdata[1])..., n_kpoints) array. On the other (non-master) processes nothing is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gaussian_valence_charge_density_fourier-Union{Tuple{T}, Tuple{DFTK.Element, T}} where T<:Real","page":"API reference","title":"DFTK.gaussian_valence_charge_density_fourier","text":"gaussian_valence_charge_density_fourier(\n el::DFTK.Element,\n p::Real\n) -> Any\n\n\nGaussian valence charge density using Abinit's coefficient table, in Fourier space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.guess_density","page":"API reference","title":"DFTK.guess_density","text":"guess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity;\n ...\n) -> Any\nguess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity,\n magnetic_moments;\n n_electrons\n) -> Any\n\n\nguess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,\n magnetic_moments=[]; n_electrons=basis.model.n_electrons)\n\nBuild a superposition of atomic densities (SAD) guess density or a rarndom guess density.\n\nThe guess atomic densities are taken as one of the following depending on the input method:\n\n-RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:\n\nhatρ(G) = Z_mathrmvalence expleft(-(2π textlength G)^2right)\n\nValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the\n\npseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.\n\nWhen magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of μ_B.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.hamiltonian_with_total_potential-Tuple{Hamiltonian, Any}","page":"API reference","title":"DFTK.hamiltonian_with_total_potential","text":"hamiltonian_with_total_potential(\n ham::Hamiltonian,\n V\n) -> Hamiltonian\n\n\nReturns a new Hamiltonian with local potential replaced by the given one\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.hankel-Union{Tuple{T}, Tuple{AbstractVector, AbstractVector, Integer, T}} where T<:Real","page":"API reference","title":"DFTK.hankel","text":"hankel(\n r::AbstractVector,\n r2_f::AbstractVector,\n l::Integer,\n p::Real\n) -> Any\n\n\nhankel(r, r2_f, l, p)\n\nCompute the Hankel transform\n\n Hf = 4pi int_0^infty r f(r) j_l(pr) r dr\n\nThe integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate p.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.has_core_density-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.has_core_density","text":"has_core_density(_::DFTK.Element) -> Any\n\n\nCheck presence of model core charge density (non-linear core correction).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.index_G_vectors-Tuple{Tuple, AbstractVector{<:Integer}}","page":"API reference","title":"DFTK.index_G_vectors","text":"index_G_vectors(\n fft_size::Tuple,\n G::AbstractVector{<:Integer}\n) -> Any\n\n\nReturn the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Union{Tuple{T}, Tuple{AbstractArray{T, 4}, PlaneWaveBasis, PlaneWaveBasis}} where T","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in::AbstractArray{T, 4},\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> AbstractArray{T, 4} where T\n\n\nInterpolate a density expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Union{Tuple{T}, Tuple{AbstractArray{T, 4}, Tuple{T, T, T} where T, Tuple{T, T, T} where T, Any, Any}} where T","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in::AbstractArray{T, 4},\n grid_in::Tuple{T, T, T} where T,\n grid_out::Tuple{T, T, T} where T,\n lattice_in,\n lattice_out\n) -> AbstractArray{T, 4} where T\n\n\nInterpolate a density in real space from one FFT grid to another, where lattice_in and lattice_out may be supercells of each other.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Union{Tuple{T}, Tuple{AbstractArray{T, 4}, Tuple{T, T, T} where T}} where T","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in::AbstractArray{T, 4},\n grid_out::Tuple{T, T, T} where T\n) -> AbstractArray{T, 4} where T\n\n\nInterpolate a density in real space from one FFT grid to another. Assumes the lattice is unchanged.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_kpoint-Tuple{AbstractVecOrMat, PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.interpolate_kpoint","text":"interpolate_kpoint(\n data_in::AbstractVecOrMat,\n basis_in::PlaneWaveBasis,\n kpoint_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpoint_out::Kpoint\n) -> Any\n\n\nInterpolate some data from one k-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irfft-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray}} where T","page":"API reference","title":"DFTK.irfft","text":"irfft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_fourier::AbstractArray\n) -> Any\n\n\nPerform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irreducible_kcoords-Tuple{MonkhorstPack, AbstractVector{<:SymOp}}","page":"API reference","title":"DFTK.irreducible_kcoords","text":"irreducible_kcoords(\n kgrid::MonkhorstPack,\n symmetries::AbstractVector{<:SymOp};\n check_symmetry\n) -> Union{@NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, kweights::Vector{Float64}}, @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Float64}}, kweights::Vector{Float64}}}\n\n\nConstruct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.is_metal-Tuple{Any, Any}","page":"API reference","title":"DFTK.is_metal","text":"is_metal(eigenvalues, εF; tol) -> Bool\n\n\nis_metal(eigenvalues, εF; tol)\n\nDetermine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.k_to_equivalent_kpq_permutation-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.k_to_equivalent_kpq_permutation","text":"k_to_equivalent_kpq_permutation(\n basis::PlaneWaveBasis,\n qcoord\n) -> Vector\n\n\nReturn the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_maximal_spacing-Tuple{Any, Any}","page":"API reference","title":"DFTK.kgrid_from_maximal_spacing","text":"kgrid_from_maximal_spacing(\n lattice,\n spacing;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nBuild a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around 2π * 004 AA^-1).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_minimal_n_kpoints-Tuple{Any, Integer}","page":"API reference","title":"DFTK.kgrid_from_minimal_n_kpoints","text":"kgrid_from_minimal_n_kpoints(\n lattice,\n n_kpoints::Integer;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nSelects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of k-points are used. The distribution of k-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpath_get_kcoords-Union{Tuple{Brillouin.KPaths.KPathInterpolant{D}}, Tuple{D}} where D","page":"API reference","title":"DFTK.kpath_get_kcoords","text":"kpath_get_kcoords(\n kinter::Brillouin.KPaths.KPathInterpolant{D}\n) -> Vector\n\n\nReturn kpoint coordinates in reduced coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpq_equivalent_blochwave_to_kpq-NTuple{4, Any}","page":"API reference","title":"DFTK.kpq_equivalent_blochwave_to_kpq","text":"kpq_equivalent_blochwave_to_kpq(\n basis,\n kpt,\n q,\n ψk_plus_q_equivalent\n) -> NamedTuple{(:kpt, :ψk), <:Tuple{Kpoint, Any}}\n\n\nCreate the Fourier expansion of ψ_k+q from ψ_k+q, where k+q is in basis.kpoints. while k+q may or may not be inside.\n\nIf ΔG k+q - (k+q), then we have that\n\n _G hatu_k+q(G) e^i(k+q+G)r = _G hatu_k+q(G-ΔG) e^i(k+q+ΔG+G)r\n\nhence\n\n u_k+q(G) = u_k+q(G + ΔG)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.krange_spin-Tuple{PlaneWaveBasis, Integer}","page":"API reference","title":"DFTK.krange_spin","text":"krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any\n\n\nReturn the index range of k-points that have a particular spin component.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kwargs_scf_checkpoints-Tuple{DFTK.AbstractBasis}","page":"API reference","title":"DFTK.kwargs_scf_checkpoints","text":"kwargs_scf_checkpoints(\n basis::DFTK.AbstractBasis;\n filename,\n callback,\n diagtolalg,\n ρ,\n ψ,\n save_ψ,\n kwargs...\n) -> NamedTuple{(:callback, :diagtolalg, :ψ, :ρ), <:Tuple{ComposedFunction{ScfDefaultCallback, ScfSaveCheckpoints}, AdaptiveDiagtol, Any, Any}}\n\n\nTransparently handle checkpointing by either returning kwargs for self_consistent_field, which start checkpointing (if no checkpoint file is present) or that continue a checkpointed run (if a checkpoint file can be loaded). filename is the location where the checkpoint is saved, save_ψ determines whether orbitals are saved in the checkpoint as well. The latter is discouraged, since generally slow.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.list_psp","page":"API reference","title":"DFTK.list_psp","text":"list_psp(; ...) -> Any\nlist_psp(element; family, functional, core) -> Any\n\n\nlist_psp(element; functional, family, core)\n\nList the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.\n\nExamples\n\njulia> list_psp(; family=\"hgh\")\n\nwill list all HGH-type pseudopotentials and\n\njulia> list_psp(; family=\"hgh\", functional=\"lda\")\n\nwill only list those for LDA (also known as Pade in this context) and\n\njulia> list_psp(:O, core=:semicore)\n\nwill list all oxygen semicore pseudopotentials known to DFTK.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.load_psp-Tuple{AbstractString}","page":"API reference","title":"DFTK.load_psp","text":"load_psp(\n key::AbstractString;\n kwargs...\n) -> Union{PspHgh{Float64}, PspUpf{_A, Interpolations.Extrapolation{T, 1, ITPT, IT, Interpolations.Throw{Nothing}}} where {_A, T, ITPT, IT}}\n\n\nLoad a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.load_scfres","page":"API reference","title":"DFTK.load_scfres","text":"load_scfres(filename::AbstractString; ...) -> Any\nload_scfres(\n filename::AbstractString,\n basis;\n skip_hamiltonian,\n strict\n) -> Any\n\n\nLoad back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.\n\nIf basis is nothing, the basis is also loaded and reconstructed from the file, in which case architecture=CPU(). If a basis is passed, this one is used, which can be used to continue computation on a slightly different model or to avoid the cost of rebuilding the basis. If the stored basis and the passed basis are inconsistent (e.g. different FFT size, Ecut, k-points etc.) the load_scfres will error out.\n\nBy default the energies and ham (Hamiltonian object) are recomputed. To avoid this, set skip_hamiltonian=true. On errors the routine exits unless strict=false in which case it tries to recover from the file as much data as it can, but then the resulting scfres might not be fully consistent.\n\nwarning: No compatibility guarantees\nNo guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions (including patch versions) or stop working / be removed in the future.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.model_DFT-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}, Xc}","page":"API reference","title":"DFTK.model_DFT","text":"model_DFT(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector},\n xc::Xc;\n extra_terms,\n kwargs...\n) -> Model\n\n\nBuild a DFT model from the specified atoms, with the specified functionals.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_LDA-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_LDA","text":"model_LDA(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an LDA model (Perdew & Wang parametrization) from the specified atoms. https://doi.org/10.1103/PhysRevB.45.13244\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_PBE-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_PBE","text":"model_PBE(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an PBE-GGA model from the specified atoms. https://doi.org/10.1103/PhysRevLett.77.3865\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_SCAN-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_SCAN","text":"model_SCAN(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild a SCAN meta-GGA model from the specified atoms. https://doi.org/10.1103/PhysRevLett.115.036402\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_atomic-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_atomic","text":"model_atomic(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n extra_terms,\n kinetic_blowup,\n kwargs...\n) -> Model\n\n\nConvenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.mpi_nprocs","page":"API reference","title":"DFTK.mpi_nprocs","text":"mpi_nprocs() -> Int64\nmpi_nprocs(comm) -> Int64\n\n\nNumber of processors used in MPI. Can be called without ensuring initialization.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.multiply_ψ_by_blochwave-Tuple{PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.multiply_ψ_by_blochwave","text":"multiply_ψ_by_blochwave(\n basis::PlaneWaveBasis,\n ψ,\n f_real,\n q\n) -> Any\n\n\nmultiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)\n\nReturn the Fourier coefficients for the Bloch waves f^rm real_q ψ_k-q in an element of basis.kpoints equivalent to k-q.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_core-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_core","text":"n_elec_core(el::DFTK.Element) -> Any\n\n\nReturn the number of core electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_valence-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_valence","text":"n_elec_valence(el::DFTK.Element) -> Any\n\n\nReturn the number of valence electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_electrons_from_atoms-Tuple{Any}","page":"API reference","title":"DFTK.n_electrons_from_atoms","text":"n_electrons_from_atoms(atoms) -> Any\n\n\nNumber of valence electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.newton-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.newton","text":"newton(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ0;\n tol,\n tol_cg,\n maxiter,\n callback,\n is_converged\n) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String, UInt64}}\n\n\nnewton(basis::PlaneWaveBasis{T}, ψ0;\n tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),\n is_converged=ScfConvergenceDensity(tol))\n\nNewton algorithm. Be careful that the starting point needs to be not too far from the solution.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_compatible_fft_size-Tuple{Int64}","page":"API reference","title":"DFTK.next_compatible_fft_size","text":"next_compatible_fft_size(\n size::Int64;\n smallprimes,\n factors\n) -> Int64\n\n\nFind the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_density","page":"API reference","title":"DFTK.next_density","text":"next_density(\n ham::Hamiltonian;\n ...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Float64}}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm;\n ...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm,\n fermialg::AbstractFermiAlgorithm;\n eigensolver,\n ψ,\n eigenvalues,\n occupation,\n kwargs...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}\n\n\nObtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.norm2-Tuple{Any}","page":"API reference","title":"DFTK.norm2","text":"norm2(G) -> Any\n\n\nSquare of the ℓ²-norm.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.norm_cplx-Tuple{Any}","page":"API reference","title":"DFTK.norm_cplx","text":"norm_cplx(x) -> Any\n\n\nComplex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.normalize_kpoint_coordinate-Tuple{Real}","page":"API reference","title":"DFTK.normalize_kpoint_coordinate","text":"normalize_kpoint_coordinate(x::Real) -> Any\n\n\nBring k-point coordinates into the range [-0.5, 0.5)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.overlap_Mmn_k_kpb-Tuple{PlaneWaveBasis, Vararg{Any, 5}}","page":"API reference","title":"DFTK.overlap_Mmn_k_kpb","text":"overlap_Mmn_k_kpb(\n basis::PlaneWaveBasis,\n ψ,\n ik,\n ik_plus_b,\n G_shift,\n n_bands\n) -> Any\n\n\nComputes the matrix M^kb_mn = langle u_mk u_nk+b rangle for given k.\n\nG_shift is the \"shifting\" vector, correction due to the periodicity conditions imposed on k to ψ_k. It is non zero if k_plus_b is taken in another unit cell of the reciprocal lattice. We use here that: u_n(k + G_rm shift)(r) = e^-i*langle G_rm shiftr rangle u_nk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.pcut_psp_local-Union{Tuple{PspHgh{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.pcut_psp_local","text":"pcut_psp_local(psp::PspHgh{T}) -> Any\n\n\nEstimate an upper bound for the argument p after which abs(eval_psp_local_fourier(psp, p)) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.pcut_psp_projector-Union{Tuple{T}, Tuple{PspHgh{T}, Any, Any}} where T","page":"API reference","title":"DFTK.pcut_psp_projector","text":"pcut_psp_projector(psp::PspHgh{T}, i, l) -> Any\n\n\nEstimate an upper bound for the argument p after which eval_psp_projector_fourier(psp, p) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.phonon_modes-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.phonon_modes","text":"phonon_modes(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n dynmat\n) -> NamedTuple{(:frequencies, :vectors), <:Tuple{Any, Any}}\n\n\nSolve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.plot_bandstructure","page":"API reference","title":"DFTK.plot_bandstructure","text":"Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u\"eV\" (electron volts).\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.plot_dos","page":"API reference","title":"DFTK.plot_dos","text":"Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_local_polynomial","page":"API reference","title":"DFTK.psp_local_polynomial","text":"psp_local_polynomial(T, psp::PspHgh) -> Any\npsp_local_polynomial(T, psp::PspHgh, t) -> Any\n\n\nThe local potential of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) (t^2 exp(t^2 2)) where t = r_textloc p and Q is a polynomial of at most degree 8. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_projector_polynomial","page":"API reference","title":"DFTK.psp_projector_polynomial","text":"psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any\npsp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any\n\n\nThe nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) exp(-t^2 2) where t = r_l p and Q is a polynomial. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.r_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors","text":"r_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real\n\n\nr_vectors(basis::PlaneWaveBasis)\n\nThe list of r vectors, in reduced coordinates. By convention, this is in [0,1)^3.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.r_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors_cart","text":"r_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nr_vectors_cart(basis::PlaneWaveBasis)\n\nThe list of r vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.radial_hydrogenic-Union{Tuple{T}, Tuple{AbstractVector{T}, Integer}, Tuple{AbstractVector{T}, Integer, Real}} where T<:Real","page":"API reference","title":"DFTK.radial_hydrogenic","text":"radial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer\n) -> Any\nradial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer,\n α::Real\n) -> Any\n\n\nRadial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.\n\nArguments\n\nr: radial grid\nn: principal quantum number\nα: diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.random_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Integer}} where T","page":"API reference","title":"DFTK.random_density","text":"random_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n n_electrons::Integer\n) -> Any\n\n\nBuild a random charge density normalized to the provided number of electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.read_w90_nnkp-Tuple{String}","page":"API reference","title":"DFTK.read_w90_nnkp","text":"read_w90_nnkp(\n fileprefix::String\n) -> @NamedTuple{nntot::Int64, nnkpts::Vector{@NamedTuple{ik::Int64, ik_plus_b::Int64, G_shift::Vector{Int64}}}}\n\n\nRead the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. \"wannier90.x -pp prefix\") Returns:\n\nthe array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).\nthe number 'nntot' of neighbors per k point.\n\nTODO: add the possibility to exclude bands\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.reducible_kcoords-Tuple{MonkhorstPack}","page":"API reference","title":"DFTK.reducible_kcoords","text":"reducible_kcoords(\n kgrid::MonkhorstPack\n) -> @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}\n\n\nConstruct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.run_wannier90","page":"API reference","title":"DFTK.run_wannier90","text":"Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.\n\nwarning: Experimental feature\nCurrently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.save_bands-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_bands","text":"save_bands(\n filename::AbstractString,\n band_data::NamedTuple;\n save_ψ\n)\n\n\nWrite the computed bands to a file. On all processes, but the master one the filename is ignored. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.\n\nwarning: Changes to data format reserved\nNo guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.save_scfres-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_scfres","text":"save_scfres(\n filename::AbstractString,\n scfres::NamedTuple;\n save_ψ,\n extra_data,\n compress,\n save_ρ\n) -> Any\n\n\nSave an scfres obtained from self_consistent_field to a file. On all processes but the master one the filename is ignored. The format is determined from the file extension. Currently the following file extensions are recognized and supported:\n\njld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. Note that this file is also a valid HDF5 file, which can thus similarly be read by external non-Julia libraries such as h5py or similar. See Saving SCF results on disk and SCF checkpoints for details.\nvts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density, optionally bands and some metadata.\njson: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, some information about the basis, eigenvalues, Fermi level etc.\n\nKeyword arguments:\n\nsave_ψ: Save the orbitals as well (may lead to larger files). This is the default for jld2, but false for all other formats, where this is considerably more expensive.\nsave_ρ: Save the density as well (may lead to larger files). This is the default for all but json.\nextra_data: Additional data to place into the file. The data is just copied like fp[\"key\"] = value, where fp is a JLD2.JLDFile, WriteVTK.vtk_grid and so on.\ncompress: Apply compression to array data. Requires the CodecZlib package to be available.\n\nwarning: Changes to data format reserved\nNo guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scatter_kpts_block-Tuple{PlaneWaveBasis, Union{Nothing, AbstractArray}}","page":"API reference","title":"DFTK.scatter_kpts_block","text":"scatter_kpts_block(\n basis::PlaneWaveBasis,\n data::Union{Nothing, AbstractArray}\n) -> Any\n\n\nScatter the data of a quantity depending on k-Points from the master process to the child processes and return it as a Vector{Array}, where the outer vector is a list over all k-points. On non-master processes nothing may be passed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_anderson_solver","page":"API reference","title":"DFTK.scf_anderson_solver","text":"scf_anderson_solver(\n;\n ...\n) -> DFTK.var\"#anderson#695\"{DFTK.var\"#anderson#694#696\"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, Int64}}\nscf_anderson_solver(\n m;\n kwargs...\n) -> DFTK.var\"#anderson#695\"{DFTK.var\"#anderson#694#696\"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, _A}} where _A\n\n\nCreate a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scf_damping_quadratic_model-Tuple{Any, Any}","page":"API reference","title":"DFTK.scf_damping_quadratic_model","text":"scf_damping_quadratic_model(\n info,\n info_next;\n modeltol\n) -> NamedTuple{(:α, :relerror), <:Tuple{Any, Any}}\n\n\nUse the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_damping_solver","page":"API reference","title":"DFTK.scf_damping_solver","text":"scf_damping_solver(\n\n) -> DFTK.var\"#fp_solver#691\"{DFTK.var\"#fp_solver#690#692\"}\nscf_damping_solver(\n β\n) -> DFTK.var\"#fp_solver#691\"{DFTK.var\"#fp_solver#690#692\"}\n\n\nCreate a damped SCF solver updating the density as x = β * x_new + (1 - β) * x\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scfres_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.scfres_to_dict","text":"scfres_to_dict(\n scfres::NamedTuple;\n kwargs...\n) -> Dict{String, Any}\n\n\nConvert an scfres to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis as well as the band_data_to_dict functions, which are called by this function and their outputs merged. Only the master process returns meaningful data.\n\nSome details on the conventions for the returned data:\n\nρ: (fftsize[1], fftsize[2], fftsize[3], nspin) array of density on real-space grid.\nenergies: Dictionary / subdirectory containing the energy terms\nconverged: Has the SCF reached convergence\nnorm_Δρ: Most recent change in ρ during an SCF step\noccupation_threshold: Threshold below which orbitals are considered unoccupied\nnbandsconverge: Number of bands that have been fully converged numerically.\nn_iter: Number of iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.select_eigenpairs_all_kblocks-Tuple{Any, Any}","page":"API reference","title":"DFTK.select_eigenpairs_all_kblocks","text":"select_eigenpairs_all_kblocks(eigres, range) -> NamedTuple\n\n\nFunction to select a subset of eigenpairs on each k-Point. Works on the Tuple returned by diagonalize_all_kblocks.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.self_consistent_field-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.self_consistent_field","text":"self_consistent_field(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n ρ,\n ψ,\n tol,\n is_converged,\n maxiter,\n mixing,\n damping,\n solver,\n eigensolver,\n diagtolalg,\n nbandsalg,\n fermialg,\n callback,\n compute_consistent_energies,\n response\n) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}}\n\n\nself_consistent_field(basis; [tol, mixing, damping, ρ, ψ])\n\nSolve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where ρ_textnext = α P^-1 (ρ_textout - ρ_textin).\n\nOverview of parameters:\n\nρ: Initial density\nψ: Initial orbitals\ntol: Tolerance for the density change (ρ_textout - ρ_textin) to flag convergence. Default is 1e-6.\nis_converged: Convergence control callback. Typical objects passed here are ScfConvergenceDensity(tol) (the default), ScfConvergenceEnergy(tol) or ScfConvergenceForce(tol).\nmaxiter: Maximal number of SCF iterations\nmixing: Mixing method, which determines the preconditioner P^-1 in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()\ndamping: Damping parameter α in the above equation. Default is 0.8.\nnbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.\ncallback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.simpson","page":"API reference","title":"DFTK.simpson","text":"simpson(x, y)\n\nIntegrate y(x) over x using Simpson's method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.sin2pi-Tuple{Any}","page":"API reference","title":"DFTK.sin2pi","text":"sin2pi(x) -> Any\n\n\nFunction to compute sin(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any, Any}} where T","page":"API reference","title":"DFTK.solve_ΩplusK","text":"solve_ΩplusK(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n rhs,\n occupation;\n callback,\n tol\n) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), <:Tuple{Any, Bool, Float64, Any, Int64}}\n\n\nsolve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;\n tol=1e-10, verbose=false) where {T}\n\nReturn δψ where (Ω+K) δψ = rhs\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK_split-Union{Tuple{T}, Tuple{Hamiltonian, AbstractArray{T}, Vararg{Any, 5}}} where T","page":"API reference","title":"DFTK.solve_ΩplusK_split","text":"solve_ΩplusK_split(\n ham::Hamiltonian,\n ρ::AbstractArray{T},\n ψ,\n occupation,\n εF,\n eigenvalues,\n rhs;\n tol,\n tol_sternheimer,\n verbose,\n occupation_threshold,\n q,\n kwargs...\n)\n\n\nSolve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spglib_standardize_cell-Union{Tuple{T}, Tuple{AbstractArray{T}, Any, Any}, Tuple{AbstractArray{T}, Any, Any, Any}} where T","page":"API reference","title":"DFTK.spglib_standardize_cell","text":"spglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions;\n ...\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\nspglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions,\n magnetic_moments;\n correct_symmetry,\n primitive,\n tol_symmetry\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\n\n\nReturns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.sphericalbesselj_fast-Union{Tuple{T}, Tuple{Integer, T}} where T","page":"API reference","title":"DFTK.sphericalbesselj_fast","text":"sphericalbesselj_fast(l::Integer, x) -> Any\n\n\nsphericalbesselj_fast(l::Integer, x::Number)\n\nReturns the spherical Bessel function of the first kind jl(x). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions) and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spin_components-Tuple{Symbol}","page":"API reference","title":"DFTK.spin_components","text":"spin_components(\n spin_polarization::Symbol\n) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}\n\n\nExplicit spin components of the KS orbitals and the density\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.split_evenly-Tuple{Any, Any}","page":"API reference","title":"DFTK.split_evenly","text":"split_evenly(itr, N) -> Any\n\n\nSplit an iterable evenly into N chunks, which will be returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.standardize_atoms","page":"API reference","title":"DFTK.standardize_atoms","text":"standardize_atoms(\n lattice,\n atoms,\n positions;\n ...\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\nstandardize_atoms(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n kwargs...\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\n\n\nApply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetries_preserving_kgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_kgrid","text":"symmetries_preserving_kgrid(symmetries, kcoords) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete BZ grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetries_preserving_rgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_rgrid","text":"symmetries_preserving_rgrid(symmetries, fft_size) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete real-space grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_forces-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_forces","text":"symmetrize_forces(model::Model, forces; symmetries)\n\n\nSymmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i].\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_stresses-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_stresses","text":"symmetrize_stresses(model::Model, stresses; symmetries)\n\n\nSymmetrize the stress tensor, given as a Matrix in cartesian coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_ρ-Union{Tuple{T}, Tuple{Any, AbstractArray{T}}} where T","page":"API reference","title":"DFTK.symmetrize_ρ","text":"symmetrize_ρ(\n basis,\n ρ::AbstractArray{T};\n symmetries,\n do_lowpass\n) -> Any\n\n\nSymmetrize a density by applying all the basis (by default) symmetries and forming the average.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetry_operations","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n lattice,\n atoms,\n positions;\n ...\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\nsymmetry_operations(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n tol_symmetry,\n check_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nReturn the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetry_operations-Tuple{Integer}","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n hall_number::Integer\n) -> Vector{SymOp{Float64}}\n\n\nReturn the Symmetry operations given a hall_number.\n\nThis function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.\n\nThe definition of hall_number is found at Space group type.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.synchronize_device-Tuple{DFTK.AbstractArchitecture}","page":"API reference","title":"DFTK.synchronize_device","text":"synchronize_device(_::DFTK.AbstractArchitecture)\n\n\nSynchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_cpu-Tuple{AbstractArray}","page":"API reference","title":"DFTK.to_cpu","text":"to_cpu(x::AbstractArray) -> Array\n\n\nTransfer an array from a device (typically a GPU) to the CPU.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_device-Tuple{DFTK.CPU, Any}","page":"API reference","title":"DFTK.to_device","text":"to_device(_::DFTK.CPU, x) -> Any\n\n\nTransfer an array to a particular device (typically a GPU)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Energies}","page":"API reference","title":"DFTK.todict","text":"todict(energies::Energies) -> Dict\n\n\nConvert an Energies struct to a dictionary representation\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Model}","page":"API reference","title":"DFTK.todict","text":"todict(model::Model) -> Dict{String, Any}\n\n\nConvert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).\n\nSome details on the conventions for the returned data:\n\nlattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension\natomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.\natomic_symbols: Atomic symbols if known.\nterms: Some rough information on the terms used for the computation.\nn_electrons: Number of electrons, may be missing if εF is fixed instead\nεF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.todict","text":"todict(basis::PlaneWaveBasis) -> Dict{String, Any}\n\n\nConvert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.\n\nSome details on the conventions for the returned data:\n\ndvol: Volume element for real-space integration\nvariational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.\nkweights: Weights for the k-points, summing to 1.0\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.total_local_potential-Tuple{Hamiltonian}","page":"API reference","title":"DFTK.total_local_potential","text":"total_local_potential(ham::Hamiltonian) -> Any\n\n\nGet the total local potential of the given Hamiltonian, in real space in the spin components.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave-Tuple{Any, PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.transfer_blochwave","text":"transfer_blochwave(\n ψ_in,\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Vector\n\n\nTransfer Bloch wave between two basis sets. Limited feature set.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Tuple{Any, PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis::PlaneWaveBasis,\n kpt_in,\n kpt_out,\n ΔG\n) -> Any\n\n\nTransfer an array ψk_in expanded on kpt_in, and produce ψ(r) e^i ΔGr expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Tuple{Any, PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis_in::PlaneWaveBasis,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpt_out::Kpoint\n) -> Any\n\n\nTransfer an array ψk defined on basisin k-point kptin to basisout k-point kptout.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_density-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.transfer_density","text":"transfer_density(\n ρ_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nTransfer density (in real space) between two basis sets.\n\nThis function is fast by transferring only the Fourier coefficients from the small basis to the big basis.\n\nNote that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity c_G = c_-G^ast does not fully hold).\n\nNote further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Tuple{PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpt_out::Kpoint\n) -> Tuple{Any, Any}\n\n\nCompute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Tuple{PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}\n\n\nCompute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.trapezoidal","page":"API reference","title":"DFTK.trapezoidal","text":"trapezoidal(x, y)\n\nIntegrate y(x) over x using trapezoidal method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.unfold_bz-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.unfold_bz","text":"unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis\n\n\n\" Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.versioninfo","page":"API reference","title":"DFTK.versioninfo","text":"versioninfo()\nversioninfo(io::IO)\n\n\nDFTK.versioninfo([io::IO=stdout])\n\nSummary of version and configuration of DFTK and its key dependencies.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.weighted_ksum-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.weighted_ksum","text":"weighted_ksum(basis::PlaneWaveBasis, array) -> Any\n\n\nSum an array over kpoints, taking weights into account\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_eig-Tuple{String, Any}","page":"API reference","title":"DFTK.write_w90_eig","text":"write_w90_eig(fileprefix::String, eigenvalues; n_bands)\n\n\nWrite the eigenvalues in a format readable by Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_win-Tuple{String, PlaneWaveBasis}","page":"API reference","title":"DFTK.write_w90_win","text":"write_w90_win(\n fileprefix::String,\n basis::PlaneWaveBasis;\n bands_plot,\n wannier_plot,\n kwargs...\n)\n\n\nWrite a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_wannier90_files-Tuple{Any, Any}","page":"API reference","title":"DFTK.write_wannier90_files","text":"write_wannier90_files(\n preprocess_call,\n scfres;\n n_bands,\n n_wannier,\n projections,\n fileprefix,\n wannier_plot,\n kwargs...\n)\n\n\nShared file writing code for Wannier.jl and Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ylm_real-Union{Tuple{T}, Tuple{Integer, Integer, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.ylm_real","text":"ylm_real(\n l::Integer,\n m::Integer,\n rvec::AbstractArray{T, 1}\n) -> Any\n\n\nReturns the (l,m) real spherical harmonic Ylm(r). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.zeros_like","page":"API reference","title":"DFTK.zeros_like","text":"zeros_like(X::AbstractArray) -> Any\nzeros_like(\n X::AbstractArray,\n T::Type,\n dims::Integer...\n) -> Any\n\n\nCreate an array of same \"array type\" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.@timing-Tuple","page":"API reference","title":"DFTK.@timing","text":"Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.\n\n\n\n\n\n","category":"macro"},{"location":"api/#DFTK.Smearing.A-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.A","text":"A term in the Hermite delta expansion\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.H-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.H","text":"Standard Hermite function using physicist's convention.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.entropy-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.entropy","text":"Entropy. Note that this is a function of the energy x, not of occupation(x). This function satisfies s' = x f' (see https://www.vasp.at/vasp-workshop/k-points.pdf p. 12 and https://arxiv.org/pdf/1805.07144.pdf p. 18.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation","page":"API reference","title":"DFTK.Smearing.occupation","text":"occupation(S::SmearingFunction, x)\n\nOccupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.Smearing.occupation_derivative-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.occupation_derivative","text":"Derivative of the occupation function, approximation to minus the delta function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation_divided_difference-Tuple{DFTK.Smearing.SmearingFunction, Vararg{Any, 4}}","page":"API reference","title":"DFTK.Smearing.occupation_divided_difference","text":"(f(x) - f(y))/(x - y), computed stably in the case where x and y are close\n\n\n\n\n\n","category":"method"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"EditURL = \"../../../examples/supercells.jl\"","category":"page"},{"location":"examples/supercells/#Creating-and-modelling-metallic-supercells","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"section"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An n-fold repetition along one of the axes of the original lattice.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"The following code achieves this for aluminium:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"using DFTK\nusing LinearAlgebra\nusing ASEconvert\n\nfunction aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])\n a = 7.65339\n lattice = a * Matrix(I, 3, 3)\n Al = ElementPsp(:Al; psp=load_psp(\"hgh/lda/al-q3\"))\n atoms = [Al, Al, Al, Al]\n positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]\n unit_cell = periodic_system(lattice, atoms, positions)\n\n # Make supercell in ASE:\n # We convert our lattice to the conventions used in ASE, make the supercell\n # and then convert back ...\n supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))\n supercell = pyconvert(AbstractSystem, supercell_ase)\n\n # Unfortunately right now the conversion to ASE drops the pseudopotential information,\n # so we need to reattach it:\n supercell = attach_psp(supercell; Al=\"hgh/lda/al-q3\")\n\n # Construct an LDA model and discretise\n # Note: We disable symmetries explicitly here. Otherwise the problem sizes\n # we are able to run on the CI are too simple to observe the numerical\n # instabilities we want to trigger here.\n model = model_LDA(supercell; temperature=1e-3, symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid)\nend;\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As part of the code we are using a routine inside the ASE, the atomistic simulation environment for creating the supercell and make use of the two-way interoperability of DFTK and ASE. For more details on this aspect see the documentation on Input and output formats.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"Write an example supercell structure to a file to plot it:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"setup = aluminium_setup(5)\nconvert_ase(periodic_system(setup.model)).write(\"al_supercell.png\")","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As we will see in this notebook the modelling of a system generally becomes harder if the system becomes larger.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"This sounds like a trivial statement as per se the cost per SCF step increases as the system (and thus N) gets larger.\nBut there is more to it: If one is not careful also the number of SCF iterations increases as the system gets larger.\nThe aim of a proper computational treatment of such supercells is therefore to ensure that the number of SCF iterations remains constant when the system size increases.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For achieving the latter DFTK by default employs the LdosMixing preconditioner [HL2021] during the SCF iterations. This mixing approach is completely parameter free, but still automatically adapts to the treated system in order to efficiently prevent charge sloshing. As a result, modelling aluminium slabs indeed takes roughly the same number of SCF iterations irrespective of the supercell size:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"[HL2021]: ","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"M. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. J. Phys. Cond. Matt 33 085503 (2021). ArXiv:2009.01665","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(2); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"EditURL = \"../../../examples/compare_solvers.jl\"","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-DFT-solvers","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"First we setup our problem","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"using DFTK\nusing LinearAlgebra\n\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])\n\n# Convergence we desire in the density\ntol = 1e-6","category":"page"},{"location":"examples/compare_solvers/#Density-based-self-consistent-field","page":"Comparison of DFT solvers","title":"Density-based self-consistent field","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scf = self_consistent_field(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Potential-based-SCF","page":"Comparison of DFT solvers","title":"Potential-based SCF","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scfv = DFTK.scf_potential_mixing(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Direct-minimization","page":"Comparison of DFT solvers","title":"Direct minimization","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_dm = direct_minimization(basis; tol=tol^2);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Newton-algorithm","page":"Comparison of DFT solvers","title":"Newton algorithm","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_start = self_consistent_field(basis; tol=0.5);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Remove the virtual orbitals (which Newton cannot treat yet)","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ\nscfres_newton = newton(basis, ψ; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-results","page":"Comparison of DFT solvers","title":"Comparison of results","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"println(\"|ρ_newton - ρ_scf| = \", norm(scfres_newton.ρ - scfres_scf.ρ))\nprintln(\"|ρ_newton - ρ_scfv| = \", norm(scfres_newton.ρ - scfres_scfv.ρ))\nprintln(\"|ρ_newton - ρ_dm| = \", norm(scfres_newton.ρ - scfres_dm.ρ))","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"EditURL = \"tutorial.jl\"","category":"page"},{"location":"guide/tutorial/#Tutorial","page":"Tutorial","title":"Tutorial","text":"","category":"section"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"note: Convergence parameters in the documentation\nWe use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\n# 1. Define lattice and atomic positions\na = 5.431u\"angstrom\" # Silicon lattice constant\nlattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors\n [1 0 1.]; # specified column by column\n [1 1 0.]];\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"By default, all numbers passed as arguments are assumed to be in atomic units. Quantities such as temperature, energy cutoffs, lattice vectors, and the k-point grid spacing can optionally be annotated with Unitful units, which are automatically converted to the atomic units used internally. For more details, see the Unitful package documentation and the UnitfulAtomic.jl package.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"# Load HGH pseudopotential for Silicon\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n\n# Specify type and positions of atoms\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# 2. Select model and basis\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 7 # kinetic energy cutoff\n# Ecut = 190.5u\"eV\" # Could also use eV or other energy-compatible units\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n# Note the implicit passing of keyword arguments here:\n# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)\n\n# 3. Run the SCF procedure to obtain the ground state\nscfres = self_consistent_field(basis, tol=1e-5);\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"scfres.energies","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Eigenvalues:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"stack(scfres.eigenvalues)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number).","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can check the occupations ...","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"stack(scfres.occupation)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[1, :, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"compute_forces_cart(scfres)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_bandstructure(scfres; kline_density=10)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"or plot a density of states, for which we increase the kgrid a bit to get smoother plots:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))\nplot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Note that directly employing the scfres also works, but the results are much cruder:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"developer/style_guide/#Developer's-style-guide","page":"Developer's style guide","title":"Developer's style guide","text":"","category":"section"},{"location":"developer/style_guide/","page":"Developer's style guide","title":"Developer's style guide","text":"The following conventions are not strictly enforced in DFTK. The rule of thumb is readability over consistency.","category":"page"},{"location":"developer/style_guide/#Coding-and-formatting-conventions","page":"Developer's style guide","title":"Coding and formatting conventions","text":"","category":"section"},{"location":"developer/style_guide/","page":"Developer's style guide","title":"Developer's style guide","text":"Line lengths should be 92 characters.\nAvoid shortening variable names only for its own sake.\nNamed tuples should be explicit, i.e., (; var=val) over (var=val).\nUse NamedTuple unpacking to prevent ambiguities when getting multiple arguments from a function.\nEmpty callbacks should use identity.\nUse = to loop over a range but in to loop over elements.\nAlways format the where keyword with explicit braces: where {T <: Any}.\nDo not use implicit arguments in functions but explicit keyword.\nPrefix function name by _ if it is an internal helper function, which is not of general use and should thus be kept close to the vicinity of the calling function.","category":"page"},{"location":"#DFTK.jl:-The-density-functional-toolkit.","page":"Home","title":"DFTK.jl: The density-functional toolkit.","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"#getting-started","page":"Home","title":"Getting started","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Convergence parameters in the documentation\nIn the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!","category":"page"},{"location":"developer/conventions/#Notation-and-conventions","page":"Notation and conventions","title":"Notation and conventions","text":"","category":"section"},{"location":"developer/conventions/#Usage-of-unicode-characters","page":"Notation and conventions","title":"Usage of unicode characters","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.","category":"page"},{"location":"developer/conventions/#symbol-conventions","page":"Notation and conventions","title":"Symbol conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Reciprocal-space vectors: k for vectors in the Brillouin zone, G for vectors of the reciprocal lattice, q for phonon vectors (i.e., vectors in the Brillouin zone characteristic of the crystal normal modes), p for general vectors.\nReal-space vectors: R for lattice vectors, r and x are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.\nOmega is the unit cell, and Omega (or sometimes just Omega) is its volume.\nA are the real-space lattice vectors (model.lattice) and B the Brillouin zone lattice vectors (model.recip_lattice).\nThe Bloch waves are\npsi_nk(x) = e^ikcdot x u_nk(x)\nwhere n is the band index and k the k-point. In the code we sometimes use psi and u interchangeably.\nvarepsilon are the eigenvalues, varepsilon_F is the Fermi level.\nrho is the density.\nIn the code we use normalized plane waves:\ne_G(r) = frac 1 sqrtOmega e^i G cdot r\nY^l_m are the complex spherical harmonics, and Y_lm the real ones.\nj_l are the Bessel functions. In particular, j_0(x) = fracsin xx.","category":"page"},{"location":"developer/conventions/#Units","page":"Notation and conventions","title":"Units","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful\nusing UnitfulAtomic\naustrip(10u\"eV\") # 10eV in Hartree","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful: Å\nusing UnitfulAtomic\nauconvert(Å, 1.2) # 1.2 Bohr in Ångström","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Differing unit conventions\nDifferent electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.","category":"page"},{"location":"developer/conventions/#conventions-lattice","page":"Notation and conventions","title":"Lattices and lattice vectors","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still 3 times 3 matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by A and the reciprocal-space lattice vectors by B = 2pi A^-T.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Row-major versus column-major storage order\nJulia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices A before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"We use the convention that the unit cell in real space is 0 1)^3 in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is -12 12)^3.","category":"page"},{"location":"developer/conventions/#Reduced-and-cartesian-coordinates","page":"Notation and conventions","title":"Reduced and cartesian coordinates","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as k, G, q, p or real-space vectors like r and R (see Symbol conventions). One switches to Cartesian coordinates by","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"x_textcart = M x_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"where M is either A / model.lattice (for real-space vectors) or B / model.recip_lattice (for reciprocal-space vectors). A useful relationship is","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"b_textcart cdot a_textcart=2pi b_textred cdot a_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"if a and b are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for G-vectors) or fractional coordinates (usually for k-points).","category":"page"},{"location":"developer/conventions/#Normalization-conventions","page":"Notation and conventions","title":"Normalization conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points and in reciprocal space its coefficients are ell^2-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"EditURL = \"../../../examples/energy_cutoff_smearing.jl\"","category":"page"},{"location":"examples/energy_cutoff_smearing/#Energy-cutoff-smearing","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"","category":"section"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"H_k u_k = ε_k u_k","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"for each k-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis mathcalB_k^E_c=x e^iG x G mathcalR^* k+G^2 2E_c whose size highly depends on the choice of k-point, cell size or cutoff energy rm E_c (the Ecut parameter of DFTK). As a result, energy bands computed along a k-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"using DFTK\nusing Statistics\n\na0 = 10.26 # Experimental lattice constant of silicon in bohr\na_list = range(a0 - 1/2, a0 + 1/2; length=20)\n\nfunction compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n model = model_PBE(lattice, atoms, positions; kinetic_blowup)\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n self_consistent_field(basis; callback=identity, kwargs...).energies.total\nend\n\nEcut = 5 # Very low Ecut to display big irregularities\nkgrid = (2, 2, 2) # Very sparse k-grid to speed up convergence\nE0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"To be compared with the same computation for a high Ecut=100. The naive approximation of the energy is shifted for the legibility of the plot.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,\n -7.848576991754026, -7.850892888614151, -7.852921532056932,\n -7.854675317792186, -7.85616622262217, -7.85740584131599,\n -7.858405359984107, -7.859175611288143, -7.859727053496513,\n -7.860069804791132, -7.860213631865354, -7.8601679947736915,\n -7.859942011410533, -7.859544518721661, -7.858984032385052,\n -7.858268793303855, -7.857406769423708]\n\nusing Plots\nshift = mean(abs.(E0_naive .- E0_ref))\np = plot(a_list, E0_naive .- shift, label=\"Ecut=5\", xlabel=\"lattice parameter a (bohr)\",\n ylabel=\"Ground state energy (Ha)\", color=1)\nplot!(p, a_list, E0_ref, label=\"Ecut=100\", color=2)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as \"energy cutoff smearing\". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide C^2 regularity of the energy bands.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"[CHV2022]: ","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Let us lauch the computation again with the modified kinetic term.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"note: Abinit energy cutoff smearing option\nFor the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring C^1 regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]\na0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])\n\nshift = mean(abs.(E0_modified .- E0_ref)) # Shift for legibility of the plot\nplot!(p, a_list, E0_modified .- shift, label=\"Ecut=5 + BlowupCHV\", color=3)\nvline!(p, [a0], label=\"experimental a0\", linestyle=:dash, linecolor=:black)\nvline!(p, [a0_naive], label=\"a0 Ecut=5\", linestyle=:dash, color=1)\nvline!(p, [a0_ref], label=\"a0 Ecut=100\", linestyle=:dash, color=2)\nvline!(p, [a0_modified], label=\"a0 Ecut=5 + BlowupCHV\", linestyle=:dash, color=3)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter a, even with the low Ecut=5 Ha.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"println(\"Error of approximation of the reference a0 with modified kinetic term:\"*\n \" $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%\")","category":"page"},{"location":"developer/data_structures/#Data-structures","page":"Data structures","title":"Data structures","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4]\nEcut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol=1e-4);","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.","category":"page"},{"location":"developer/data_structures/#Model-datastructure","page":"Data structures","title":"Model datastructure","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[2]: If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"typeof.(model.term_types)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"DFTK computes energies for all terms of the model individually, which are available in scfres.energies:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"scfres.energies","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For now the following energy terms are available in DFTK:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Kinetic energy\nLocal potential energy, either given by analytic potentials or specified by the type of atoms.\nNonlocal potential energy, for norm-conserving pseudopotentials\nNuclei energies (Ewald or pseudopotential correction)\nHartree energy\nExchange-correlation energy\nPower nonlinearities (useful for Gross-Pitaevskii type models)\nMagnetic field energy\nEntropy term","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"model_LDA: LDA model using the Teter parametrisation\nmodel_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])\nmodel_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).","category":"page"},{"location":"developer/data_structures/#PlaneWaveBasis-and-plane-wave-discretisations","page":"Data structures","title":"PlaneWaveBasis and plane-wave discretisations","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the k-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"PlaneWaveBasis(model; Ecut, kgrid)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis by default uses symmetry to reduce the number of k-points explicitly treated. For details see Crystal symmetries.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"As mentioned, the periodic parts of Bloch waves are expanded in a set of normalized plane waves e_G:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"beginaligned\n psi_k(x) = e^i k cdot x u_k(x)\n = sum_G in mathcal R^* c_G e^i k cdot x e_G(x)\nendaligned","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where mathcal R^* is the set of reciprocal lattice vectors. The c_G are ell^2-normalized. The summation is truncated to a \"spherical\", k-dependent basis set","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":" S_k = leftG in mathcal R^* middle\n frac 1 2 k+ G^2 le E_textcutright","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where E_textcut is the cutoff energy.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Densities involve terms like psi_k^2 = u_k^2 and therefore products e_-G e_G for G G in S_k. To represent these we use a \"cubic\", k-independent basis set large enough to contain the set G-G G G in S_k. We can obtain the coefficients of densities on the e_G basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For example let us check the normalization of the first eigenfunction at the first k-point in reciprocal space:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψtest = scfres.ψ[1][:, 1]\nsum(abs2.(ψtest))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"We now perform an IFFT to get ψ in real space. The k-point has to be passed because ψ is expressed on the k-dependent basis. Again the function is normalised:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψreal = ifft(basis, basis.kpoints[1], ψtest)\nsum(abs2.(ψreal)) * basis.dvol","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of k points of the basis can be obtained with basis.kpoints.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"basis.kpoints","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The G vectors of the \"spherical\", k-dependent grid can be obtained with G_vectors:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[length(G_vectors(basis, kpoint)) for kpoint in basis.kpoints]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ik = 1\nG_vectors(basis, basis.kpoints[ik])[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of G vectors (Fourier modes) of the \"cubic\", k-independent basis set can be obtained similarly with G_vectors(basis).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(G_vectors(basis)), prod(basis.fft_size)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(G_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Analogously the list of r vectors (real-space grid) can be obtained with r_vectors(basis):","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(r_vectors(basis))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(r_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/#Accessing-Bloch-waves-and-densities","page":"Data structures","title":"Accessing Bloch waves and densities","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the k-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using Plots # hide\nrvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[:, 1, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]\nscatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);\n yscale=:log10, ylims=(1e-12, 1), label=\"\", xlabel=\"Energy\", ylabel=\"|ρ|\")","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to frac 1 2k+G^2 E_rm cut.","category":"page"},{"location":"developer/gpu_computations/#GPU-computations","page":"GPU computations","title":"GPU computations","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.","category":"page"},{"location":"developer/gpu_computations/#Current-implementation","page":"GPU computations","title":"Current implementation","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())\nPlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"note: GPU API is experimental\nIt is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.","category":"page"},{"location":"developer/gpu_computations/#Pitfalls","page":"GPU computations","title":"Pitfalls","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"There are a few things to keep in mind when doing GPU programming in DFTK.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Transfers to and from a device can be done simply by converting an array to","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"cuda_gpu = DFTK.GPU(CuArray)\ncpu_architecture = DFTK.CPU()\nA = rand(10) # A is on the CPU\nB = DFTK.to_device(cuda_gpu, A) # B is a copy of A on the CUDA GPU\nB .+= 1.\nC = DFTK.to_cpu(B) # C is a copy of B on the CPU\nD = DFTK.to_device(cpu_architecture, B) # Equivalent to the previous line, but\n # should be avoided as it is less clear","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Note: similar could also be used, but then a reference array (one which already lives on the device) needs to be available at call time. This was done previously, with helper functions to easily build new arrays on a given architecture: see for example zeros_like.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Functions which will get executed on the GPU should always have arguments","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"which are isbits (immutable and contains no references to other values). When using map, also make sure that every structure used is also isbits. For example, the following map will fail, as model contains strings and arrays which are not isbits.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n # model is not isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"However, the following map will run on a GPU, as the lattice is a static matrix.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n lattice = model.lattice # lattice is isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"List comprehensions should be avoided, as they always return a CPU Array.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Instead, we should use map which returns an array of the same type as the input one.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Sometimes, creating a new array or making a copy can be necessary to achieve good","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.","category":"page"},{"location":"features/#package-features","page":"DFTK features","title":"DFTK features","text":"","category":"section"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Standard methods and models:\nStandard DFT models (LDA, GGA, meta-GGA): Any functional from the libxc library\nNorm-conserving pseudopotentials: Goedecker-type (GTH, HGH) or numerical (in UPF pseudopotential format), see Pseudopotentials for details.\nBrillouin zone symmetry for k-point sampling using spglib\nStandard smearing functions (including Methfessel-Paxton and Marzari-Vanderbilt cold smearing)\nCollinear spin polarization for magnetic systems\nSelf-consistent field approaches including Kerker mixing, LDOS mixing, adaptive damping\nDirect minimization, Newton solver\nMulti-level threading (k-points eigenvectors, FFTs, linear algebra)\nMPI-based distributed parallelism (distribution over k-points)\nTreat systems of 1000 electrons\nGround-state properties and post-processing:\nTotal energy\nForces, stresses\nDensity of states (DOS), local density of states (LDOS)\nBand structures\nEasy access to all intermediate quantities (e.g. density, Bloch waves)\nUnique features\nSupport for arbitrary floating point types, including Float32 (single precision) or Double64 (from DoubleFloats.jl).\nForward-mode algorithmic differentiation (see Polarizability using automatic differentiation)\nFlexibility to build your own Kohn-Sham model: Anything from analytic potentials, linear Cohen-Bergstresser model, the Gross-Pitaevskii equation, Anyonic models, etc.\nAnalytic potentials (see Tutorial on periodic problems)\n1D / 2D / 3D systems (see Tutorial on periodic problems)\nThird-party integrations:\nSeamless integration with many standard Input and output formats.\nIntegration with ASE and AtomsBase for passing atomic structures (see AtomsBase integration).\nWannierization using Wannier.jl or Wannier90","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Runs out of the box on Linux, macOS and Windows","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"EditURL = \"../../../examples/atomsbase.jl\"","category":"page"},{"location":"examples/atomsbase/#AtomsBase-integration","page":"AtomsBase integration","title":"AtomsBase integration","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using DFTK","category":"page"},{"location":"examples/atomsbase/#Feeding-an-AtomsBase-AbstractSystem-to-DFTK","page":"AtomsBase integration","title":"Feeding an AtomsBase AbstractSystem to DFTK","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"# Construct bulk system and convert to an AbstractSystem\nusing ASEconvert\nsystem_ase = ase.build.bulk(\"Si\")\nsystem = pyconvert(AbstractSystem, system_ase)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model, discretise and solve:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:","category":"page"},{"location":"examples/atomsbase/#Reading-a-system-using-AtomsIO","page":"AtomsBase integration","title":"Reading a system using AtomsIO","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsIO\n\n# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),\n# which directly yields an AbstractSystem.\nsystem = load_system(\"Si.extxyz\")\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"The same could be achieved using ExtXYZ by system = Atoms(read_frame(\"Si.extxyz\")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.","category":"page"},{"location":"examples/atomsbase/#Directly-setting-up-a-system-in-AtomsBase","page":"AtomsBase integration","title":"Directly setting up a system in AtomsBase","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsBase\nusing Unitful\nusing UnitfulAtomic\n\n# Construct a system in the AtomsBase world\na = 10.26u\"bohr\" # Silicon lattice constant\nlattice = a / 2 * [[0, 1, 1.], # Lattice as vector of vectors\n [1, 0, 1.],\n [1, 1, 0.]]\natoms = [:Si => ones(3)/8, :Si => -ones(3)/8]\nsystem = periodic_system(atoms, lattice; fractional=true)\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/#Obtaining-an-AbstractSystem-from-DFTK-data","page":"AtomsBase integration","title":"Obtaining an AbstractSystem from DFTK data","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"second_system = atomic_system(model)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"Similarly DFTK offers a method to the atomic_system and periodic_system functions (from AtomsBase), which enable a seamless conversion of the usual data structures for setting up DFTK calculations into an AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"lattice = 5.431u\"Å\" / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]];\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nthird_system = atomic_system(lattice, atoms, positions)","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"EditURL = \"../../../examples/graphene.jl\"","category":"page"},{"location":"examples/graphene/#Graphene-band-structure","page":"Graphene band structure","title":"Graphene band structure","text":"","category":"section"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"using DFTK\nusing Unitful\nusing UnitfulAtomic\nusing LinearAlgebra\nusing Plots\n\n# Define the convergence parameters (these should be increased in production)\nL = 20 # height of the simulation box\nkgrid = [6, 6, 1]\nEcut = 15\ntemperature = 1e-3\n\n# Define the geometry and pseudopotential\na = 4.66 # lattice constant\na1 = a*[1/2,-sqrt(3)/2, 0]\na2 = a*[1/2, sqrt(3)/2, 0]\na3 = L*[0 , 0 , 1]\nlattice = [a1 a2 a3]\nC1 = [1/3,-1/3,0.0] # in reduced coordinates\nC2 = -C1\npositions = [C1, C2]\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\n\n# Run SCF\nmodel = model_PBE(lattice, atoms, positions; temperature)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis)\n\n# Construct 2D path through Brillouin zone\nkpath = irrfbz_path(model; dim=2, space_group_number=13) # graphene space group number\nbands = compute_bands(scfres, kpath; kline_density=20)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"EditURL = \"../../../examples/forwarddiff.jl\"","category":"page"},{"location":"examples/forwarddiff/#Polarizability-using-automatic-differentiation","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"","category":"section"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"using DFTK\nusing LinearAlgebra\nusing ForwardDiff\n\n# Construct PlaneWaveBasis given a particular electric field strength\n# Again we take the example of a Helium atom.\nfunction make_basis(ε::T; a=10., Ecut=30) where {T}\n lattice=T(a) * I(3) # lattice is a cube of ``a`` Bohrs\n # Helium at the center of the box\n atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n positions = [[1/2, 1/2, 1/2]]\n\n model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1]) # No k-point sampling on isolated system\nend\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n @assert isdiag(basis.model.lattice)\n a = basis.model.lattice[1, 1]\n rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]\n sum(rr .* ρ) * basis.dvol\nend\n\n# Function to compute the dipole for a given field strength\nfunction compute_dipole(ε; tol=1e-8, kwargs...)\n scfres = self_consistent_field(make_basis(ε; kwargs...); tol)\n dipole(scfres.basis, scfres.ρ)\nend;\nnothing #hide","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"With this in place we can compute the polarizability from finite differences (just like in the previous example):","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability_fd = let\n ε = 0.01\n (compute_dipole(ε) - compute_dipole(0.0)) / ε\nend","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability = ForwardDiff.derivative(compute_dipole, 0.0)\nprintln()\nprintln(\"Polarizability via ForwardDiff: $polarizability\")\nprintln(\"Polarizability via finite difference: $polarizability_fd\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"EditURL = \"../../../examples/polarizability.jl\"","category":"page"},{"location":"examples/polarizability/#Polarizability-by-linear-response","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"μ = r ρ(r) dr","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"with respect to a small uniform electric field E = -x.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using DFTK\nusing LinearAlgebra\n\na = 10.\nlattice = a * I(3) # cube of ``a`` bohrs\n# Helium at the center of the box\natoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\npositions = [[1/2, 1/2, 1/2]]\n\n\nkgrid = [1, 1, 1] # no k-point sampling for an isolated system\nEcut = 30\ntol = 1e-8\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]\n sum(rr .* ρ) * basis.dvol\nend;\nnothing #hide","category":"page"},{"location":"examples/polarizability/#Using-finite-differences","page":"Polarizability by linear response","title":"Using finite differences","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We first compute the polarizability by finite differences. First compute the dipole moment at rest:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"model = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nres = self_consistent_field(basis; tol)\nμref = dipole(basis, res.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Then in a small uniform field:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"ε = .01\nmodel_ε = model_LDA(lattice, atoms, positions;\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\nbasis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)\nres_ε = self_consistent_field(basis_ε; tol)\nμε = dipole(basis_ε, res_ε.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"polarizability = (με - μref) / ε\n\nprintln(\"Reference dipole: $μref\")\nprintln(\"Displaced dipole: $με\")\nprintln(\"Polarizability : $polarizability\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).","category":"page"},{"location":"examples/polarizability/#Using-linear-response","page":"Polarizability by linear response","title":"Using linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, χ_0 is the independent-particle polarizability, and K the Hartree-exchange-correlation kernel. We denote with δV_rm ext an external perturbing potential (like in this case the uniform electric field). Then:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = χ_0 δV = χ_0 (δV_rm ext + K δρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"which implies","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = (1-χ_0 K)^-1 χ_0 δV_rm ext","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"From this we identify the polarizability operator to be χ = (1-χ_0 K)^-1 χ_0. Numerically, we apply χ to δV = -x by solving a linear equation (the Dyson equation) iteratively.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using KrylovKit\n\n# Apply ``(1- χ_0 K)``\nfunction dielectric_operator(δρ)\n δV = apply_kernel(basis, δρ; res.ρ)\n χ0δV = apply_χ0(res, δV)\n δρ - χ0δV\nend\n\n# `δVext` is the potential from a uniform field interacting with the dielectric dipole\n# of the density.\nδVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]\nδVext = cat(δVext; dims=4)\n\n# Apply ``χ_0`` once to get non-interacting dipole\nδρ_nointeract = apply_χ0(res, δVext)\n\n# Solve Dyson equation to get interacting dipole\nδρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]\n\nprintln(\"Non-interacting polarizability: $(dipole(basis, δρ_nointeract))\")\nprintln(\"Interacting polarizability: $(dipole(basis, δρ))\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"EditURL = \"../../../examples/input_output.jl\"","category":"page"},{"location":"examples/input_output/#Input-and-output-formats","page":"Input and output formats","title":"Input and output formats","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.","category":"page"},{"location":"examples/input_output/#Reading-/-writing-files-supported-by-AtomsIO","page":"Input and output formats","title":"Reading / writing files supported by AtomsIO","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using AtomsIO # Use Julia-only IO parsers\nusing AtomsIOPython # Use python-based IO parsers (e.g. ASE)\nsystem = load_system(\"Fe_afm.pwi\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Next we attach pseudopotential information, since currently the parser is not yet capable to read this information from the file.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using DFTK\nsystem = attach_psp(system, Fe=\"hgh/pbe/fe-q16.hgh\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Finally we make use of DFTK's AtomsBase integration to run the calculation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"model = model_LDA(system; temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))\nρ0 = guess_density(basis, system)\nscfres = self_consistent_field(basis, ρ=ρ0);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"warning: DFTK data formats are not yet fully matured\nThe data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.","category":"page"},{"location":"examples/input_output/#Writing-VTK-files-for-visualization","page":"Input and output formats","title":"Writing VTK files for visualization","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using WriteVTK\nsave_scfres(\"iron_afm.vts\", scfres; save_ψ=true);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.","category":"page"},{"location":"examples/input_output/#Parsable-data-export-using-json","page":"Input and output formats","title":"Parsable data-export using json","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"DFTK.todict(scfres.energies)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nopen(\"iron_afm_energies.json\", \"w\") do io\n JSON3.pretty(io, DFTK.todict(scfres.energies))\nend\nprintln(read(\"iron_afm_energies.json\", String))","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nsave_scfres(\"iron_afm.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"save_bands(\"iron_afm_scfres.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"bands = compute_bands(scfres, kline_density=10)\nsave_bands(\"iron_afm_bands.json\", bands)","category":"page"},{"location":"examples/input_output/#Writing-and-reading-JLD2-files","page":"Input and output formats","title":"Writing and reading JLD2 files","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5). This includes notably h5py to read DFTK output from python.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JLD2\nsave_scfres(\"iron_afm.jld2\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Saving such JLD2 files supports some options, such as save_ψ=false, which avoids saving the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used with save_bands.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Cleanup files generated by this notebook.)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"rm.([\"iron_afm.vts\", \"iron_afm.jld2\",\n \"iron_afm.json\", \"iron_afm_energies.json\", \"iron_afm_scfres.json\",\n \"iron_afm_bands.json\"])","category":"page"},{"location":"guide/introductory_resources/#introductory-resources","page":"Introductory resources","title":"Introductory resources","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.","category":"page"},{"location":"guide/introductory_resources/#Workshop-material-and-tutorials","page":"Introductory resources","title":"Workshop material and tutorials","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFTK school 2022: Numerical methods for density-functional theory simulations: Summer school centred around the DFTK code and modern approaches to density-functional theory. See the programme and lecture notes, in particular:\nIntroduction to DFT\nIntroduction to periodic problems\nAnalysis of plane-wave DFT\nAnalysis of SCF convergence\nExercises","category":"page"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFT in a nutshell by Kieron Burke and Lucas Wagner: Short tutorial-style article introducing the basic DFT setting, basic equations and terminology. Great introduction from the physical / chemical perspective.\nWorkshop on mathematics and numerics of DFT: Two-day workshop at MIT centred around DFTK by M. F. Herbst, in particular the summary of DFT theory.","category":"page"},{"location":"guide/introductory_resources/#Textbooks","page":"Introductory resources","title":"Textbooks","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Electronic Structure: Basic theory and practical methods by R. M. Martin (Cambridge University Press, 2004): Standard textbook introducing most common methods of the field (lattices, pseudopotentials, DFT, ...) from the perspective of a physicist.\nA Mathematical Introduction to Electronic Structure Theory by L. Lin and J. Lu (SIAM, 2019): Monograph attacking DFT from a mathematical angle. Covers topics such as DFT, pseudos, SCF, response, ...","category":"page"},{"location":"guide/introductory_resources/#Recordings","page":"Introductory resources","title":"Recordings","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Julia for Materials Modelling by M. F. Herbst: One-hour talk providing an overview of materials modelling tools for Julia. Key features of DFTK are highlighted as part of the talk. Pluto notebooks\nDFTK: A Julian approach for simulating electrons in solids by M. F. Herbst: Pre-recorded talk for JuliaCon 2020. Assumes no knowledge about DFT and gives the broad picture of DFTK. Slides.\nJuliacon 2021 DFT workshop by M. F. Herbst: Three-hour workshop session at the 2021 Juliacon providing a mathematical look on DFT, SCF solution algorithms as well as the integration of DFTK into the Julia package ecosystem. Material starts to become a little outdated. Workshop material","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"EditURL = \"../../../examples/wannier.jl\"","category":"page"},{"location":"examples/wannier/#Wannierization-using-Wannier.jl-or-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"warning: No guarantees on Wannier interface\nThis code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\nd = 10u\"Å\"\na = 2.641u\"Å\" # Graphene Lattice constant\nlattice = [a -a/2 0;\n 0 √3*a/2 0;\n 0 0 d]\n\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\npositions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]\nmodel = model_PBE(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])\nnbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)\nscfres = self_consistent_field(basis; nbandsalg, tol=1e-5);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Plot bandstructure of the system","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"bands = compute_bands(scfres; kline_density=10)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier.jl","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier.jl","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder \"wannierjl\" under the prefix \"wannier\" (i.e. \"wannierjl/wannier.win\", \"wannierjl/wannier.wout\", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We now produce a simple Wannier model for 5 MLFWs.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"3 bond-centered 2s hydrogenic orbitals for the expected σ bonds\n2 atom-centered 2pz hydrogenic orbitals for the expected π bands","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using Wannier # Needed to make Wannier.Model available","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"From chemical intuition, we know that the bonds with the lowest energy are:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"the 3 σ bonds,\nthe π and π* bonds.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We provide relevant initial projections to help Wannierization converge to functions with a similar shape.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)\npz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)\nprojections = [\n # Note: fractional coordinates for the centers!\n # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds\n s_guess((positions[1] + positions[2]) / 2),\n s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),\n s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),\n # 2 atom-centered 2pz hydrogenic orbitals\n pz_guess(positions[1]),\n pz_guess(positions[2]),\n]","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Wannierize:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"wannier_model = Wannier.Model(scfres;\n fileprefix=\"wannier/graphene\",\n n_bands=scfres.n_bands_converge,\n n_wannier=5,\n projections,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Once we have the wannier_model, we can use the functions in the Wannier.jl package:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Compute MLWF:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"U = disentangle(wannier_model, max_iter=200);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Inspect localization before and after Wannierization:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"omega(wannier_model)\nomega(wannier_model, U)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Build a Wannier interpolation model:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"kpath = irrfbz_path(model)\ninterp_model = Wannier.InterpModel(wannier_model; kpath=kpath)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"And so on... Refer to the Wannier.jl documentation for further examples.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files when done.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"examples/wannier/#Custom-initial-guesses","page":"Wannierization using Wannier.jl or Wannier90","title":"Custom initial guesses","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can also provide custom initial guesses for Wannierization, by passing a callable function in the projections array. The function receives the basis and a list of points (fractional coordinates in reciprocal space), and returns the Fourier transform of the initial guess function evaluated at each point.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For example, we could use Gaussians for the σ and pz guesses with the following code:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.GaussianWannierProjection(center)\nfunction pz_guess(center)\n # Approximate with two Gaussians offset by 0.5 Å from the center of the atom\n offset = model.inv_lattice * [0, 0, austrip(0.5u\"Å\")]\n center1 = center + offset\n center2 = center - offset\n # Build the custom projector\n (basis, ps) -> DFTK.GaussianWannierProjection(center1)(basis, ps) - DFTK.GaussianWannierProjection(center2)(basis, ps)\nend\n# Feed to Wannier via the `projections` as before...","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using wannier90_jll # Needed to make run_wannier90 available\nrun_wannier90(scfres;\n fileprefix=\"wannier/graphene\",\n n_wannier=5,\n projections,\n num_print_cycles=25,\n num_iter=200,\n #\n dis_win_max=19.0,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1, # 1 eV above Fermi level\n dis_num_iter=300,\n dis_mix_ratio=1.0,\n #\n wannier_plot=true,\n wannier_plot_format=\"cube\",\n wannier_plot_supercell=5,\n write_xyz=true,\n translate_home_cell=true,\n );\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"developer/setup/#Developer-setup","page":"Developer setup","title":"Developer setup","text":"","category":"section"},{"location":"developer/setup/#Source-code-installation","page":"Developer setup","title":"Source code installation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"To achieve such a setup you have two recommended options:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Clone DFTK into a location of your choice\n$ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/\nWhenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:\nimport Pkg\nPkg.develop(\"/some/path/\")\nTo run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use\n$ julia --project=/some/path/\nThe advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.\nAdd a development version of DFTK to the global Julia environment:\nimport Pkg\nPkg.develop(\"DFTK\")\nThis clones DFTK to the path ~/.julia/dev/DFTK\" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.","category":"page"},{"location":"developer/setup/#Disabling-precompilation","page":"Developer setup","title":"Disabling precompilation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"[DFTK]\nprecompile_workload = false","category":"page"},{"location":"developer/setup/#Running-the-tests","page":"Developer setup","title":"Running the tests","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using TestEnv # Optional: automatically installs required packages\nTestEnv.activate() # for tests in a temporary environment.\nusing TestItemRunner\ncd(\"test\") # By default, the following macro runs everything from the parent folder.\n@run_package_tests filter = ti -> :core ∈ ti.tags","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Or to only run the tests of a particular file serialisation.jl use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"@run_package_tests filter = ti -> occursin(\"serialisation.jl\", ti.filename)","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using .MySetup: my_function","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using ..MySetup: my_function","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"EditURL = \"../../../examples/custom_potential.jl\"","category":"page"},{"location":"examples/custom_potential/#custom-potential","page":"Custom potential","title":"Custom potential","text":"","category":"section"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"using DFTK\nusing LinearAlgebra","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"First, we define a new element which represents a nucleus generating a Gaussian potential.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"struct CustomPotential <: DFTK.Element\n α # Prefactor\n L # Width of the Gaussian nucleus\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Some default values","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"CustomPotential() = CustomPotential(1.0, 0.5);\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"function DFTK.local_potential_real(el::CustomPotential, r::Real)\n -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\nend\nfunction DFTK.local_potential_fourier(el::CustomPotential, p::Real)\n # = ∫ V(r) exp(-ix⋅p) dx\n -el.α * exp(- (p * el.L)^2 / 2)\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tip: Gaussian potentials and DFTK\nDFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We set up the lattice. For a 1D case we supply two zero lattice vectors","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"In this example, we want to generate two Gaussian potentials generated by two \"nuclei\" localized at positions x_1 and x_2, that are expressed in 01) in fractional coordinates. x_1 - x_2 should be different from 05 to break symmetry and get nonzero forces.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"x1 = 0.2\nx2 = 0.8\npositions = [[x1, 0, 0], [x2, 0, 0]]\ngauss = CustomPotential()\natoms = [gauss, gauss];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We setup a Gross-Pitaevskii model","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"C = 1.0\nα = 2;\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n AtomicLocal(),\n LocalNonlinearity(ρ -> C * ρ^α)]\nmodel = Model(lattice, atoms, positions; n_electrons, terms,\n spin_polarization=:spinless); # use \"spinless electrons\"\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We discretize using a moderate Ecut and run a SCF algorithm to compute forces afterwards. As there is no ionic charge associated to gauss we have to specify a starting density and we choose to start from a zero density.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))\nρ = zeros(eltype(basis), basis.fft_size..., 1)\nscfres = self_consistent_field(basis; tol=1e-5, ρ)\nscfres.energies","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Computing the forces can then be done as usual:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"compute_forces(scfres)","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract the converged total local potential","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract other quantities before plotting them","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ρ = scfres.ρ[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1] # first k-point, all G components, first eigenvector","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\n\nusing Plots\nx = a * vec(first.(DFTK.r_vectors(basis)))\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")\nplot!(p, x, tot_local_pot, label=\"tot local pot\")","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"EditURL = \"../../../examples/convergence_study.jl\"","category":"page"},{"location":"examples/convergence_study/#Performing-a-convergence-study","page":"Performing a convergence study","title":"Performing a convergence study","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of k-points in each dimension of the Brillouin zone.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using DFTK\nusing LinearAlgebra\nusing Statistics\n\nfunction run_scf(; a=5.0, Ecut, nkpt, tol)\n atoms = [ElementPsp(:Pt; psp=load_psp(\"hgh/lda/Pt-q10\"))]\n position = [zeros(3)]\n lattice = a * Matrix(I, 3, 3)\n\n model = model_LDA(lattice, atoms, position; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n println(\"nkpt = $nkpt Ecut = $Ecut\")\n self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))\nend;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-2 # Tolerance to which we target to converge\nnkpts = 1:7 # K-point range checked for convergence\nEcuts = 10:2:24; # Energy cutoff range checked for convergence\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the first step we converge in the number of k-points employed in each dimension of the Brillouin zone …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_kgrid(nkpts; Ecut, tol)\n energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])\nend\nresult = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)\nnkpt_conv = result.nkpt_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot the obtained convergence:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using Plots\nplot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"k-grid\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"We continue to do the convergence in Ecut using the suggested k-point grid.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_Ecut(Ecuts; nkpt, tol)\n energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])\nend\nresult = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)\nEcut_conv = result.Ecut_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot it:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"Ecut\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/#A-more-realistic-example.","page":"Performing a convergence study","title":"A more realistic example.","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Repeating the above exercise for more realistic settings, namely …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-4 # Tolerance to which we target to converge\nnkpts = 1:20 # K-point range checked for convergence\nEcuts = 20:1:50;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"…one obtains the following two plots for the convergence in kpoints and Ecut.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"\n","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"EditURL = \"../../../examples/collinear_magnetism.jl\"","category":"page"},{"location":"examples/collinear_magnetism/#Collinear-spin-and-magnetic-systems","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"","category":"section"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using DFTK\n\na = 5.42352 # Bohr\nlattice = a / 2 * [[-1 1 1];\n [ 1 -1 1];\n [ 1 1 -1]]\natoms = [ElementPsp(:Fe; psp=load_psp(\"hgh/lda/Fe-q8.hgh\"))]\npositions = [zeros(3)];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"To get the ground-state energy we use an LDA model and rather moderate discretisation parameters.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"kgrid = [3, 3, 3] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 15 # kinetic energy cutoff in Hartree\nmodel_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)\nbasis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)\n\nscfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres_nospin.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel d-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of s-electrons, 1 pair of d-electrons and 4 unpaired d-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"magnetic_moments = [4];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"tip: Units of the magnetisation and magnetic moments in DFTK\nUnlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton μ_B, which in atomic units has the value frac12. Since μ_B is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nρ0 = guess_density(basis, magnetic_moments)\nscfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: Model and magnetic moments\nDFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In direct comparison we notice the first, spin-paired calculation to be a little higher in energy","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"println(\"No magnetization: \", scfres_nospin.energies.total)\nprintln(\"Magnetic case: \", scfres.energies.total)\nprintln(\"Difference: \", scfres.energies.total - scfres_nospin.energies.total);\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the d-orbitals these differ rather drastically. For example for the first k-point:","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"iup = 1\nidown = iup + length(scfres.basis.kpoints) ÷ 2\n@show scfres.occupation[iup][1:7]\n@show scfres.occupation[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the eigenvalues differ","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"@show scfres.eigenvalues[iup][1:7]\n@show scfres.eigenvalues[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: ``k``-points in collinear calculations\nFor collinear calculations the kpoints field of the PlaneWaveBasis object contains each k-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up k-points and then all spin-down k-points, such that iup and idown index the same k-point, but differing spins.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Plots\nbands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6)) # Increase kgrid to get nicer DOS.\nplot_dos(bands_666)","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the band structure shows clear differences between both spin components.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Unitful\nusing UnitfulAtomic\nbands_kpath = compute_bands(scfres; kline_density=6)\nplot_bandstructure(bands_kpath)","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"EditURL = \"../../../examples/dielectric.jl\"","category":"page"},{"location":"examples/dielectric/#Eigenvalues-of-the-dielectric-matrix","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"","category":"section"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"We compute a few eigenvalues of the dielectric matrix (q=0, ω=0) iteratively.","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"using DFTK\nusing Plots\nusing KrylovKit\nusing Printf\n\n# Calculation parameters\nkgrid = [1, 1, 1]\nEcut = 5\n\n# Silicon lattice\na = 10.26\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Compute the dielectric operator without symmetries\nmodel = model_LDA(lattice, atoms, positions, symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"Applying ε^ (1- χ_0 K) …","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"function eps_fun(δρ)\n δV = apply_kernel(basis, δρ; ρ=scfres.ρ)\n χ0δV = apply_χ0(scfres, δV)\n δρ - χ0δV\nend;\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"… eagerly diagonalizes the subspace matrix at each iteration","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);\nnothing #hide","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"EditURL = \"../../../examples/arbitrary_floattype.jl\"","category":"page"},{"location":"examples/arbitrary_floattype/#Arbitrary-floating-point-types","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"","category":"section"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"[HLC2020]: M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"using DFTK\n\n# Setup silicon lattice\na = 10.263141334305942 # lattice constant in Bohr\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Cast to Float32, setup model and basis\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])\n\n# Run the SCF\nscfres = self_consistent_field(basis, tol=1e-3);\nnothing #hide","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"scfres.energies","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.energies.total)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.ρ)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"note: Generic linear algebra routines\nFor more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"EditURL = \"../../../examples/gross_pitaevskii.jl\"","category":"page"},{"location":"examples/gross_pitaevskii/#gross-pitaevskii","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.","category":"page"},{"location":"examples/gross_pitaevskii/#The-model","page":"Gross-Pitaevskii equation in one dimension","title":"The model","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by ψ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":" H ψ = left(-frac12 Δ + V + 2 C ψ^2right) ψ = μ ψ qquad ψ_L^2 = 1","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"where C provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"which is special cased in DFTK to support 1D models.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"pot(x) = (x - a/2)^2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term C ρ(r)^α dr to the total energy functional, thus a potential term α C ρ^α-1. In our case we thus need the parameters","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"C = 1.0\nα = 2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"… and with this build the model","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using DFTK\nusing LinearAlgebra\n\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n ExternalFromReal(r -> pot(r[1])),\n LocalNonlinearity(ρ -> C * ρ^α),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless); # spinless electrons\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We discretize using a moderate Ecut (For 1D values up to 5000 are completely fine) and run a direct minimization algorithm:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS\nscfres.energies","category":"page"},{"location":"examples/gross_pitaevskii/#Internals","page":"Gross-Pitaevskii equation in one dimension","title":"Internals","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We use the opportunity to explore some of DFTK internals.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Extract the converged density and the obtained wave function:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ρ = real(scfres.ρ)[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1]; # first k-point, all G components, first eigenvector\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Check whether ψ is normalised:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"x = a * vec(first.(DFTK.r_vectors(basis)))\nN = length(x)\ndx = a / N # real-space grid spacing\n@assert sum(abs2.(ψ)) * dx ≈ 1.0","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The density is simply built from ψ:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(scfres.ρ - abs2.(ψ))","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We summarize the ground state in a nice plot:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using Plots\n\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)\n@assert E.total == scfres.energies.total","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Now the Hamiltonian contains all the blocks corresponding to k-points. Here, we just have one k-point:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H = ham.blocks[1];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector\nHmat = Array(H) # This is now just a plain Julia matrix,\n# which we can compute and store in this simple 1D example\n@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Let's check that ψ11 is indeed an eigenstate:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Build a finite-differences version of the GPE operator H, as a sanity check:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))\nA[1, end] = A[end, 1] = -1\nK = A / dx^2 / 2\nV = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))\nH_findiff = K + V;\nmaximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))","category":"page"},{"location":"guide/installation/#Installation","page":"Installation","title":"Installation","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.9 is required for DFTK.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add(\"DFTK\")","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"which will install the latest DFTK release. DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box. With this you are all set to run the code in the Tutorial or the examples directory.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"For obtaining a good user experience as well as peak performance some optional steps see the next sections on Recommended packages and Selecting the employed linear algebra and FFT backend. See also the details on Using DFTK on compute clusters if you are not installing DFTK on a laptop or workstation.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: DFTK version compatibility\nWe follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.","category":"page"},{"location":"guide/installation/#Optional:-Recommended-packages","page":"Installation","title":"Optional: Recommended packages","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"AtomsIO and AtomsIOPython, which allow you to read (and write) a large range of standard file formats for atomistic structures. In particular AtomsIO is lightweight and highly recommended.\nASEconvert, which integrates DFTK with a number of convenience features of the ASE, the atomistic simulation environment. See Creating and modelling metallic supercells for an example where ASE is used within a DFTK workflow.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"You can install these packages using","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add([\"AtomsIO\", \"AtomsIOPython\", \"ASEconvert\"])","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: Python dependencies in Julia\nThere are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.","category":"page"},{"location":"guide/installation/#Optional:-Selecting-the-employed-linear-algebra-and-FFT-backend","page":"Installation","title":"Optional: Selecting the employed linear algebra and FFT backend","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"The default Julia setup uses the BLAS, LAPACK, MPI and FFT libraries shipped as part of the Julia package ecosystem. The default setup works, but to obtain peak performance for your hardware additional steps may be necessary, e.g. to employ the vendor-specific BLAS or FFT libraries. See the documentation of the MKL, FFTW, MPI and libblastrampoline packages for details on switching the underlying backend library. If you want to obtain a summary of the backend libraries currently employed by DFTK run the DFTK.versioninfo() command. See also Using DFTK on compute clusters, where some of this is explained in more details.","category":"page"},{"location":"guide/installation/#Installation-for-DFTK-development","page":"Installation","title":"Installation for DFTK development","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"EditURL = \"../../../examples/pseudopotentials.jl\"","category":"page"},{"location":"examples/pseudopotentials/#Pseudopotentials","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"section"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated (\"frozen\") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"using DFTK\nusing Unitful\nusing Plots\nusing LazyArtifacts\nimport Main: @artifact_str # hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"note: Using the PseudoLibrary in your own calculations\nInstructions for using the PseudoLibrary in your own calculations can be found in its documentation.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"psp_hgh = load_psp(\"hgh/lda/si-q4.hgh\");\npsp_upf = load_psp(artifact\"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf\");\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"First, we'll take a look at the energy cutoff convergence of these two pseudopotentials. For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The converged cutoffs are 26 Ha and 18 Ha for the HGH and UPF pseudos respectively. We see that the HGH pseudopotential is much harder, i.e. it requires a higher energy cutoff, than the UPF PSP. In general, numeric pseudopotentials tend to be softer than analytical pseudos because of the flexibility of sampling arbitrary functions on a grid.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Next, to see that the different pseudopotentials give reasonbly similar results, we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though the convered cutoffs are higher, we perform these calculations with a cutoff of 12 Ha for both PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"function run_bands(psp)\n a = 10.26 # Silicon lattice constant in Bohr\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp)\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n\n # These are (as you saw above) completely unconverged parameters\n model = model_LDA(lattice, atoms, positions; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))\n\n scfres = self_consistent_field(basis; tol=1e-4)\n bandplot = plot_bandstructure(compute_bands(scfres))\n (; scfres, bandplot)\nend;\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_hgh = run_bands(psp_hgh)\nresult_hgh.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_upf = run_bands(psp_upf)\nresult_upf.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"plot(result_hgh.bandplot, result_upf.bandplot, titles=[\"HGH\" \"UPF\"], size=(800, 400))","category":"page"},{"location":"developer/symmetries/#Crystal-symmetries","page":"Crystal symmetries","title":"Crystal symmetries","text":"","category":"section"},{"location":"developer/symmetries/#Theory","page":"Crystal symmetries","title":"Theory","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"In this discussion we will only describe the situation for a monoatomic crystal mathcal C subset mathbb R^3, the extension being easy. A symmetry of the crystal is an orthogonal matrix W and a real-space vector w such that","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"W mathcalC + w = mathcalC","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries where W = 1 and w is a lattice vector are always assumed and ignored in the following.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can define a corresponding unitary operator U on L^2(mathbb R^3) with action","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":" (Uu)(x) = uleft( W x + w right)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that U commutes with the Hamiltonian.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This operator acts on a plane-wave as","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\n(U e^iqcdot x) (x) = e^iq cdot w e^i (W^T q) x\n= e^- i(S q) cdot tau e^i (S q) cdot x\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"where we set","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nS = W^T\ntau = -W^-1w\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"It follows that the Fourier transform satisfies","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"widehatUu(q) = e^- iq cdot tau widehat u(S^-1 q)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(all of these equations being also valid in reduced coordinates). In particular, if e^ikcdot x u_k(x) is an eigenfunction, then by decomposing u_k over plane-waves e^i G cdot x one can see that e^i(S^T k) cdot x (U u_k)(x) is also an eigenfunction: we can choose","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"u_Sk = U u_k","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This is used to reduce the computations needed. For a uniform sampling of the Brillouin zone (the reducible k-points), one can find a reduced set of k-points (the irreducible k-points) such that the eigenvectors at the reducible k-points can be deduced from those at the irreducible k-points.","category":"page"},{"location":"developer/symmetries/#Symmetrization","page":"Crystal symmetries","title":"Symmetrization","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Quantities that are calculated by summing over the reducible k points can be calculated by first summing over the irreducible k points and then symmetrizing. Let mathcalK_textreducible denote the reducible k-points sampling the Brillouin zone, mathcalS be the group of all crystal symmetries that leave this BZ mesh invariant (mathcalSmathcalK_textreducible = mathcalK_textreducible) and mathcalK be the irreducible k-points obtained from mathcalK_textreducible using the symmetries mathcalS. Clearly","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"mathcalK_textred = Sk S in mathcalS k in mathcalK","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let Q be a k-dependent quantity to sum (for instance, energies, densities, forces, etc). Q transforms in a particular way under symmetries: Q(Sk) = S(Q(k)) where the (linear) action of S on Q depends on the particular Q.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nsum_k in mathcalK_textred Q(k)\n= sum_k in mathcalK sum_S text with Sk in mathcalK_textred S(Q(k)) \n= sum_k in mathcalK frac1N_mathcalSk sum_S in mathcalS S(Q(k))\n= frac1N_mathcalS sum_S in mathcalS\n left(sum_k in mathcalK fracN_mathcalSN_mathcalSk Q(k) right)\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Here, N_mathcalS = mathcalS is the total number of symmetry operations and N_mathcalSk denotes the number of operations such that leave k invariant. The latter operations form a subgroup of the group of all symmetry operations, sometimes called the small/little group of k. The factor fracN_mathcalSN_Sk, also equal to the ratio of number of reducible points encoded by this particular irreducible k to the total number of reducible points, determines the weight of each irreducible k point.","category":"page"},{"location":"developer/symmetries/#Example","page":"Crystal symmetries","title":"Example","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using DFTK\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nEcut = 5\nkgrid = [4, 4, 4]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let us demonstrate this in practice. We consider silicon, setup appropriately in the lattice, atoms and positions objects as in Tutorial and to reach a fast execution, we take a small Ecut of 5 and a [4, 4, 4] Monkhorst-Pack grid. First we perform the DFT calculation disabling symmetry handling","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_nosym = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid)\nscfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"and then redo it using symmetry (the default):","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_sym = model_LDA(lattice, atoms, positions)\nbasis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)\nscfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Clearly both yield the same energy but the version employing symmetry is faster, since less k-points are explicitly treated:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(length(basis_sym.kpoints), length(basis_nosym.kpoints))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can also explicitly verify both methods to yield the same density:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using LinearAlgebra # hide\n(norm(scfres_sym.ρ - scfres_nosym.ρ),\n norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries can be used to map reducible to irreducible points:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"ikpt_red = rand(1:length(basis_nosym.kpoints))\n# find a (non-unique) corresponding irreducible point in basis_nosym,\n# and the symmetry that relates them\nikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])\n[basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The eigenvalues match also:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"[scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]","category":"page"}] } diff --git a/dev/tricks/compute_clusters/index.html b/dev/tricks/compute_clusters/index.html new file mode 100644 index 0000000000..38eddbe4cd --- /dev/null +++ b/dev/tricks/compute_clusters/index.html @@ -0,0 +1,117 @@ + +Using DFTK on compute clusters · DFTK.jl

Using DFTK on compute clusters

This chapter summarises a few tips and tricks for running on compute clusters. It assumes you have already installed Julia on the machine in question (see Julia downloads and Julia installation instructions).

We will use EPFL's scitas clusters as examples, but the basic principles should apply to other systems as well.

Julia depot path

By default on Linux-based systems Julia puts all installed packages, including the binary packages into the path $HOME/.julia, which can easily take a few tens of GB. On many compute clusters the /home partition is on a shared filesystem (thus access is slower) and has a tight space quota. Usually it is therefore more advantageous to put Julia packages on a less persistent, faster filesystem. On many systems (such as EPFL scitas) this is the /scratch partition. In your ~/.bashrc or otherwise you should thus redirect the JULIA_DEPOT_PATH to be a subdirectory of /scratch.

EPFL scitas. On scitas the right thing to do is to insert

export JULIA_DEPOT_PATH="/scratch/$USER/.julia"

into your ~/.bashrc.

Installing DFTK into a local Julia environment

When employing a compute cluster, it is often desirable to integrate with the matching cluster-specific libraries, such as vendor-specific versions of BLAS, LAPACK etc. This is easiest achieved by installing DFTK not into the global Julia environment, but instead bundle the installation and the cluster-specific configuration in a local, cluster-specific environment.

On top of the discussion of the main Installation instructions, this requires one additional step, namely the use of a custom Julia package environment.

Setting up a package environment. In the Julia REPL, create a new environment (essentially a new Julia project) using the following commands:

import Pkg
+Pkg.activate("path/to/new/environment")

Replace path/to/new/environment with the directory where you wish to create the new environment. This will generate a folder containing Project.toml and Manifest.toml files. Both together provide a reproducible image of the packages you installed in your project. Once the activate call has been issued, you can than install packages as usual. E.g. use Pkg.add("DFTK") to install DFTK. The difference is that instead of tracking this in your global environment, the installations will be tracked in the local Project.toml and Manifest.toml files of the path/to/new/environment folder.

To start a Julia shell directly with such this environment activated, run it as julia --project=path/to/new/environment.

Updating an environment. Start Julia and activate the environment. Then run Pkg.update(), i.e.

import Pkg
+Pkg.activate("path/to/new/environment")
+Pkg.update()

For more information on Julia environments, see the respective documentation on Code loading and on Managing Environments.

Setting up local preferences

On cluster machines often highly optimised versions of BLAS, LAPACK, FFTW, MPI or other basic packages are provided by the cluster vendor or operator. These can be used with DFTK by configuring an appropriate LocalPreferences.toml file, which tells Julia where the cluster-specific libraries are located. The following sections explain how to generate such a LocalPreferences.toml specific for your cluster. Once this file has been generated and sits next to a Project.toml in a Julia environment, it ensures that the cluster-specific libraries are used instead of the default ones. Therefore this setup only needs to be done once per project.

A useful way to check whether the setup has been successful and DFTK indeed employs the desired cluster-specific libraries provides the

DFTK.versioninfo()

command. It produces an output such as

DFTK Version      0.6.16
+Julia Version     1.10.0
+FFTW.jl provider  fftw v3.3.10
+
+BLAS.get_config()
+  LinearAlgebra.BLAS.LBTConfig
+  Libraries:
+  └ [ILP64] libopenblas64_.so
+
+MPI.versioninfo()
+  MPIPreferences:
+    binary:  MPICH_jll
+    abi:     MPICH
+
+  Package versions
+    MPI.jl:             0.20.19
+    MPIPreferences.jl:  0.1.10
+    MPICH_jll:          4.1.2+1
+
+  Library information:
+    libmpi:  /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so
+    libmpi dlpath:  /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so
+
+[...]

which thus specifies in one overview the details of the employed BLAS, LAPACK, FFTW, MPI, etc. libraries.

Switching to MKL for BLAS and FFT

The MKL Julia package provides the Intel MKL library as a BLAS backend in Julia. To use fully use it you need to do two things:

  1. Add a using MKL to your scripts.
  2. Configure a LocalPreferences.jl to employ the MKL also for FFT operations: to do so run the following Julia script:
    using MKL
    +using FFTW
    +FFTW.set_provider!("mkl")

Switching to the system-provided MPI library

To use a system-provided MPI library, load the required modules. On scitas that is

module load gcc
+module load openmpi

Afterwards follow the MPI system binary instructions and execute

using MPIPreferences
+MPIPreferences.use_system_binary()

Running slurm jobs

This example shows how to run a DFTK calculation on a slurm-based system such as scitas. We use the MKL for FFTW and BLAS and the system-provided MPI. This setup will create five files LocalPreferences.toml, Project.toml, dftk.jl, silicon.extxyz and job.sh.

At the time of writing (Dec 2023) following the setup indicated above leads to this LocalPreferences.toml file:

[FFTW]
+provider = "mkl"
+
+[MPIPreferences]
+__clear__ = ["preloads_env_switch"]
+_format = "1.0"
+abi = "OpenMPI"
+binary = "system"
+cclibs = []
+libmpi = "libmpi"
+mpiexec = "mpiexec"
+preloads = []

We place this into a folder next to a Project.toml to define our project:

[deps]
+AtomsIO = "1692102d-eeb4-4df9-807b-c9517f998d44"
+DFTK = "acf6eb54-70d9-11e9-0013-234b7a5f5337"
+FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
+MKL = "33e6dc65-8f57-5167-99aa-e5a354878fb2"
+MPIPreferences = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267"

We additionally create a small file dftk.jl to run an MPI-parallelised calculation from a passed structure

using MKL
+using DFTK
+using AtomsIO
+
+disable_threading()  # Threading and MPI not compatible
+
+function main(structure, pseudos; Ecut, kspacing)
+    if mpi_master()
+        println("DEPOT_PATH=$DEPOT_PATH")
+        println(DFTK.versioninfo())
+        println()
+    end
+
+    system = attach_psp(load_system(structure); pseudos...)
+    model  = model_PBE(system; temperature=1e-3, smearing=Smearing.MarzariVanderbilt())
+
+    kgrid = kgrid_from_minimal_spacing(model, kspacing)
+    basis = PlaneWaveBasis(model; Ecut, kgrid)
+
+    if mpi_master()
+        println()
+        show(stdout, MIME("text/plain"), basis)
+        println()
+        flush(stdout)
+    end
+
+    DFTK.reset_timer!(DFTK.timer)
+    scfres = self_consistent_field(basis)
+    println(DFTK.timer)
+
+    if mpi_master()
+        show(stdout, MIME("text/plain"), scfres.energies)
+    end
+end

and we dump the structure file silicon.extxyz with content

2
+pbc=[T, T, T] Lattice="0.00000000 2.71467909 2.71467909 2.71467909 0.00000000 2.71467909 2.71467909 2.71467909 0.00000000" Properties=species:S:1:pos:R:3
+Si         0.67866977       0.67866977       0.67866977
+Si        -0.67866977      -0.67866977      -0.67866977

Finally the jobscript job.sh for a slurm job looks like this:

#!/bin/bash
+# This is the block interpreted by slurm and used as a Job submission script.
+# The actual julia payload is in dftk.jl
+# In this case it sets the parameters for running with 2 MPI processes using a maximal
+# wall time of 2 hours.
+
+#SBATCH --time 2:00:00
+#SBATCH --nodes 1
+#SBATCH --ntasks 2
+#SBATCH --cpus-per-task 1
+
+# Now comes the setup of the environment on the cluster node (the "jobscript")
+
+# IMPORTANT: Set Julia's depot path to be a local scratch
+# direction (not your home !).
+export JULIA_DEPOT_PATH="/scratch/$USER/.julia"
+
+# Load modules to setup julia (this is specific to EPFL scitas systems)
+module purge
+module load gcc
+module load openmpi
+module load julia
+
+# Run the actual payload of Julia using 1 thread. Use the name of this
+# file as an include to make everything self-contained.
+srun julia -t 1 --project -e '
+    include("dftk.jl")
+    pseudos = (; Si="hgh/pbe/si-q4.hgh" )
+    main("silicon.extxyz",
+         pseudos;
+         Ecut=10,
+         kspacing=0.3,
+ )
+'

Using DFTK via the Aiida workflow engine

A preliminary integration of DFTK with the Aiida high-throughput workflow engine is available via the aiida-dftk plugin. This can be a useful alternative if many similar DFTK calculations should be run.

diff --git a/dev/tricks/parallelization/index.html b/dev/tricks/parallelization/index.html index 4bf9fd0d70..3c46469f74 100644 --- a/dev/tricks/parallelization/index.html +++ b/dev/tricks/parallelization/index.html @@ -1,38 +1,38 @@ -Timings and parallelization · DFTK.jl

Timings and parallelization

This section summarizes the options DFTK offers to monitor and influence performance of the code.

Timing measurements

By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.

For example to measure the timing of an SCF:

DFTK.reset_timer!(DFTK.timer)
+Timings and parallelization · DFTK.jl

Timings and parallelization

This section summarizes the options DFTK offers to monitor and influence performance of the code.

Timing measurements

By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.

For example to measure the timing of an SCF:

DFTK.reset_timer!(DFTK.timer)
 scfres = self_consistent_field(basis, tol=1e-5)
 
 DFTK.timer
 ────────────────────────────────────────────────────────────────────────────────
                                         Time                    Allocations      
                                ───────────────────────   ────────────────────────
-       Tot / % measured:            318ms /  50.1%           86.2MiB /  75.4%    
+       Tot / % measured:            281ms /  54.3%           86.2MiB /  77.7%    
 
  Section               ncalls     time    %tot     avg     alloc    %tot      avg
  ────────────────────────────────────────────────────────────────────────────────
- self_consistent_field      1    159ms   99.9%   159ms   65.0MiB  100.0%  65.0MiB
-   LOBPCG                  27   71.9ms   45.1%  2.66ms   18.2MiB   28.0%   691KiB
-     DftHamiltonian...     76   53.4ms   33.5%   702μs   6.09MiB    9.4%  82.1KiB
-       local+kinetic      501   50.7ms   31.8%   101μs    360KiB    0.5%     736B
-       nonlocal            76   1.15ms    0.7%  15.1μs   1.40MiB    2.2%  18.9KiB
-     ortho! X vs Y         71   5.28ms    3.3%  74.4μs   2.09MiB    3.2%  30.2KiB
-       ortho!             139   2.50ms    1.6%  18.0μs   1.09MiB    1.7%  8.02KiB
-     rayleigh_ritz         49   4.95ms    3.1%   101μs   1.84MiB    2.8%  38.5KiB
-       ortho!              49    600μs    0.4%  12.2μs    270KiB    0.4%  5.51KiB
-     preconditioning       76   2.17ms    1.4%  28.5μs    356KiB    0.5%  4.69KiB
-     Update residuals      76    894μs    0.6%  11.8μs   1.16MiB    1.8%  15.7KiB
-     ortho!                27    523μs    0.3%  19.4μs    166KiB    0.3%  6.16KiB
-   compute_density          9   54.8ms   34.3%  6.08ms   6.26MiB    9.6%   712KiB
-     symmetrize_ρ           9   48.1ms   30.1%  5.34ms   5.01MiB    7.7%   570KiB
-   energy_hamiltonian      19   26.9ms   16.9%  1.42ms   30.5MiB   47.0%  1.61MiB
-     ene_ops               19   24.5ms   15.4%  1.29ms   19.9MiB   30.6%  1.05MiB
-       ene_ops: xc         19   20.2ms   12.7%  1.06ms   8.92MiB   13.7%   481KiB
-       ene_ops: har...     19   2.48ms    1.6%   131μs   8.57MiB   13.2%   462KiB
-       ene_ops: non...     19    780μs    0.5%  41.1μs    297KiB    0.4%  15.6KiB
-       ene_ops: kin...     19    396μs    0.2%  20.8μs    180KiB    0.3%  9.46KiB
-       ene_ops: local      19    264μs    0.2%  13.9μs   1.74MiB    2.7%  93.8KiB
-   ortho_qr                 3    148μs    0.1%  49.2μs    102KiB    0.2%  33.9KiB
-   χ0Mixing                 9   49.2μs    0.0%  5.47μs   51.3KiB    0.1%  5.70KiB
- enforce_real!              1   80.4μs    0.1%  80.4μs   1.69KiB    0.0%  1.69KiB
+ self_consistent_field      1    153ms   99.9%   153ms   67.0MiB  100.0%  67.0MiB
+   LOBPCG                  27   64.9ms   42.5%  2.40ms   17.5MiB   26.1%   662KiB
+     DftHamiltonian...     74   50.3ms   32.9%   680μs   5.86MiB    8.7%  81.0KiB
+       local+kinetic      488   48.0ms   31.4%  98.4μs    274KiB    0.4%     576B
+       nonlocal            74    944μs    0.6%  12.8μs   1.36MiB    2.0%  18.9KiB
+     rayleigh_ritz         47   4.26ms    2.8%  90.7μs   1.74MiB    2.6%  37.9KiB
+       ortho!              47    448μs    0.3%  9.54μs    259KiB    0.4%  5.52KiB
+     ortho! X vs Y         67   4.14ms    2.7%  61.8μs   1.91MiB    2.8%  29.1KiB
+       ortho!             132   2.00ms    1.3%  15.2μs   1.03MiB    1.5%  7.96KiB
+     preconditioning       74    975μs    0.6%  13.2μs    274KiB    0.4%  3.70KiB
+     Update residuals      74    655μs    0.4%  8.85μs   1.13MiB    1.7%  15.6KiB
+     ortho!                27    457μs    0.3%  16.9μs    166KiB    0.2%  6.16KiB
+   compute_density          9   56.8ms   37.2%  6.31ms   6.26MiB    9.4%   712KiB
+     symmetrize_ρ           9   50.5ms   33.1%  5.61ms   5.01MiB    7.5%   570KiB
+   energy_hamiltonian      19   25.8ms   16.9%  1.36ms   30.5MiB   45.6%  1.61MiB
+     ene_ops               19   23.7ms   15.5%  1.25ms   19.9MiB   29.7%  1.05MiB
+       ene_ops: xc         19   20.0ms   13.1%  1.05ms   8.92MiB   13.3%   481KiB
+       ene_ops: har...     19   2.31ms    1.5%   121μs   8.56MiB   12.8%   462KiB
+       ene_ops: non...     19    474μs    0.3%  25.0μs    291KiB    0.4%  15.3KiB
+       ene_ops: kin...     19    380μs    0.2%  20.0μs    180KiB    0.3%  9.46KiB
+       ene_ops: local      19    245μs    0.2%  12.9μs   1.74MiB    2.6%  93.8KiB
+   ortho_qr                 3    122μs    0.1%  40.7μs    102KiB    0.1%  33.9KiB
+   χ0Mixing                 9   33.0μs    0.0%  3.67μs   37.0KiB    0.1%  4.11KiB
+ enforce_real!              1   80.1μs    0.1%  80.1μs   1.69KiB    0.0%  1.69KiB
  ────────────────────────────────────────────────────────────────────────────────

The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.

Timing measurements and stack traces

Timing measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.

Rough timing estimates

A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.

function estimate_time_per_scf_step(basis::PlaneWaveBasis)
     # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.
     time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3
@@ -49,4 +49,4 @@
 disable_threading()
  • Run Julia in parallel using the mpiexecjl wrapper script from MPI.jl:

    mpiexecjl -np 16 julia myscript.jl

    In this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.

  • As usual with MPI printing will be garbled. You can use

    DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())

    at the top of your script to disable printing on all processes but one.

    MPI-based parallelism not fully supported

    While standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.

    Thread-based parallelism

    Threading in DFTK currently happens on multiple layers distributing the workload over different $k$-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:

    1. Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:

      using DFTK
       setup_threading()

      This disables FFT threading and sets the number of BLAS threads to the number of Julia threads.

    2. Run Julia passing the desired number of threads using the flag -t:

      julia -t 8 myscript.jl

    For some cases (e.g. a single $k$-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.

    Advanced threading tweaks

    The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.

    BLAS threads

    All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use

    using LinearAlgebra
     BLAS.set_num_threads(N)

    where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use

    Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))

    or (from Julia 1.6) simply BLAS.get_num_threads().

    Julia threads

    On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over $k$-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().

    FFT threads

    Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use

    using FFTW
    -FFTW.set_num_threads(N)

    where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.

    +FFTW.set_num_threads(N)

    where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.

    diff --git a/dev/tricks/scf_checkpoints.ipynb b/dev/tricks/scf_checkpoints.ipynb index 408fca6870..f240fd910c 100644 --- a/dev/tricks/scf_checkpoints.ipynb +++ b/dev/tricks/scf_checkpoints.ipynb @@ -15,22 +15,18 @@ "by `self_consistent_field` on disk or retrieve it back into memory,\n", "respectively. For this purpose DFTK uses the\n", "[JLD2.jl](https://github.com/JuliaIO/JLD2.jl) file format and Julia package.\n", - "For the moment this process is considered an experimental feature and\n", - "has a number of caveats, see the warnings below.\n", "\n", - "!!! warning \"Saving `scfres` is experimental\"\n", - " The `load_scfres` and `save_scfres` pair of functions\n", - " are experimental features. This means:\n", + "!!! note \"Availability of `load_scfres`, `save_scfres` and checkpointing\"\n", + " As JLD2 is an optional dependency of DFTK these three functions are only\n", + " available once one has *both* imported DFTK and JLD2 (`using DFTK`\n", + " and `using JLD2`).\n", "\n", - " - The interface of these functions\n", - " as well as the format in which the data is stored on disk can\n", - " change incompatibly in the future. At this point we make no promises ...\n", - " - JLD2 is not yet completely matured\n", - " and it is recommended to only use it for short-term storage\n", - " and **not** to archive scientific results.\n", - " - If you are using the functions to transfer data between different\n", - " machines ensure that you use the **same version of Julia, JLD2 and DFTK**\n", - " for saving and loading data.\n", + "!!! warning \"DFTK data formats are not yet fully matured\"\n", + " The data format in which DFTK saves data as well as the general interface\n", + " of the `load_scfres` and `save_scfres` pair of functions\n", + " are not yet fully matured. If you use the functions or the produced files\n", + " expect that you need to adapt your routines in the future even with patch\n", + " version bumps.\n", "\n", "To illustrate the use of the functions in practice we will compute\n", "the total energy of the O₂ molecule at PBE level. To get the triplet\n", @@ -48,12 +44,12 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", "--- --------------- --------- --------- ------ ---- ------\n", - " 1 -27.64854727419 -0.13 0.001 6.5 \n", - " 2 -28.92252214614 0.11 -0.82 0.660 2.0 269ms\n", - " 3 -28.93081892836 -2.08 -1.14 1.158 2.5 94.4ms\n", - " 4 -28.93754599757 -2.17 -1.18 1.757 1.0 90.9ms\n", - " 5 -28.93956996925 -2.69 -1.99 1.981 1.5 74.4ms\n", - " 6 -28.93960700329 -4.43 -2.57 1.984 2.0 85.9ms\n" + " 1 -27.64425209913 -0.13 0.001 6.5 94.1ms\n", + " 2 -28.92276348559 0.11 -0.83 0.678 2.0 282ms\n", + " 3 -28.93107491494 -2.08 -1.14 1.183 2.5 100ms\n", + " 4 -28.93771360634 -2.18 -1.19 1.772 1.5 67.1ms\n", + " 5 -28.93950613699 -2.75 -1.40 1.998 1.5 68.7ms\n", + " 6 -28.93959858828 -4.03 -2.01 1.978 1.0 75.3ms\n" ] } ], @@ -87,7 +83,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.7762015\n AtomicLocal -58.5066168\n AtomicNonlocal 4.7122462 \n Ewald -4.8994689\n PspCorrection 0.0044178 \n Hartree 19.3666595\n Xc -6.3921411\n Entropy -0.0009051\n\n total -28.939607003290" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.7702260\n AtomicLocal -58.4937489\n AtomicNonlocal 4.7104635 \n Ewald -4.8994689\n PspCorrection 0.0044178 \n Hartree 19.3604078\n Xc -6.3908041\n Entropy -0.0010917\n\n total -28.939598588275" }, "metadata": {}, "execution_count": 2 @@ -103,7 +99,7 @@ { "cell_type": "markdown", "source": [ - "The `scfres.jld2` file could now be transfered to a different computer,\n", + "The `scfres.jld2` file could now be transferred to a different computer,\n", "Where one could fire up a REPL to inspect the results of the above\n", "calculation:" ], @@ -114,7 +110,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "(:ham, :basis, :energies, :converged, :occupation_threshold, :ρ, :α, :eigenvalues, :occupation, :εF, :n_bands_converge, :n_iter, :ψ, :diagonalization, :stage, :algorithm, :norm_Δρ)" + "text/plain": "(:α, :history_Δρ, :converged, :occupation, :occupation_threshold, :algorithm, :basis, :runtime_ns, :n_iter, :history_Etot, :εF, :energies, :ρ, :n_bands_converge, :eigenvalues, :ψ, :ham)" }, "metadata": {}, "execution_count": 3 @@ -135,7 +131,7 @@ { "output_type": "execute_result", "data": { - "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.7762015\n AtomicLocal -58.5066168\n AtomicNonlocal 4.7122462 \n Ewald -4.8994689\n PspCorrection 0.0044178 \n Hartree 19.3666595\n Xc -6.3921411\n Entropy -0.0009051\n\n total -28.939607003290" + "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.7702260\n AtomicLocal -58.4937489\n AtomicNonlocal 4.7104635 \n Ewald -4.8994689\n PspCorrection 0.0044178 \n Hartree 19.3604078\n Xc -6.3908041\n Entropy -0.0010917\n\n total -28.939598588275" }, "metadata": {}, "execution_count": 4 @@ -153,7 +149,20 @@ "source": [ "Since the loaded data contains exactly the same data as the `scfres` returned by the\n", "SCF calculation one could use it to plot a band structure, e.g.\n", - "`plot_bandstructure(load_scfres(\"scfres.jld2\"))` directly from the stored data." + "`plot_bandstructure(load_scfres(\"scfres.jld2\"))` directly from the stored data.\n", + "\n", + "Notice that both `load_scfres` and `save_scfres` work by transferring all data\n", + "to/from the master process, which performs the IO operations without parallelisation.\n", + "Since this can become slow, both functions support optional arguments to speed up\n", + "the processing. An overview:\n", + "- `save_scfres(\"scfres.jld2\", scfres; save_ψ=false)` avoids saving\n", + " the Bloch wave, which is usually faster and saves storage space.\n", + "- `load_scfres(\"scfres.jld2\", basis)` avoids reconstructing the basis from the file,\n", + " but uses the passed basis instead. This save the time of constructing the basis\n", + " twice and allows to specify parallelisation options (via the passed basis). Usually\n", + " this is useful for continuing a calculation on a supercomputer or cluster.\n", + "\n", + "See also the discussion on Input and output formats on JLD2 files." ], "metadata": {} }, @@ -167,19 +176,45 @@ "to overrunning the walltime limit one does not need to start from scratch,\n", "but can continue the calculation from the last checkpoint.\n", "\n", - "To enable automatic checkpointing in DFTK one needs to pass the `ScfSaveCheckpoints`\n", - "callback to `self_consistent_field`, for example:" + "The easiest way to enable checkpointing is to use the `kwargs_scf_checkpoints`\n", + "function, which does two things. (1) It sets up checkpointing using the\n", + "`ScfSaveCheckpoints` callback and (2) if a checkpoint file is detected,\n", + "the stored density is used to continue the calculation instead of the usual\n", + "atomic-orbital based guess. In practice this is done by modifying the keyword arguments\n", + "passed to # `self_consistent_field` appropriately, e.g. by using the density\n", + "or orbitals from the checkpoint file. For example:" ], "metadata": {} }, { - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Magnet α Diag Δtime\n", + "--- --------------- --------- --------- ------ ---- ---- ------\n", + " 1 -27.64736159480 -0.13 0.001 0.80 6.5 158ms\n", + " 2 -28.92259786258 0.11 -0.82 0.675 0.80 2.0 625ms\n", + " 3 -28.93102180748 -2.07 -1.14 1.179 0.80 2.0 81.9ms\n", + " 4 -28.93765059841 -2.18 -1.18 1.767 0.80 2.0 74.1ms\n", + " 5 -28.93957386301 -2.72 -1.84 1.992 0.80 2.0 98.3ms\n", + " 6 -28.93960530756 -4.50 -2.24 1.982 0.80 1.0 74.1ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "(ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [5.660644278133811 5.430161460909832 … 4.799754765584339 5.4301686871535955; 5.430154103757646 5.210077902867022 … 4.610875286613592 5.210086012599729; … ; 4.799730608563653 4.610858866042971 … 4.1000216206726865 4.610860356038777; 5.430161545450238 5.210086447582145 … 4.610877574784842 5.210091275320234;;; 5.540051799606058 5.3377662577633735 … 4.7587644544086904 5.337769678195065; 5.33776038472978 5.139530095081507 … 4.579440939999109 5.139528323847372; … ; 4.758745528346374 4.579428184317857 … 4.084377321687474 4.5794326302238835; 5.337764747896579 5.139529440446368 … 4.579446534203723 5.13953625345757;;; 5.246420469075602 5.103651799970702 … 4.6342788682328475 5.103655129752982; 5.103648269645643 4.951758946754787 … 4.475743421727021 4.951746850986484; … ; 4.634275839221852 4.475742860325741 … 4.016112965994166 4.475756711488392; 5.10365836927063 4.951752874045403 … 4.475761347618866 4.951768700869217;;; … ;;; 4.914428675041955 4.809854613315619 … 4.415297746806652 4.809855685608119; 4.809857887570595 4.688609012289894 … 4.272576343473224 4.688594608199822; … ; 4.415288017720812 4.272569394497799 … 3.844205865762777 4.272591030328325; 4.8098543219186025 4.688592164813953 … 4.272599903290082 4.688610629367184;;; 5.246379643871844 5.103607253834064 … 4.634232436849076 5.103612504533771; 5.103605205567921 4.951708653962251 … 4.475697472204772 4.951704718313296; … ; 4.6342237437474525 4.475692659982912 … 4.016073311599167 4.475708655235178; 5.103613452604278 4.951708015457672 … 4.475717352282871 4.951723357479512;;; 5.540033254978686 5.337742180003995 … 4.7587416873378885 5.3377508912672145; 5.337735905286311 5.13949884390445 … 4.5794166782614205 5.139506194514613; … ; 4.758724543216096 4.579405975074217 … 4.08435912601434 4.579412881391679; 5.337747909775221 5.139509327115849 … 4.57942642240996 5.139518678066699]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [-1.007208827649776 -0.9754597441156516 … -0.8487236434767842 -0.9754506478963466; -0.9754703953042524 -0.9306635719303705 … -0.8468205911920553 -0.9306774591422055; … ; -0.8486892686465936 -0.84684511590644 … -0.6675905819685407 -0.8468301543092904; -0.9754557464662703 -0.9306749962683936 … -0.8468000742613944 -0.9306871669088176;;; -0.9896646665177876 -0.9543635924740929 … -0.9004507860886112 -0.9543477560670376; -0.9543809383532044 -0.9325696004914219 … -0.878577165005473 -0.9325565841610205; … ; -0.9004912369496073 -0.8785824481532484 … -0.7908489868770796 -0.878585322393627; -0.9543850066870875 -0.932554053964473 … -0.8785997216562118 -0.932574210691376;;; -0.7543793896592661 -0.8565076907659661 … -0.9142571428760576 -0.856501325131149; -0.8565283238277694 -0.8894230386403421 … -0.9070520360519619 -0.8893764610811566; … ; -0.9143072487136479 -0.9070694845373843 … -0.864630187162413 -0.9070929140685107; -0.8565486677440449 -0.8893835638347317 … -0.9070810037833132 -0.8894253058383906;;; … ;;; -0.6144022507166343 -0.8435079147212579 … -0.9682484473983917 -0.8434860574129796; -0.8435478139867726 -0.918499509863134 … -0.9579923652478674 -0.9184345380512159; … ; -0.968290457305812 -0.9580317078422492 … -0.9348515216830472 -0.9580649790626483; -0.8435107762842795 -0.9184338688580912 … -0.9580302928605983 -0.9184791158519333;;; -0.7543459466078266 -0.8564892713120053 … -0.9142591446420919 -0.8564887233358387; -0.8565299558985895 -0.8894087090739167 … -0.9070533057172113 -0.8893778708099553; … ; -0.9142973021273388 -0.9070602651606453 … -0.8646420354261194 -0.9070870181450633; -0.8565208475622973 -0.8893733834946393 … -0.9070765635435267 -0.8894080041738274;;; -0.9896542060698451 -0.9543377435338761 … -0.9004447210030748 -0.9543409280564841; -0.9543707292527884 -0.9325465515060518 … -0.8785791173394034 -0.9325424780063702; … ; -0.9004835901554786 -0.8785766767822668 … -0.79084604605901 -0.8785915455784532; -0.9543732346444312 -0.9325436236565791 … -0.8785973145415639 -0.9325583915579311]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [-3.194539599520917 -2.813726723411502 … -2.0354010513719354 -2.813710400948432; -2.8137447317522883 -2.502335116862425 … -1.890607975845981 -2.502340894341553; … ; -2.03539083356243 -1.8906489211309863 … -1.4024361124587363 -1.8906324695380308; -2.8137226412217142 -2.502337996485325 … -1.8905851707440693 -2.50234533938766;;; -4.3490472726864535 -3.7042616987413064 … -2.5146766680903774 -3.7042424419025597; -3.704284917654012 -3.2108013089452605 … -2.2564340459889864 -3.2107900638489935; … ; -2.514736045013688 -2.2564520848180134 … -1.6904229691853163 -2.2564505131523673; -3.7042846228210955 -3.2107864170534506 … -2.2564510084351106 -3.2107997607691514;;; -12.702423701641472 -7.967871726824688 … -3.5401258081108145 -7.96786203140759; -7.967895890211553 -5.6831553666448436 … -3.0728170548821905 -5.683120884853961; … ; -3.5401789429593986 -3.072835064768894 … -2.139290684229804 -3.0728446431373686; -7.967906134502841 -5.683121964548617 … -3.0728280967216968 -5.683147879728462;;; … ;;; -28.841026090219703 -14.82389647814945 … -4.2188821045208 -14.823873548548667; -14.82393310315999 -8.859342524992886 … -3.608363378286171 -8.85929195727104; … ; -4.21893384351406 -3.608409669855978 … -2.424958528418117 -3.6084213052458507; -14.823899631109487 -8.859293731463785 … -3.6083777460820436 -8.859320513904395;;; -12.70243108379379 -7.967897853507364 … -3.5401742412606194 -7.96789205483149; -7.967940586360093 -5.683191329870954 … -3.0728642740696883 -5.683164427255948; … ; -3.5402210918474886 -3.0728760457349824 … -2.139342186888508 -3.0728868034671355; -7.967923230987444 -5.683156642796258 … -3.072867651817905 -5.683175921453605;;; -4.349055356865884 -3.704259927560468 … -2.514693370075642 -3.704254400819857; -3.7042991879970644 -3.2108095111369463 … -2.2564602600606047 -3.2107980870271016; … ; -2.5147493833498373 -2.2564685226906716 … -1.6904382240403804 -2.256476485169397; -3.7042896888997996 -3.210796100076075 … -2.2564687131142267 -3.210801517026578]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [5.660644278133811 5.430161460909832 … 4.799754765584339 5.4301686871535955; 5.430154103757646 5.210077902867022 … 4.610875286613592 5.210086012599729; … ; 4.799730608563653 4.610858866042971 … 4.1000216206726865 4.610860356038777; 5.430161545450238 5.210086447582145 … 4.610877574784842 5.210091275320234;;; 5.540051799606058 5.3377662577633735 … 4.7587644544086904 5.337769678195065; 5.33776038472978 5.139530095081507 … 4.579440939999109 5.139528323847372; … ; 4.758745528346374 4.579428184317857 … 4.084377321687474 4.5794326302238835; 5.337764747896579 5.139529440446368 … 4.579446534203723 5.13953625345757;;; 5.246420469075602 5.103651799970702 … 4.6342788682328475 5.103655129752982; 5.103648269645643 4.951758946754787 … 4.475743421727021 4.951746850986484; … ; 4.634275839221852 4.475742860325741 … 4.016112965994166 4.475756711488392; 5.10365836927063 4.951752874045403 … 4.475761347618866 4.951768700869217;;; … ;;; 4.914428675041955 4.809854613315619 … 4.415297746806652 4.809855685608119; 4.809857887570595 4.688609012289894 … 4.272576343473224 4.688594608199822; … ; 4.415288017720812 4.272569394497799 … 3.844205865762777 4.272591030328325; 4.8098543219186025 4.688592164813953 … 4.272599903290082 4.688610629367184;;; 5.246379643871844 5.103607253834064 … 4.634232436849076 5.103612504533771; 5.103605205567921 4.951708653962251 … 4.475697472204772 4.951704718313296; … ; 4.6342237437474525 4.475692659982912 … 4.016073311599167 4.475708655235178; 5.103613452604278 4.951708015457672 … 4.475717352282871 4.951723357479512;;; 5.540033254978686 5.337742180003995 … 4.7587416873378885 5.3377508912672145; 5.337735905286311 5.13949884390445 … 4.5794166782614205 5.139506194514613; … ; 4.758724543216096 4.579405975074217 … 4.08435912601434 4.579412881391679; 5.337747909775221 5.139509327115849 … 4.57942642240996 5.139518678066699]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [-1.012424969721387 -0.9779361953226736 … -0.9021843184036333 -0.9779415670252277; -0.9779073965981461 -0.9436146918763448 … -0.8436896301347836 -0.9436165641756623; … ; -0.9021149286211952 -0.8437428292874939 … -0.7652281219544641 -0.8437413079965725; -0.9779123988410717 -0.9436209798623802 … -0.8436883479461436 -0.9436134857954727;;; -1.002199335908645 -0.9661813410501195 … -0.8942162601178808 -0.9661904382416161; -0.9661675613487523 -0.9381939518754001 … -0.8655271130908228 -0.9382012980578559; … ; -0.8941815602894584 -0.8654957691337922 … -0.7840341249728718 -0.8654900784501756; -0.9661633476296603 -0.9381915349808623 … -0.8655129266730177 -0.9381799005824212;;; -0.8146128400708864 -0.8332250188546514 … -0.8254074308583667 -0.8332255613579526; -0.8332052984950852 -0.8333858235444943 … -0.816226213493539 -0.8334070674467924; … ; -0.8253646325579972 -0.8162024075393939 … -0.7768036080003039 -0.8161916175457062; -0.8331841894064798 -0.8333946428328627 … -0.8162143822634731 -0.8333743636192965;;; … ;;; -0.6909025027765913 -0.7867531512275983 … -0.8342306020911627 -0.7867668538096855; -0.7867141103297699 -0.8125843431454807 … -0.8260189564866309 -0.8126234955971122; … ; -0.8341817772178889 -0.8259932179850853 … -0.8099193113843254 -0.8259762389717353; -0.7867419627109573 -0.8126258201528298 … -0.8260003071226374 -0.8126050137033116;;; -0.8146565633669713 -0.8332406678356539 … -0.8254017926743636 -0.8332410946319828; -0.8331974122848189 -0.8333729405085765 … -0.8162086710272017 -0.8333922639026949; … ; -0.825369813053099 -0.8162041616767698 … -0.776787849276035 -0.8161915024638721; -0.8332234377060191 -0.8334076346373862 … -0.8162060389293415 -0.8333926188303856;;; -1.0022248059081322 -0.9662067309254818 … -0.8942265708956152 -0.966209660913983; -0.966181437584393 -0.9381963550751657 … -0.8655283623889876 -0.9382055681303714; … ; -0.8941805624956862 -0.8655345222286008 … -0.784019563309043 -0.865523930985845; -0.9661873792245761 -0.9382141753477171 … -0.8655166723933653 -0.9382083008550306]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [-3.1997557415925284 -2.8162031746185243 … -2.0888617262987843 -2.816201320077313; -2.816181733046182 -2.5152862368083992 … -1.8874770147887092 -2.51527999937501; … ; -2.0888164935370312 -1.8875466345120402 … -1.5000736524446598 -1.8875436232253129; -2.8161792935965155 -2.5152839800793116 … -1.8874734444288186 -2.515271658274315;;; -4.3615819420773105 -3.716079447317333 … -2.508442142119647 -3.716085124077138; -3.7160715406495597 -3.2164256603292385 … -2.243383994074336 -3.216434777745829; … ; -2.5084263683535393 -2.2433654057985573 … -1.6836081072811084 -2.243355269208916; -3.716062963763668 -3.2164238980698396 … -2.2433642134519167 -3.2164054506601962;;; -12.762657152053091 -7.944589054913374 … -3.4512760960931232 -7.944586267634393; -7.944572864878868 -5.627118151548996 … -2.981991232323767 -5.627151491219597; … ; -3.451236326803748 -2.9819679877709033 … -2.0514641050676947 -2.981943346614564; -7.944541656165276 -5.627133043546748 … -2.9819614752018566 -5.627096937509368;;; … ;;; -28.91752634227966 -14.767141714655791 … -4.084864259213571 -14.767154344945373; -14.767099399502987 -8.753427358275232 … -3.4763899695249343 -8.753480914816937; … ; -4.084825163426137 -3.4763711799988144 … -2.300026318119395 -3.476332565154938; -14.767130817536165 -8.753485682758523 … -3.4763477603440824 -8.753446411755773;;; -12.762741700552935 -7.944649250031013 … -3.451316889292891 -7.944644426127635; -7.944608042746323 -5.627155561305615 … -2.9820196393796787 -5.627178820348687; … ; -3.451293602773249 -2.9820199422511067 … -2.0514880007384235 -2.9819912877859442; -7.944625821131166 -5.627190893939005 … -2.9819971272037202 -5.627160536110164;;; -4.361625956704171 -3.7161289149520735 … -2.508475219968182 -3.716123133677356; -3.716109896328669 -3.2164593147060603 … -2.243409505110189 -3.2164611771511025; … ; -2.5084463556900447 -2.2434263681370057 … -1.6836117412904132 -2.2434088705767885; -3.716103833479944 -3.216466651767213 … -2.243388070966028 -3.2164514263236774]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.939605307555706), converged = true, occupation_threshold = 1.0e-6, ρ = [0.4340250111348043 0.38351886914412003 … 0.255041912360194 0.3835198379128341; 0.38352366009580774 0.33715235424078016 … 0.22217499798144072 0.33715096513882803; … ; 0.2550488139732099 0.22217821306594585 … 0.14471119253420026 0.2221801928309895; 0.3835240986462783 0.33715046181794445 … 0.22217633237448137 0.3371532955245281;;; 0.3631626504250774 0.34779201859816583 … 0.27197620360473207 0.3477871390419436; 0.3477974266308213 0.3262112295255854 … 0.24594361084387198 0.32619221477525057; … ; 0.27199467401786315 0.24595567080345712 … 0.173592454406446 0.2459641778184624; 0.3477990519407823 0.3261973575250281 … 0.2459541934948453 0.3262060466105537;;; 0.21370828396535255 0.2731733614142462 … 0.310148531254431 0.27317045598744955; 0.2731867045113468 0.3045733849871262 … 0.29896883274986447 0.30453605205889445; … ; 0.3101933314701023 0.29899839292251956 … 0.23795494807138404 0.29902399907971255; 0.2731973911672392 0.304546680158747 … 0.2989992553139697 0.30457495353358166;;; … ;;; 0.14400282558381017 0.24598331374077195 … 0.3456320243040004 0.24597356981145296; 0.2460078565467826 0.30731548555312965 … 0.34241704241532006 0.3072728243273222; … ; 0.34566843069676995 0.3424395376209972 … 0.2856948418310983 0.34247527249956394; 0.24599165614281857 0.30726963916660655 … 0.34245511792307654 0.3072997473380216;;; 0.21369686630408613 0.2731650297564986 … 0.3101448608344118 0.273163304598398; 0.27318510513967287 0.3045643119598374 … 0.29896937024849934 0.30453991861192004; … ; 0.31018159467325795 0.29899198287217227 … 0.23795917126440436 0.29901888697929274; 0.2731826764195014 0.304540323940313 … 0.2989982178160936 0.30456503769640725;;; 0.3631499667591163 0.3477762823105032 … 0.27197108891207494 0.3477801218378269; 0.34778759630256684 0.32619336146688377 … 0.24594112863324155 0.3261898799344746; … ; 0.27198998756172554 0.24595181282456025 … 0.17359390902425378 0.24596253995976902; 0.3477902381221221 0.32618912710238146 … 0.2459517633529317 0.32620072120716487;;;; 0.4382828173156087 0.3877650757919017 … 0.2592429362342798 0.3877689126986894; 0.38775396263515904 0.341368133411945 … 0.22630580972984252 0.34138001959214836; … ; 0.2592134694937374 0.2262870117801623 … 0.14852316669243643 0.22627911385490906; 0.3877559800154454 0.3413786320305246 … 0.22629759059689028 0.3413731972993934;;; 0.36530795485701323 0.3373048744687873 … 0.24782341614008213 0.33730741310594925; 0.3372984077488937 0.3078689607547877 … 0.22150767812224995 0.3078798550521302; … ; 0.24778952046770283 0.22148400894931522 … 0.15364576954803597 0.22147567201254975; 0.33728973390612443 0.30787133982816517 … 0.2214958947011783 0.30786486211076286;;; 0.21261767218616562 0.2312114262619943 … 0.22277380936735394 0.23121196657662324; 0.23120562058957736 0.23690599904166065 … 0.21019894181352564 0.23691449625695538; … ; 0.22274164046981995 0.21017694342023527 … 0.16303170180581217 0.21016940156076944; 0.23119499061579857 0.23690636521180888 … 0.2101886787711692 0.23689940910127;;; … ;;; 0.14236856667173245 0.18285923818075395 … 0.21223163234116965 0.1828637362387904; 0.18284961198376332 0.20495530304011983 … 0.2058102670757074 0.2049643849163279; … ; 0.21220902225342073 0.2057954387469526 … 0.1675813085318418 0.20578995100830913; 0.18285619913005866 0.20496563012220825 … 0.20580475871149417 0.20496304754574274;;; 0.21263466625391464 0.2312158482891246 … 0.22276549801778223 0.23121905358901146; 0.23119966740613762 0.23689468508801215 … 0.21018495740662835 0.2369046886167361; … ; 0.22274242270297478 0.210172216725549 … 0.1630208136073157 0.2101652202527288; 0.23121354546261855 0.23691261264883612 … 0.21018125446994812 0.23690788922166492;;; 0.3653328789414566 0.33732051071611857 … 0.24782680387155012 0.3373241655288131; 0.3373043681410504 0.3078706942273028 … 0.2215047739551101 0.30788205773926086; … ; 0.24780189051912288 0.22149106720477454 … 0.1536460595646967 0.22148355194926186; 0.3373166589725842 0.3078886365898151 … 0.22150043868958075 0.3078835205899441], α = 0.8, eigenvalues = [[-1.3350634259955796, -0.7240450197636139, -0.44608703649169834, -0.4460114580943155, -0.4073280792089607, -0.05972269243654835, -0.059646050482864615, 0.014923854521318962, 0.19469377127997173, 0.20770424939587576, 0.24164038451523578], [-1.3026304557818298, -0.664068840733026, -0.39186558051844655, -0.391782387392425, -0.3752963558380181, 0.012671630434562084, 0.012728589630921772, 0.02683273094625538, 0.20673552951971452, 0.2134514812201893, 0.2572052745868832]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9940047732367023, 0.9939120635152726, 0.0028384466948175205, 2.4598055144589333e-54, 9.96106521100399e-61, 3.983300776020825e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.004571952007218667, 0.004518461992481931, 0.00015430255350731687, 3.0682859394582153e-60, 1.1424482108628819e-63, 2.1273566685700763e-88]], εF = -0.024191635104827074, n_bands_converge = 8, n_iter = 6, ψ = Matrix{ComplexF64}[[-0.002093673631973981 - 0.26488917548759733im -5.072622433831098e-6 + 1.15535258284073e-5im … 0.0553648118209017 - 0.05851184488421152im 1.617754005943914e-6 - 1.130245782735028e-6im; -0.0015823876834771236 - 0.20005812394803174im 1.9327286606127167e-5 + 8.197785345272151e-6im … 0.06719438794552847 - 0.07141475373185031im 0.3989446958906464 - 0.40314726164001297im; … ; -0.0004795956558639555 - 0.060878109765539166im -0.058671284906650224 - 0.025571484767999655im … 0.012187468633646356 - 0.013101735266117066im 0.020041187404761664 - 0.017918941288929482im; -0.0008797808823407933 - 0.11172675485904236im -0.12620431063144788 - 0.05498832730924974im … 0.010284842849633971 - 0.011381482837334039im 0.024130331353406607 - 0.018031397100515045im], [0.03370835502508476 + 0.2592595245917946im 4.110319442101831e-7 + 1.752122932220156e-5im … 0.02859415479102968 - 0.0785658489347454im -3.893571168224783e-6 + 8.685477693657541e-6im; 0.025450216560123452 + 0.19572456494176976im -2.612506991849177e-5 + 1.8973606803760223e-5im … 0.03256937774520345 - 0.09017237091726558im -0.501774701834754 + 0.2660863376034699im; … ; 0.007848036835964255 + 0.06036640734663409im -0.06458050303348188 + 0.0015338053893105006im … 0.005754301579833562 - 0.016171430976250775im -0.02600462948290226 + 0.011536060529603721im; 0.014364371303794067 + 0.11050675145877777im -0.13833613496127442 + 0.0032882552932091925im … 0.004799347580563973 - 0.014107730090805444im -0.032071360899986114 + 0.011391165816925057im]], diagonalization = @NamedTuple{λ::Vector{Vector{Float64}}, X::Vector{Matrix{ComplexF64}}, residual_norms::Vector{Vector{Float64}}, n_iter::Vector{Int64}, converged::Bool, n_matvec::Int64}[(λ = [[-1.3350634259955796, -0.7240450197636139, -0.44608703649169834, -0.4460114580943155, -0.4073280792089607, -0.05972269243654835, -0.059646050482864615, 0.014923854521318962, 0.19469377127997173, 0.20770424939587576, 0.24164038451523578], [-1.3026304557818298, -0.664068840733026, -0.39186558051844655, -0.391782387392425, -0.3752963558380181, 0.012671630434562084, 0.012728589630921772, 0.02683273094625538, 0.20673552951971452, 0.2134514812201893, 0.2572052745868832]], X = [[-0.002093673631973981 - 0.26488917548759733im -5.072622433831098e-6 + 1.15535258284073e-5im … 0.0553648118209017 - 0.05851184488421152im 1.617754005943914e-6 - 1.130245782735028e-6im; -0.0015823876834771236 - 0.20005812394803174im 1.9327286606127167e-5 + 8.197785345272151e-6im … 0.06719438794552847 - 0.07141475373185031im 0.3989446958906464 - 0.40314726164001297im; … ; -0.0004795956558639555 - 0.060878109765539166im -0.058671284906650224 - 0.025571484767999655im … 0.012187468633646356 - 0.013101735266117066im 0.020041187404761664 - 0.017918941288929482im; -0.0008797808823407933 - 0.11172675485904236im -0.12620431063144788 - 0.05498832730924974im … 0.010284842849633971 - 0.011381482837334039im 0.024130331353406607 - 0.018031397100515045im], [0.03370835502508476 + 0.2592595245917946im 4.110319442101831e-7 + 1.752122932220156e-5im … 0.02859415479102968 - 0.0785658489347454im -3.893571168224783e-6 + 8.685477693657541e-6im; 0.025450216560123452 + 0.19572456494176976im -2.612506991849177e-5 + 1.8973606803760223e-5im … 0.03256937774520345 - 0.09017237091726558im -0.501774701834754 + 0.2660863376034699im; … ; 0.007848036835964255 + 0.06036640734663409im -0.06458050303348188 + 0.0015338053893105006im … 0.005754301579833562 - 0.016171430976250775im -0.02600462948290226 + 0.011536060529603721im; 0.014364371303794067 + 0.11050675145877777im -0.13833613496127442 + 0.0032882552932091925im … 0.004799347580563973 - 0.014107730090805444im -0.032071360899986114 + 0.011391165816925057im]], residual_norms = [[0.0004897298241045352, 0.001583840515486703, 0.0006122733811343578, 0.0005324709274815406, 0.0005135803731578942, 0.000792263854639899, 0.0005548867206998441, 0.001273556356281585, 0.0012710679013339032, 0.001175086048021224, 0.0022393958232576152], [0.00046688781688691654, 0.0012672974448556455, 0.0006670438805835729, 0.0006253212709915063, 0.000831807886371143, 0.0008410886601288096, 0.0009085066924594831, 0.002294458582180203, 0.0017837370182383256, 0.0020617999839503045, 0.004928249058581599]], n_iter = [1, 1], converged = 1, n_matvec = 44)], stage = :finalize, history_Δρ = [0.734657105377671, 0.14974845007853008, 0.07222496663206451, 0.06537022684394793, 0.014331158908460402, 0.0058092795161057646], history_Etot = [-27.64736159479533, -28.922597862583512, -28.931021807483145, -28.93765059841316, -28.939573863012743, -28.939605307555706], runtime_ns = 0x000000004511a29e, algorithm = \"SCF\")" + }, + "metadata": {}, + "execution_count": 5 + } + ], "cell_type": "code", "source": [ - "callback = DFTK.ScfSaveCheckpoints()\n", - "scfres = self_consistent_field(basis;\n", - " ρ=guess_density(basis, magnetic_moments),\n", - " tol=1e-2, callback);" + "checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\n", + "scfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)" ], "metadata": {}, "execution_count": 5 @@ -187,11 +222,9 @@ { "cell_type": "markdown", "source": [ - "Notice that using this callback makes the SCF go silent since the passed\n", - "callback parameter overwrites the default value (namely `DefaultScfCallback()`)\n", - "which exactly gives the familiar printing of the SCF convergence.\n", - "If you want to have both (printing and checkpointing) you need to chain\n", - "both callbacks:" + "Notice that the `ρ` argument is now passed to kwargs_scf_checkpoints instead.\n", + "If we run in the same folder the SCF again (here using a tighter tolerance),\n", + "the calculation just continues." ], "metadata": {} }, @@ -203,21 +236,23 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Magnet α Diag Δtime\n", "--- --------------- --------- --------- ------ ---- ---- ------\n", - " 1 -27.64794386762 -0.13 0.001 0.80 6.0 \n", - " 2 -28.92259688130 0.11 -0.82 0.667 0.80 2.0 117ms\n", - " 3 -28.93091875933 -2.08 -1.14 1.168 0.80 2.0 94.9ms\n", - " 4 -28.93760929150 -2.17 -1.18 1.763 0.80 1.0 76.3ms\n", - " 5 -28.93956159391 -2.71 -1.86 1.992 0.80 1.5 83.1ms\n", - " 6 -28.93960108868 -4.40 -2.16 1.980 0.80 1.5 97.8ms\n" + " 1 -28.93961078624 -2.97 1.985 0.80 8.5 173ms\n", + " 2 -28.93961272527 -5.71 -3.41 1.985 0.80 1.0 73.9ms\n" ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "(ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [5.659857734791053 5.429388534823077 … 4.799012687940121 5.429381378276488; 5.429379349117307 5.209320645279436 … 4.610159530612202 5.209317157013413; … ; 4.7990276792036815 4.610180206444126 … 4.0994048314130875 4.610174514092754; 5.429389738836999 5.209333341478972 … 4.610166936029013 5.2093248492882225;;; 5.539156496896903 5.336891559234695 … 4.7579398184671415 5.336880430866794; 5.336870262864381 5.138664040186541 … 4.578641375300868 5.13865377444595; … ; 4.757973381564697 4.5786867701787495 … 4.083707130818406 4.578680620271057; 5.3369026730103295 5.138693354956038 … 4.578665402294366 5.13868354002825;;; 5.245335208282622 5.102600178534637 … 4.633305420780431 5.102584446828433; 5.102570910088435 4.950717060810548 … 4.474803278291992 4.950697430946827; … ; 4.633356035734872 4.474869194254229 … 4.015332516713627 4.47486460902192; 5.102618494273141 4.950754741950399 … 4.474841677711046 4.950745188154909;;; … ;;; 4.913273044475808 4.808734096732983 … 4.414295674325669 4.80873007010574; 4.808737281814872 4.687526846144681 … 4.271631974363941 4.6875162794320495; … ; 4.414323954445821 4.271654247595487 … 3.843406370098558 4.271663858584801; 4.808740532380221 4.687522082772076 … 4.271644871527473 4.687527471120746;;; 5.245408296215633 5.102659456232605 … 4.633346573574321 5.102649404405381; 5.10265556790495 4.950786061811285 … 4.474856191776751 4.950774901394114; … ; 4.633372741337891 4.474880245200399 … 4.015344306055203 4.474881733824099; 5.1026615980710455 4.950788119786496 … 4.474865428836031 4.95078399905261;;; 5.539213379811748 5.336938048386642 … 4.757969341456509 5.336929393249957; 5.3369331654442735 5.138715476878665 … 4.578678040077917 5.138709813154721; … ; 4.757984213251927 4.578694066224092 … 4.083712443989225 4.578690445928001; 5.33693627105491 5.1387199078862995 … 4.578681371295523 5.138712135260374]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [-1.0076013608236585 -0.9757178592951532 … -0.8487790352354057 -0.9757197082913249; -0.9757369451700942 -0.9295787220939462 … -0.8472228750768361 -0.9295844820605758; … ; -0.8487718244562804 -0.847177530642822 … -0.6674045308866083 -0.8471722942115986; -0.9757144978162569 -0.9295693136438528 … -0.8471965399564998 -0.9295640560728223;;; -0.9898023603656427 -0.9544024435393001 … -0.9008676747257047 -0.9543960904749449; -0.9543982247440288 -0.9322933103274257 … -0.8785188832678175 -0.9322815738464535; … ; -0.9009068442830737 -0.8785492809638861 … -0.7913931049482441 -0.8785452761591088; -0.9544209473318153 -0.9323088879272861 … -0.8785469110009778 -0.9323049063703837;;; -0.7546601034278021 -0.8566174375305531 … -0.9144520016170544 -0.8565908092424942; -0.856576289703164 -0.889451268266754 … -0.9071241461717124 -0.8894171490833662; … ; -0.9145034156420944 -0.9071779747943126 … -0.8647817517840016 -0.9071782014129353; -0.8566611497163724 -0.8894868261508398 … -0.907163445774392 -0.8894832522803809;;; … ;;; -0.6145851727411396 -0.8437200728488949 … -0.9685334437637977 -0.8437179849170272; -0.843732342285849 -0.9186084435341874 … -0.9581946847211974 -0.918585597077761; … ; -0.9685723605005927 -0.9582273294930266 … -0.935134092128628 -0.9582419689253733; -0.8437387371125777 -0.9185917607754576 … -0.9582121498075964 -0.9186141480925174;;; -0.7547418959648439 -0.8566565408594208 … -0.9144499147635583 -0.8566349739154702; -0.8566605829998947 -0.8894905169891206 … -0.9071390679490139 -0.8894708850386315; … ; -0.9144780088215687 -0.9071563775394367 … -0.8647599831393636 -0.9071625268581152; -0.8566558311407251 -0.8894790752829703 … -0.9071418498023323 -0.8894774797904003;;; -0.9898580227614547 -0.9544502392955224 … -0.9008890986271954 -0.954443725427558; -0.9544602899646918 -0.9323412049693086 … -0.8785490052128032 -0.93233487973812; … ; -0.9008902861643994 -0.8785518838271865 … -0.7913651344502161 -0.8785507433288587; -0.9544392656891217 -0.9323317378095277 … -0.8785354967273697 -0.9323273384256083]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), [-3.1957186760375578 -2.814757764677759 … -2.0361985207747746 -2.814766770220518; -2.8147860362584693 -2.5020075246135867 … -1.8917260157321518 -2.502016772846239; … ; -2.036176318732088 -1.8916599954662128 … -1.402866850636403 -1.891660451386362; -2.8147531991849393 -2.5019854199639573 … -1.891692275195004 -2.5019886545836765;;; -4.350080269243463 -3.705175248335193 … -2.5159181926690195 -3.7051800236387384; -3.705192325910235 -3.2113910736762303 … -2.2571753289495717 -3.2113896029358493; … ; -2.5159237991288315 -2.2571603317677584 … -1.6916372781255484 -2.2571624768706755; -3.705182638352073 -3.211377336506594 … -2.257179329689234 -3.211383169877479;;; -12.703789676202987 -7.969033095025341 … -3.5412941143042276 -7.969022198443484; -7.9690212156441556 -5.684225482215495 … -3.07382930843697 -5.684210992895828; … ; -3.541294913374825 -3.0738172210973342 … -2.140222698131931 -3.0738220329482653; -7.969058491472658 -5.68422335895973 … -3.0738302086205955 -5.6842293388847605;;; … ;;; -28.842364642810356 -14.825229152859722 … -4.220169173367189 -14.825231091555096; -14.825238237214789 -8.860533624809152 … -3.609510066868784 -8.860521345065358; … ; -4.220179809983832 -3.609520438409067 … -2.426040594527917 -3.6095254668521; -14.825241381476168 -8.860521705423027 … -3.609514634791651 -8.860538704391416;;; -12.703798380807019 -7.969012920656239 … -3.541250874656841 -7.969001405539512; -7.969020851124369 -5.684195729937124 … -3.0737913167295123 -5.6841872584038065; … ; -3.54125280095128 -3.0737845728962867 … -2.1401891401457163 -3.073789233591266; -7.969010069099104 -5.684182230255765 … -3.0737848615235506 -5.684184755497081;;; -4.350079048724432 -3.7051765549394675 … -2.515910093581142 -3.7051786962081885; -3.7051914885510056 -3.2113875316259883 … -2.257168786117508 -3.211386870118744; … ; -2.5158964093229272 -2.2571556385857168 … -1.6916039944567016 -2.2571581183834803; -3.705167358664801 -3.2113736334585736 … -2.25715194641447 -3.2113770067005794]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 1, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [5.659857734791053 5.429388534823077 … 4.799012687940121 5.429381378276488; 5.429379349117307 5.209320645279436 … 4.610159530612202 5.209317157013413; … ; 4.7990276792036815 4.610180206444126 … 4.0994048314130875 4.610174514092754; 5.429389738836999 5.209333341478972 … 4.610166936029013 5.2093248492882225;;; 5.539156496896903 5.336891559234695 … 4.7579398184671415 5.336880430866794; 5.336870262864381 5.138664040186541 … 4.578641375300868 5.13865377444595; … ; 4.757973381564697 4.5786867701787495 … 4.083707130818406 4.578680620271057; 5.3369026730103295 5.138693354956038 … 4.578665402294366 5.13868354002825;;; 5.245335208282622 5.102600178534637 … 4.633305420780431 5.102584446828433; 5.102570910088435 4.950717060810548 … 4.474803278291992 4.950697430946827; … ; 4.633356035734872 4.474869194254229 … 4.015332516713627 4.47486460902192; 5.102618494273141 4.950754741950399 … 4.474841677711046 4.950745188154909;;; … ;;; 4.913273044475808 4.808734096732983 … 4.414295674325669 4.80873007010574; 4.808737281814872 4.687526846144681 … 4.271631974363941 4.6875162794320495; … ; 4.414323954445821 4.271654247595487 … 3.843406370098558 4.271663858584801; 4.808740532380221 4.687522082772076 … 4.271644871527473 4.687527471120746;;; 5.245408296215633 5.102659456232605 … 4.633346573574321 5.102649404405381; 5.10265556790495 4.950786061811285 … 4.474856191776751 4.950774901394114; … ; 4.633372741337891 4.474880245200399 … 4.015344306055203 4.474881733824099; 5.1026615980710455 4.950788119786496 … 4.474865428836031 4.95078399905261;;; 5.539213379811748 5.336938048386642 … 4.757969341456509 5.336929393249957; 5.3369331654442735 5.138715476878665 … 4.578678040077917 5.138709813154721; … ; 4.757984213251927 4.578694066224092 … 4.083712443989225 4.578690445928001; 5.33693627105491 5.1387199078862995 … 4.578681371295523 5.138712135260374]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [-1.0125207657918562 -0.9779701565295834 … -0.9029932171865946 -0.9779697842041426; -0.9779616919386156 -0.9436513005504259 … -0.8431513958982119 -0.9436528813218481; … ; -0.9030280583150618 -0.843124925356717 … -0.7668684050906485 -0.8431218109382084; -0.9779653631778328 -0.9436601982104414 … -0.8431515678507489 -0.9436579842969838;;; -1.0024790791344471 -0.9662293644142915 … -0.8942732446599567 -0.96622867905213; -0.9662260876093773 -0.9380568723412411 … -0.8654153787774382 -0.9380627850781683; … ; -0.8942586440227215 -0.8654081282627017 … -0.7841134687163456 -0.8654027799052262; -0.9662209931008247 -0.9380622626606457 … -0.865400198096566 -0.938057563285685;;; -0.8145004985890388 -0.832922733715593 … -0.8251799171218204 -0.83292702280905; -0.8329269722938162 -0.8330018514900115 … -0.8159045013433784 -0.8330172390301221; … ; -0.8251612975177997 -0.815891473209852 … -0.7766155818895917 -0.8158859205240289; -0.8329057068013448 -0.8330020204303974 … -0.8158902573231742 -0.8329951438243177;;; … ;;; -0.6906253667805781 -0.7862907016033739 … -0.8336869283147981 -0.7862879767694244; -0.7862790032982289 -0.8120410319874982 … -0.8254512936214085 -0.8120513886113782; … ; -0.8336690600551881 -0.8254382604207053 … -0.8094614115378065 -0.8254344221512967; -0.7862778776961735 -0.8120498947228381 … -0.8254420940626007 -0.8120374712919012;;; -0.8144845832950914 -0.8329179052789836 … -0.8251856836106012 -0.8329240168681491; -0.8329077872105244 -0.8329978304148988 … -0.8159025697312486 -0.8330078300593035; … ; -0.8251756328904881 -0.8159018053018912 … -0.7766256144644401 -0.8158974988606271; -0.8329146450927761 -0.8330092614306969 … -0.8159020519694994 -0.8330057578623835;;; -1.0024746035214067 -0.9662285528248197 … -0.8942737626890088 -0.9662284512431651; -0.9662189671789542 -0.9380582010975367 … -0.8654131054658754 -0.9380632523416553; … ; -0.8942717160401862 -0.8654087789881068 … -0.7841244186337514 -0.8654040385291455; -0.9662245332994661 -0.938064991171405 … -0.8654090309761534 -0.9380624409175442]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697 … 2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), [-3.2006380810057555 -2.8170100619121894 … -2.0904127027259634 -2.8170168461333356; -2.8170107830269906 -2.5160801030700664 … -1.8876545365535273 -2.5160851721075113; … ; -2.09043255259087 -1.8876073901801078 … -1.5023307248404432 -1.8876099681129717; -2.8170040645465155 -2.5160763045305456 … -1.887647303089253 -2.516082582807838;;; -4.362756988012267 -3.717002169210184 … -2.509323762603272 -3.7170126122159237; -3.7170201887755834 -3.217154635690046 … -2.2440718244591924 -3.217170814167564; … ; -2.5092755988684794 -2.244019179066574 … -1.68435764189365 -2.244019980616793; -3.7169826841210822 -3.217130711239953 … -2.244032616784822 -3.2171358267927803;;; -12.763630071364224 -7.945338391210381 … -3.452022029808994 -7.945358412010039; -7.945371898234807 -5.627776065438752 … -2.982609663608636 -5.627811082842584; … ; -3.4519527952505302 -2.9825307195128734 … -2.052056528237521 -2.9825297520593588; -7.94530304855763 -5.627738553239287 … -2.9825570201693776 -5.627741230428697;;; … ;;; -28.918404836849792 -14.767799781614201 … -4.085322657918189 -14.767801083407493; -14.76778489822717 -8.753966213262464 … -3.476766675768995 -8.753987136598974; … ; -4.085276509538427 -3.476731369336746 … -2.3003679139370954 -3.4767179200780234; -14.767780522059764 -8.753979839370409 … -3.4767445790466556 -8.7539620275908;;; -12.763541068137265 -7.945274285075802 … -3.4519866435038837 -7.945290448492191; -7.945268055334999 -5.627703043362903 … -2.982554818511747 -5.627724203424478; … ; -3.4519504250201996 -2.982530000658741 … -2.052054771470793 -2.982524205593778; -7.945268883051155 -5.627712416403492 … -2.9825450636907176 -5.627713033569064;;; -4.362695629484383 -3.7169548684687648 … -2.509294757642955 -3.7169634220237957; -3.716950165765268 -3.2171045277542163 … -2.2440328863705803 -3.217115242722279; … ; -2.509277839198714 -2.2440125337466372 … -1.684363278640237 -2.244011413583767; -3.7169526262751456 -3.217106886820451 … -2.2440254806632534 -3.2171121091925152]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([ 0, 0, 0], spin = 2, num. G vectors = 1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.939612725267715), converged = true, occupation_threshold = 1.0e-6, ρ = [0.43402827404382127 0.3835163856387613 … 0.2550159510596599 0.3835152036511656; 0.38352331634108777 0.3371423566592746 … 0.2221474175366045 0.3371445728095751; … ; 0.2550111656170092 0.22214091051966178 … 0.144667239395978 0.2221385833338415; 0.38350973571540836 0.3371345783228842 … 0.22214026630293882 0.33713082458643623;;; 0.36318001047414056 0.34782493644584617 … 0.27200675896665305 0.3478170559459549; 0.3478123716459138 0.3262296744059961 … 0.24596443301406082 0.32621938283588287; … ; 0.27203167702473385 0.2459946567422703 … 0.17360459101200573 0.24599240600771485; 0.3478358163905575 0.32624736813418287 … 0.24598205407647683 0.32624241190321485;;; 0.21380383060907251 0.2733235030787174 … 0.3103164176632551 0.2733067079808967; 0.27329518975927763 0.30470782237763355 … 0.2991201143355262 0.30467956800890794; … ; 0.3103732381087391 0.2991867406904723 … 0.23807999412325417 0.2991871099464812; 0.2733496956301844 0.3047421479849259 … 0.2991626566960029 0.30473789257704986;;; … ;;; 0.14404898082354042 0.24609879788862093 … 0.3458348949124501 0.24609751934822593; 0.24611097502023205 0.3074562190312839 … 0.34262991032134615 0.30744217737572743; … ; 0.3458711848206258 0.3426524235761328 … 0.2858558884063262 0.34266970860644874; 0.24611229559409553 0.30744311490638104 … 0.34264594367057505 0.30745795439440415;;; 0.21384771513979772 0.273350200055491 … 0.3103204487018841 0.2733377210054528; 0.27335309228289245 0.30474434571762754 … 0.29914100539601807 0.30472817726149193; … ; 0.31034999771463184 0.2991606008838532 … 0.23806158859050847 0.2991667791840609; 0.2733531074878746 0.30473638443903184 … 0.2991482970742327 0.3047355717951884;;; 0.36323765926951457 0.34786685890808133 … 0.2720215171457642 0.34785982619571604; 0.3478746150878994 0.3262742107034188 … 0.24598830662679821 0.32627012305503705; … ; 0.272024045737666 0.24598437745199325 … 0.1735945424497521 0.24598406011479895; 0.34785844097335944 0.3262610531533604 … 0.24598045652248868 0.32625617001470497;;;; 0.43836913108109926 0.3878187595704408 … 0.2592550844637153 0.38781924932016204; 0.3878151656646829 0.34140958459077897 … 0.22632016289648985 0.3414158010695964; … ; 0.25924828141890194 0.22631469908277121 … 0.14855616199756766 0.22631089632868098; 0.3878156792093737 0.341415004420826 … 0.2263143745952509 0.34141089216127507;;; 0.3653117234276799 0.33725906998110156 … 0.24772943563832336 0.3372591897237478; 0.3372568387391056 0.3077996240233068 … 0.2214198097452052 0.3078064322856038; … ; 0.2477202740507778 0.22141120938467163 … 0.15359858262723597 0.22140693211473456; 0.3372539518624993 0.3078028038330654 … 0.22141140370056883 0.30779794751818706;;; 0.21246579119544862 0.23097091017337662 … 0.22246023610492793 0.23097071161764152; 0.2309695674106428 0.23662061591380865 … 0.20989953438939807 0.23662740737391696; … ; 0.22244973502319687 0.2098886582386902 … 0.16280954494886124 0.2098848866799064; 0.23096465016139595 0.23662192731538567 … 0.20988983913934287 0.23661716008386877;;; … ;;; 0.14218074008867457 0.18255746731948427 … 0.21181500818813187 0.18255523740348956; 0.18255358966877566 0.20459247123385313 … 0.2054049916002276 0.20459333425697296; … ; 0.21181184757592966 0.20540264665430233 … 0.16726802377726885 0.20540072024307102; 0.18255388152765403 0.20459459383613163 … 0.20540226770127987 0.2045913262529928;;; 0.2124681766844867 0.23097352490016448 … 0.22246179680564998 0.23097315047795813; 0.23096849877669157 0.23662140807663548 … 0.20989763393223013 0.23662546793157577; … ; 0.22245718964740502 0.20989464077980283 … 0.1628136203353442 0.2098917202446032; 0.23097132568229867 0.23662731431952622 … 0.20989422159571347 0.23662385558070653;;; 0.3653162048090538 0.33726285857272886 … 0.24773197023697965 0.3372633340130028; 0.33725794135144016 0.30780130193588756 … 0.22141965535179087 0.30780686072107494; … ; 0.2477266909513603 0.22141616877112869 … 0.15360211452989855 0.2214127826846283; 0.3372610772199059 0.30780831844212597 … 0.22141565358937743 0.30780469155282947], α = 0.8, eigenvalues = [[-1.3339635738097935, -0.7233781252012225, -0.44535115610763676, -0.4453431441639183, -0.4063481409031223, -0.05926068700458665, -0.05925684512792661, 0.015450284267115812, 0.19526985803343838, 0.20827847390001833, 0.24217763189318028], [-1.3007153316444096, -0.6618884118049211, -0.38985492968636065, -0.3898471366553307, -0.3737524079238702, 0.014897186310721792, 0.014901545454664345, 0.028330475737471706, 0.2079607248127438, 0.21450227615971645, 0.25851336510272466]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9947223968228124, 0.9947182736908114, 0.0032075456559025996, 4.34141541645614e-54, 1.8219704004532454e-60, 8.355953128184511e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.003608475116548382, 0.0036051468956789547, 0.0001381618182456026, 2.634329199845208e-60, 1.202345409281772e-63, 1.571921587253337e-88]], εF = -0.02309798083511391, n_bands_converge = 8, n_iter = 2, ψ = Matrix{ComplexF64}[[-0.12091052482934207 + 0.23580065198391623im 2.0892179389540186e-6 - 2.70950987752147e-7im … 0.005723265808258634 + 0.07988017444891697im 4.001441475869228e-6 + 3.7763662209459755e-7im; -0.09132053796204989 + 0.17809107092948256im -5.235277343457743e-7 - 5.1946685610489596e-6im … 0.010272962883751686 + 0.0980531297367848im -0.04854144750851503 - 0.4384208709323998im; … ; -0.027773876167443024 + 0.054162391075857304im 0.011468411736305091 + 0.06294160141050356im … 0.001785364651502343 + 0.018048291275890214im -0.014850253851368034 - 0.01958069811602861im; -0.05097823783686051 + 0.09941235706859317im 0.02467686419283782 + 0.13542641124692756im … 0.0019422239083836178 + 0.015919293065175956im -0.03304931659998644 - 0.02055794349040128im], [0.25849969445627974 - 0.039347826133589066im -6.818539438126966e-6 - 4.921016310370435e-7im … -0.08395776352678011 + 0.00997777708384694im -4.768230370563086e-6 + 9.871093487002659e-6im; 0.19512307188013994 - 0.02970379333067766im -4.166820033096358e-6 + 6.034352637191556e-6im … -0.0948294341419211 + 0.012124698887725367im -0.08329164118039696 + 0.45063161147244124im; … ; 0.06016085730131386 - 0.009156251529050302im 0.004307507888535064 - 0.06445490703787518im … -0.017129841297229324 + 0.002127490293676595im 0.00813298226646178 + 0.027216313775450748im; 0.11016426672775977 - 0.016767359350806352im 0.009226982430761584 - 0.1381134605336074im … -0.01495286253540037 + 0.001928909352791096im 0.025617103211352757 + 0.03861317824881585im]], diagonalization = @NamedTuple{λ::Vector{Vector{Float64}}, X::Vector{Matrix{ComplexF64}}, residual_norms::Vector{Vector{Float64}}, n_iter::Vector{Int64}, converged::Bool, n_matvec::Int64}[(λ = [[-1.3339635738097935, -0.7233781252012225, -0.44535115610763676, -0.4453431441639183, -0.4063481409031223, -0.05926068700458665, -0.05925684512792661, 0.015450284267115812, 0.19526985803343838, 0.20827847390001833, 0.24217763189318028], [-1.3007153316444096, -0.6618884118049211, -0.38985492968636065, -0.3898471366553307, -0.3737524079238702, 0.014897186310721792, 0.014901545454664345, 0.028330475737471706, 0.2079607248127438, 0.21450227615971645, 0.25851336510272466]], X = [[-0.12091052482934207 + 0.23580065198391623im 2.0892179389540186e-6 - 2.70950987752147e-7im … 0.005723265808258634 + 0.07988017444891697im 4.001441475869228e-6 + 3.7763662209459755e-7im; -0.09132053796204989 + 0.17809107092948256im -5.235277343457743e-7 - 5.1946685610489596e-6im … 0.010272962883751686 + 0.0980531297367848im -0.04854144750851503 - 0.4384208709323998im; … ; -0.027773876167443024 + 0.054162391075857304im 0.011468411736305091 + 0.06294160141050356im … 0.001785364651502343 + 0.018048291275890214im -0.014850253851368034 - 0.01958069811602861im; -0.05097823783686051 + 0.09941235706859317im 0.02467686419283782 + 0.13542641124692756im … 0.0019422239083836178 + 0.015919293065175956im -0.03304931659998644 - 0.02055794349040128im], [0.25849969445627974 - 0.039347826133589066im -6.818539438126966e-6 - 4.921016310370435e-7im … -0.08395776352678011 + 0.00997777708384694im -4.768230370563086e-6 + 9.871093487002659e-6im; 0.19512307188013994 - 0.02970379333067766im -4.166820033096358e-6 + 6.034352637191556e-6im … -0.0948294341419211 + 0.012124698887725367im -0.08329164118039696 + 0.45063161147244124im; … ; 0.06016085730131386 - 0.009156251529050302im 0.004307507888535064 - 0.06445490703787518im … -0.017129841297229324 + 0.002127490293676595im 0.00813298226646178 + 0.027216313775450748im; 0.11016426672775977 - 0.016767359350806352im 0.009226982430761584 - 0.1381134605336074im … -0.01495286253540037 + 0.001928909352791096im 0.025617103211352757 + 0.03861317824881585im]], residual_norms = [[0.000173503666397226, 0.00016211716280034176, 0.0002588360279102903, 0.0001928504723265815, 0.00023096083030558841, 0.000379789389573828, 0.0004329320232420439, 0.00016448237518489124, 0.0007010190637162818, 0.0019089788660712826, 0.0009458247239657826], [3.278831043993922e-5, 0.00014925812221062824, 0.00021420859245961573, 0.00017379174192863047, 0.00010348538482767795, 0.0003588389396441394, 0.0003575134192818548, 0.00020496219216930206, 0.0002568261470076249, 0.0006044560478613914, 0.006221772293731571]], n_iter = [1, 1], converged = 1, n_matvec = 44)], stage = :finalize, history_Δρ = [0.0010630824895987007, 0.00038588834389734677], history_Etot = [-28.939610786244966, -28.939612725267715], runtime_ns = 0x0000000011413803, algorithm = \"SCF\")" + }, + "metadata": {}, + "execution_count": 6 } ], "cell_type": "code", "source": [ - "callback = DFTK.ScfDefaultCallback() ∘ DFTK.ScfSaveCheckpoints(; keep=true)\n", - "scfres = self_consistent_field(basis;\n", - " ρ=guess_density(basis, magnetic_moments),\n", - " tol=1e-2, callback);" + "checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\n", + "scfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)" ], "metadata": {}, "execution_count": 6 @@ -225,20 +260,19 @@ { "cell_type": "markdown", "source": [ - "For more details on using callbacks with DFTK's `self_consistent_field` function\n", - "see Monitoring self-consistent field calculations." - ], - "metadata": {} - }, - { - "cell_type": "markdown", - "source": [ - "By default checkpoint is saved in the file `dftk_scf_checkpoint.jld2`, which is\n", - "deleted automatically once the SCF completes successfully. If one wants to keep\n", - "the file one needs to specify `keep=true` as has been done in the ultimate SCF\n", - "for demonstration purposes: now we can continue the previous calculation\n", - "from the last checkpoint as if the SCF had been aborted.\n", - "For this one just loads the checkpoint with `load_scfres`:" + "Since only the density is stored in a checkpoint\n", + "(and not the Bloch waves), the first step needs a slightly elevated number\n", + "of diagonalizations. Notice, that reconstructing the `checkpointargs` in this second\n", + "call is important as the `checkpointargs` now contain different data,\n", + "such that the SCF continues from the checkpoint.\n", + "By default checkpoint is saved in the file `dftk_scf_checkpoint.jld2`, which can be changed\n", + "using the `filename` keyword argument of `kwargs_scf_checkpoints`. Note that the\n", + "file is not deleted by DFTK, so it is your responsibility to clean it up. Further note\n", + "that warnings or errors will arise if you try to use a checkpoint, which is incompatible\n", + "with your calculation.\n", + "\n", + "We can also inspect the checkpoint file manually using the `load_scfres` function\n", + "and use it manually to continue the calculation:" ], "metadata": {} }, @@ -250,16 +284,27 @@ "text": [ "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", "--- --------------- --------- --------- ------ ---- ------\n", - " 1 -28.93961054829 -2.94 1.985 1.0 \n", - " 2 -28.93961238630 -5.74 -3.31 1.985 1.0 86.7ms\n" + " 1 -28.93829778685 -2.28 1.986 5.0 131ms\n", + " 2 -28.93940814818 -2.95 -2.71 1.985 1.0 67.7ms\n", + " 3 -28.93960362690 -3.71 -2.52 1.985 4.0 116ms\n", + " 4 -28.93960848319 -5.31 -2.66 1.985 1.0 82.3ms\n", + " 5 -28.93961173673 -5.49 -2.85 1.985 1.0 65.2ms\n", + " 6 -28.93961222701 -6.31 -2.90 1.985 1.0 77.0ms\n", + " 7 -28.93961262156 -6.40 -2.99 1.985 1.0 79.3ms\n", + " 8 -28.93961272761 -6.97 -3.02 1.985 1.0 67.6ms\n", + " 9 -28.93961275204 -7.61 -3.01 1.985 1.0 67.3ms\n", + " 10 -28.93961313161 -6.42 -3.44 1.985 1.0 71.6ms\n", + " 11 -28.93961315555 -7.62 -3.51 1.985 1.5 75.3ms\n", + " 12 -28.93961316160 -8.22 -3.56 1.985 1.0 69.7ms\n", + " 13 -28.93961315765 + -8.40 -4.00 1.985 1.0 71.3ms\n", + " 14 -28.93961317134 -7.86 -4.15 1.985 2.0 83.3ms\n" ] } ], "cell_type": "code", "source": [ "oldstate = load_scfres(\"dftk_scf_checkpoint.jld2\")\n", - "scfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ,\n", - " ψ=oldstate.ψ, tol=1e-3);" + "scfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);" ], "metadata": {}, "execution_count": 7 @@ -267,10 +312,13 @@ { "cell_type": "markdown", "source": [ - "!!! note \"Availability of `load_scfres`, `save_scfres` and `ScfSaveCheckpoints`\"\n", - " As JLD2 is an optional dependency of DFTK these three functions are only\n", - " available once one has *both* imported DFTK and JLD2 (`using DFTK`\n", - " and `using JLD2`)." + "Some details on what happens under the hood in this mechanism: When using the\n", + "`kwargs_scf_checkpoints` function, the `ScfSaveCheckpoints` callback is employed\n", + "during the SCF, which causes the density to be stored to the JLD2 file in every iteration.\n", + "When reading the file, the `kwargs_scf_checkpoints` transparently patches away the `ψ`\n", + "and `ρ` keyword arguments and replaces them by the data obtained from the file.\n", + "For more details on using callbacks with DFTK's `self_consistent_field` function\n", + "see Monitoring self-consistent field calculations." ], "metadata": {} }, @@ -298,11 +346,11 @@ "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", - "version": "1.9.4" + "version": "1.10.0" }, "kernelspec": { - "name": "julia-1.9", - "display_name": "Julia 1.9.4", + "name": "julia-1.10", + "display_name": "Julia 1.10.0", "language": "julia" } }, diff --git a/dev/tricks/scf_checkpoints.jl b/dev/tricks/scf_checkpoints.jl index d8f4e09dd3..5b2410f7dd 100644 --- a/dev/tricks/scf_checkpoints.jl +++ b/dev/tricks/scf_checkpoints.jl @@ -10,22 +10,18 @@ # by [`self_consistent_field`](@ref) on disk or retrieve it back into memory, # respectively. For this purpose DFTK uses the # [JLD2.jl](https://github.com/JuliaIO/JLD2.jl) file format and Julia package. -# For the moment this process is considered an experimental feature and -# has a number of caveats, see the warnings below. # -# !!! warning "Saving `scfres` is experimental" -# The [`load_scfres`](@ref) and [`save_scfres`](@ref) pair of functions -# are experimental features. This means: +# !!! note "Availability of `load_scfres`, `save_scfres` and checkpointing" +# As JLD2 is an optional dependency of DFTK these three functions are only +# available once one has *both* imported DFTK and JLD2 (`using DFTK` +# and `using JLD2`). # -# - The interface of these functions -# as well as the format in which the data is stored on disk can -# change incompatibly in the future. At this point we make no promises ... -# - JLD2 is not yet completely matured -# and it is recommended to only use it for short-term storage -# and **not** to archive scientific results. -# - If you are using the functions to transfer data between different -# machines ensure that you use the **same version of Julia, JLD2 and DFTK** -# for saving and loading data. +# !!! warning "DFTK data formats are not yet fully matured" +# The data format in which DFTK saves data as well as the general interface +# of the [`load_scfres`](@ref) and [`save_scfres`](@ref) pair of functions +# are not yet fully matured. If you use the functions or the produced files +# expect that you need to adapt your routines in the future even with patch +# version bumps. # # To illustrate the use of the functions in practice we will compute # the total energy of the O₂ molecule at PBE level. To get the triplet @@ -55,7 +51,7 @@ save_scfres("scfres.jld2", scfres); #- scfres.energies -# The `scfres.jld2` file could now be transfered to a different computer, +# The `scfres.jld2` file could now be transferred to a different computer, # Where one could fire up a REPL to inspect the results of the above # calculation: @@ -69,6 +65,19 @@ loaded.energies # Since the loaded data contains exactly the same data as the `scfres` returned by the # SCF calculation one could use it to plot a band structure, e.g. # `plot_bandstructure(load_scfres("scfres.jld2"))` directly from the stored data. +# +# Notice that both `load_scfres` and `save_scfres` work by transferring all data +# to/from the master process, which performs the IO operations without parallelisation. +# Since this can become slow, both functions support optional arguments to speed up +# the processing. An overview: +# - `save_scfres("scfres.jld2", scfres; save_ψ=false)` avoids saving +# the Bloch wave, which is usually faster and saves storage space. +# - `load_scfres("scfres.jld2", basis)` avoids reconstructing the basis from the file, +# but uses the passed basis instead. This save the time of constructing the basis +# twice and allows to specify parallelisation options (via the passed basis). Usually +# this is useful for continuing a calculation on a supercomputer or cluster. +# +# See also the discussion on [Input and output formats](@ref) on JLD2 files. # ## Checkpointing of SCF calculations # A related feature, which is very useful especially for longer calculations with DFTK @@ -77,42 +86,48 @@ loaded.energies # to overrunning the walltime limit one does not need to start from scratch, # but can continue the calculation from the last checkpoint. # -# To enable automatic checkpointing in DFTK one needs to pass the `ScfSaveCheckpoints` -# callback to [`self_consistent_field`](@ref), for example: +# The easiest way to enable checkpointing is to use the [`kwargs_scf_checkpoints`](@ref) +# function, which does two things. (1) It sets up checkpointing using the +# [`ScfSaveCheckpoints`](@ref) callback and (2) if a checkpoint file is detected, +# the stored density is used to continue the calculation instead of the usual +# atomic-orbital based guess. In practice this is done by modifying the keyword arguments +# passed to # [`self_consistent_field`](@ref) appropriately, e.g. by using the density +# or orbitals from the checkpoint file. For example: -callback = DFTK.ScfSaveCheckpoints() -scfres = self_consistent_field(basis; - ρ=guess_density(basis, magnetic_moments), - tol=1e-2, callback); +checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments)) +scfres = self_consistent_field(basis; tol=1e-2, checkpointargs...) -# Notice that using this callback makes the SCF go silent since the passed -# callback parameter overwrites the default value (namely `DefaultScfCallback()`) -# which exactly gives the familiar printing of the SCF convergence. -# If you want to have both (printing and checkpointing) you need to chain -# both callbacks: -callback = DFTK.ScfDefaultCallback() ∘ DFTK.ScfSaveCheckpoints(; keep=true) -scfres = self_consistent_field(basis; - ρ=guess_density(basis, magnetic_moments), - tol=1e-2, callback); +# Notice that the `ρ` argument is now passed to kwargs_scf_checkpoints instead. +# If we run in the same folder the SCF again (here using a tighter tolerance), +# the calculation just continues. -# For more details on using callbacks with DFTK's `self_consistent_field` function -# see [Monitoring self-consistent field calculations](@ref). +checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments)) +scfres = self_consistent_field(basis; tol=1e-3, checkpointargs...) -# By default checkpoint is saved in the file `dftk_scf_checkpoint.jld2`, which is -# deleted automatically once the SCF completes successfully. If one wants to keep -# the file one needs to specify `keep=true` as has been done in the ultimate SCF -# for demonstration purposes: now we can continue the previous calculation -# from the last checkpoint as if the SCF had been aborted. -# For this one just loads the checkpoint with [`load_scfres`](@ref): +# Since only the density is stored in a checkpoint +# (and not the Bloch waves), the first step needs a slightly elevated number +# of diagonalizations. Notice, that reconstructing the `checkpointargs` in this second +# call is important as the `checkpointargs` now contain different data, +# such that the SCF continues from the checkpoint. +# By default checkpoint is saved in the file `dftk_scf_checkpoint.jld2`, which can be changed +# using the `filename` keyword argument of [`kwargs_scf_checkpoints`](@ref). Note that the +# file is not deleted by DFTK, so it is your responsibility to clean it up. Further note +# that warnings or errors will arise if you try to use a checkpoint, which is incompatible +# with your calculation. +# +# We can also inspect the checkpoint file manually using the `load_scfres` function +# and use it manually to continue the calculation: oldstate = load_scfres("dftk_scf_checkpoint.jld2") -scfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, - ψ=oldstate.ψ, tol=1e-3); +scfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4); -# !!! note "Availability of `load_scfres`, `save_scfres` and `ScfSaveCheckpoints`" -# As JLD2 is an optional dependency of DFTK these three functions are only -# available once one has *both* imported DFTK and JLD2 (`using DFTK` -# and `using JLD2`). +# Some details on what happens under the hood in this mechanism: When using the +# `kwargs_scf_checkpoints` function, the `ScfSaveCheckpoints` callback is employed +# during the SCF, which causes the density to be stored to the JLD2 file in every iteration. +# When reading the file, the `kwargs_scf_checkpoints` transparently patches away the `ψ` +# and `ρ` keyword arguments and replaces them by the data obtained from the file. +# For more details on using callbacks with DFTK's `self_consistent_field` function +# see [Monitoring self-consistent field calculations](@ref). # (Cleanup files generated by this notebook) rm("dftk_scf_checkpoint.jld2") diff --git a/dev/tricks/scf_checkpoints/index.html b/dev/tricks/scf_checkpoints/index.html index e099b36205..697c93ecf0 100644 --- a/dev/tricks/scf_checkpoints/index.html +++ b/dev/tricks/scf_checkpoints/index.html @@ -1,5 +1,5 @@ -Saving SCF results on disk and SCF checkpoints · DFTK.jl

    Saving SCF results on disk and SCF checkpoints

    For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.

    To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package. For the moment this process is considered an experimental feature and has a number of caveats, see the warnings below.

    Saving `scfres` is experimental

    The load_scfres and save_scfres pair of functions are experimental features. This means:

    • The interface of these functions as well as the format in which the data is stored on disk can change incompatibly in the future. At this point we make no promises ...
    • JLD2 is not yet completely matured and it is recommended to only use it for short-term storage and not to archive scientific results.
    • If you are using the functions to transfer data between different machines ensure that you use the same version of Julia, JLD2 and DFTK for saving and loading data.

    To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:

    using DFTK
    +Saving SCF results on disk and SCF checkpoints · DFTK.jl

    Saving SCF results on disk and SCF checkpoints

    For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.

    To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package.

    Availability of `load_scfres`, `save_scfres` and checkpointing

    As JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).

    DFTK data formats are not yet fully matured

    The data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.

    To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:

    using DFTK
     using LinearAlgebra
     using JLD2
     
    @@ -19,51 +19,46 @@
     scfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))
     save_scfres("scfres.jld2", scfres);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
     ---   ---------------   ---------   ---------   ------   ----   ------
    -  1   -27.64784148033                   -0.13    0.001    6.0
    -  2   -28.92216677252        0.11       -0.82    0.657    2.0   87.8ms
    -  3   -28.93079011516       -2.06       -1.15    1.153    2.0    108ms
    -  4   -28.93746862862       -2.18       -1.18    1.750    1.0   96.0ms
    -  5   -28.93934075900       -2.73       -1.43    1.937    1.0   65.3ms
    -  6   -28.93958474280       -3.61       -1.89    1.992    1.5   70.1ms
    -  7   -28.93960770497       -4.64       -2.26    1.982    1.0    100ms
    scfres.energies
    Energy breakdown (in Ha):
    -    Kinetic             16.7697171
    -    AtomicLocal         -58.4927457
    -    AtomicNonlocal      4.7104727 
    +  1   -27.64112800475                   -0.13    0.001    6.0   92.9ms
    +  2   -28.92278530645        0.11       -0.83    0.665    2.0   77.0ms
    +  3   -28.93089597009       -2.09       -1.14    1.164    2.0    112ms
    +  4   -28.93757718759       -2.18       -1.18    1.760    2.0   70.2ms
    +  5   -28.93957040047       -2.70       -2.10    1.985    1.5    105ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.7574443
    +    AtomicLocal         -58.4655318
    +    AtomicNonlocal      4.7068748 
         Ewald               -4.8994689
         PspCorrection       0.0044178 
    -    Hartree             19.3597322
    -    Xc                  -6.3907463
    -    Entropy             -0.0009865
    +    Hartree             19.3460884
    +    Xc                  -6.3884954
    +    Entropy             -0.0008995
     
    -    total               -28.939607704969

    The scfres.jld2 file could now be transfered to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:

    using DFTK
    +    total               -28.939570400467

    The scfres.jld2 file could now be transferred to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:

    using DFTK
     using JLD2
     loaded = load_scfres("scfres.jld2")
    -propertynames(loaded)
    (:ham, :basis, :energies, :converged, :occupation_threshold, :ρ, :α, :eigenvalues, :occupation, :εF, :n_bands_converge, :n_iter, :ψ, :diagonalization, :stage, :algorithm, :norm_Δρ)
    loaded.energies
    Energy breakdown (in Ha):
    -    Kinetic             16.7697171
    -    AtomicLocal         -58.4927457
    -    AtomicNonlocal      4.7104727 
    +propertynames(loaded)
    (:α, :history_Δρ, :converged, :occupation, :occupation_threshold, :algorithm, :basis, :runtime_ns, :n_iter, :history_Etot, :εF, :energies, :ρ, :n_bands_converge, :eigenvalues, :ψ, :ham)
    loaded.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.7574443
    +    AtomicLocal         -58.4655318
    +    AtomicNonlocal      4.7068748 
         Ewald               -4.8994689
         PspCorrection       0.0044178 
    -    Hartree             19.3597322
    -    Xc                  -6.3907463
    -    Entropy             -0.0009865
    +    Hartree             19.3460884
    +    Xc                  -6.3884954
    +    Entropy             -0.0008995
     
    -    total               -28.939607704969

    Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres("scfres.jld2")) directly from the stored data.

    Checkpointing of SCF calculations

    A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.

    To enable automatic checkpointing in DFTK one needs to pass the ScfSaveCheckpoints callback to self_consistent_field, for example:

    callback = DFTK.ScfSaveCheckpoints()
    -scfres = self_consistent_field(basis;
    -                               ρ=guess_density(basis, magnetic_moments),
    -                               tol=1e-2, callback);

    Notice that using this callback makes the SCF go silent since the passed callback parameter overwrites the default value (namely DefaultScfCallback()) which exactly gives the familiar printing of the SCF convergence. If you want to have both (printing and checkpointing) you need to chain both callbacks:

    callback = DFTK.ScfDefaultCallback() ∘ DFTK.ScfSaveCheckpoints(; keep=true)
    -scfres = self_consistent_field(basis;
    -                               ρ=guess_density(basis, magnetic_moments),
    -                               tol=1e-2, callback);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   α      Diag   Δtime
    ----   ---------------   ---------   ---------   ------   ----   ----   ------
    -  1   -27.64452953644                   -0.13    0.001   0.80    6.0
    -  2   -28.92274618643        0.11       -0.82    0.662   0.80    2.0    121ms
    -  3   -28.93080228355       -2.09       -1.14    1.156   0.80    2.0    104ms
    -  4   -28.93753285192       -2.17       -1.18    1.756   0.80    1.0   75.1ms
    -  5   -28.93955141842       -2.69       -1.83    1.975   0.80    1.5    144ms
    -  6   -28.93960584025       -4.26       -2.85    1.985   0.80    1.5    113ms

    For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.

    By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which is deleted automatically once the SCF completes successfully. If one wants to keep the file one needs to specify keep=true as has been done in the ultimate SCF for demonstration purposes: now we can continue the previous calculation from the last checkpoint as if the SCF had been aborted. For this one just loads the checkpoint with load_scfres:

    oldstate = load_scfres("dftk_scf_checkpoint.jld2")
    -scfres   = self_consistent_field(oldstate.basis, ρ=oldstate.ρ,
    -                                 ψ=oldstate.ψ, tol=1e-3);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +    total               -28.939570400467

    Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres("scfres.jld2")) directly from the stored data.

    Notice that both load_scfres and save_scfres work by transferring all data to/from the master process, which performs the IO operations without parallelisation. Since this can become slow, both functions support optional arguments to speed up the processing. An overview:

    • save_scfres("scfres.jld2", scfres; save_ψ=false) avoids saving the Bloch wave, which is usually faster and saves storage space.
    • load_scfres("scfres.jld2", basis) avoids reconstructing the basis from the file, but uses the passed basis instead. This save the time of constructing the basis twice and allows to specify parallelisation options (via the passed basis). Usually this is useful for continuing a calculation on a supercomputer or cluster.

    See also the discussion on Input and output formats on JLD2 files.

    Checkpointing of SCF calculations

    A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.

    The easiest way to enable checkpointing is to use the kwargs_scf_checkpoints function, which does two things. (1) It sets up checkpointing using the ScfSaveCheckpoints callback and (2) if a checkpoint file is detected, the stored density is used to continue the calculation instead of the usual atomic-orbital based guess. In practice this is done by modifying the keyword arguments passed to # self_consistent_field appropriately, e.g. by using the density or orbitals from the checkpoint file. For example:

    checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))
    +scfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)
    (ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [5.6607954619145024 5.430274145544803 … 4.799756461332167 5.430266551031614; 5.430269850276814 5.210162801046922 … 4.610865796882231 5.210156707954881; … ; 4.799768484408737 4.6108797474572425 … 4.0999959770030525 4.610874418999327; 5.430272912431079 5.210166370901658 … 4.610867823659626 5.210158783797058;;; 5.540145179990062 5.337833251763919 … 4.75873580869719 5.337818959864618; 5.337828778541401 5.139572985127279 … 4.579407372292001 5.139561750005502; … ; 4.75875195852688 4.579424758762151 … 4.084330487578225 4.57941714090896; 5.337827802136033 5.139573585458667 … 4.579408278575911 5.1395603353885235;;; 5.246365308857779 5.103600393926518 … 4.634180264596997 5.103582682176755; 5.10359558748491 4.95169714264118 … 4.475656655804162 4.951686581446804; … ; 4.634201384521235 4.475678265780408 … 4.016013554717782 4.47566589079798; 5.103594720392289 4.95170131237549 … 4.475654446273363 4.9516821022571555;;; … ;;; 4.914210175445375 4.809662156096792 … 4.41513172976843 4.8096546573154; 4.809658426813823 4.6884301486121265 … 4.272425983878614 4.688412744409636; … ; 4.4151572262824095 4.272451638911064 … 3.844074738701726 4.272455426266389; 4.809668654715433 4.688428668758675 … 4.272441602624683 4.6884311733427575;;; 5.246326879921762 5.103558466337113 … 4.634153441409875 5.103550410576175; 5.103550824917757 4.951656359414153 … 4.475622931714794 4.951643936289698; … ; 4.634179511200586 4.475651409825283 … 4.015995795005818 4.475648758510944; 5.103565604011092 4.951664334043086 … 4.475635151028711 4.951661007076617;;; 5.540120601331314 5.337805961494337 … 4.758722043371984 5.3378002035662195; 5.337799542859865 5.139543683045521 … 4.579391060840653 5.139537839276076; … ; 4.758739313628369 4.579411014287302 … 4.084319071737379 4.579405945907859; 5.337810086222061 5.139552497777324 … 4.579396889306741 5.139547096034745]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-1.00744762880452 -0.9756543528619501 … -0.8483793233940399 -0.9756574450694397; -0.9756619168922052 -0.9300246508547013 … -0.847370435898023 -0.9300295422369292; … ; -0.8483766092959721 -0.8473432710640529 … -0.6666943842824304 -0.8473452591571606; -0.9756554193413898 -0.930026983722284 … -0.8473612711095564 -0.930029830046595;;; -0.9897868769370318 -0.954433508696695 … -0.9007594756616102 -0.9544266788998964; -0.9544366068575227 -0.9324800705882629 … -0.8786353138084249 -0.9324714181334025; … ; -0.90077556478335 -0.8786455532227058 … -0.7911861008430099 -0.8786448871360714; -0.954436531162207 -0.9324801503131014 … -0.8786398791187655 -0.9324725611036928;;; -0.7545077202688871 -0.8566523979275708 … -0.9145044613359147 -0.8566326072716637; -0.8566532405298145 -0.8895437533400256 … -0.9072337385712528 -0.8895378769696214; … ; -0.9145306979561272 -0.9072533363171005 … -0.8648041128467043 -0.907247118619631; -0.8566612931197195 -0.8895549366218442 … -0.907233647257889 -0.8895379558321356;;; … ;;; -0.6144480139690852 -0.8437515797376592 … -0.9686164016551271 -0.8437174414546686; -0.843751794928415 -0.9187393540311953 … -0.9583250440331763 -0.9186727491706825; … ; -0.9686565621173656 -0.9583588450859714 … -0.9352070711985927 -0.9583764858691678; -0.8437621568910221 -0.9186970878222311 … -0.9583528479785243 -0.9187260654295291;;; -0.7545039110555825 -0.8566493762796697 … -0.91449918641099 -0.8566285415016202; -0.8566454204837195 -0.8895546365173692 … -0.90722196214132 -0.8895178164212653; … ; -0.9145309037573606 -0.9072458897558514 … -0.8648036266163256 -0.9072550005390364; -0.8566607186953991 -0.8895395982264758 … -0.9072407136501686 -0.889550302689256;;; -0.9897846405636724 -0.9544297294267512 … -0.9007642740618901 -0.9544277965384156; -0.9544314672249709 -0.9324753211902953 … -0.878634838727855 -0.932469104834701; … ; -0.9007706798543789 -0.8786484854430961 … -0.7911743293933927 -0.8786464733751134; -0.9544353193457855 -0.9324781119340771 … -0.8786373042793828 -0.9324779000925889]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-3.1946272168949696 -2.81380864752283 … -2.0350550355413635 -2.813819334243507; -2.813820506821073 -2.501611297606856 … -1.8911673102833093 -2.501622282081125; … ; -2.0350402983667237 -1.8911261948743276 … -1.4015655584422602 -1.8911335114253511; -2.813810947115993 -2.5016100606197025 … -1.891156118717448 -2.5016204940486135;;; -4.3490761027216935 -3.704264620963363 … -2.515014003374877 -3.7042720830658653; -3.704272192346709 -3.2106688889963295 … -2.256525762499046 -3.2106714716632463; … ; -2.5150139426669247 -2.2565186154431762 … -1.6908069172604951 -2.2565255672097346; -3.704273093056761 -3.21066836838978 … -2.2565294215254768 -3.210674029250515;;; -12.702607192468914 -7.968067840030477 … -3.5404717302065216 -7.968065761124331; -7.968073489074331 -5.683337885458134 … -3.07308552332434 -5.683342570282106; … ; -3.5404768469024943 -3.0730835110939427 … -2.139564021190479 -3.0730896683789015; -7.968082408756857 -5.683344899005643 … -3.0730876415417754 -5.683347128334269;;; … ;;; -28.841290353068732 -14.824332600384679 … -4.219416075815757 -14.824305960883075; -14.824336544858404 -8.859761232838714 … -3.60884641666609 -8.859712032180692; … ; -4.219430739764015 -3.6088545626864352 … -2.4254452049947135 -3.6088684161143063; -14.8243366789194 -8.859720446483202 … -3.6088586018653688 -8.859746919506417;;; -12.702641812191628 -7.968106745971979 … -3.540493278468718 -7.968093966954868; -7.968110431595387 -5.683389551862504 … -3.073107470983776 -5.683365154890856; … ; -3.5404989260243767 -3.0731029204878175 … -2.139581294672064 -3.0731146825853424; -7.968110950713731 -5.68336653894268 … -3.073114003178707 -5.683380570371929;;; -4.349098445007084 -3.7042881319630014 … -2.515032567100362 -3.7042919570027832; -3.704296288395693 -3.2106934416801187 … -2.2565415988698243 -3.2106930690939697; … ; -2.5150217026364645 -2.2565352921384156 … -1.690806561651724 -2.256538348449877; -3.7042895971543137 -3.2106874176920983 … -2.2565382359552646 -3.2106926075931894]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [5.6607954619145024 5.430274145544803 … 4.799756461332167 5.430266551031614; 5.430269850276814 5.210162801046922 … 4.610865796882231 5.210156707954881; … ; 4.799768484408737 4.6108797474572425 … 4.0999959770030525 4.610874418999327; 5.430272912431079 5.210166370901658 … 4.610867823659626 5.210158783797058;;; 5.540145179990062 5.337833251763919 … 4.75873580869719 5.337818959864618; 5.337828778541401 5.139572985127279 … 4.579407372292001 5.139561750005502; … ; 4.75875195852688 4.579424758762151 … 4.084330487578225 4.57941714090896; 5.337827802136033 5.139573585458667 … 4.579408278575911 5.1395603353885235;;; 5.246365308857779 5.103600393926518 … 4.634180264596997 5.103582682176755; 5.10359558748491 4.95169714264118 … 4.475656655804162 4.951686581446804; … ; 4.634201384521235 4.475678265780408 … 4.016013554717782 4.47566589079798; 5.103594720392289 4.95170131237549 … 4.475654446273363 4.9516821022571555;;; … ;;; 4.914210175445375 4.809662156096792 … 4.41513172976843 4.8096546573154; 4.809658426813823 4.6884301486121265 … 4.272425983878614 4.688412744409636; … ; 4.4151572262824095 4.272451638911064 … 3.844074738701726 4.272455426266389; 4.809668654715433 4.688428668758675 … 4.272441602624683 4.6884311733427575;;; 5.246326879921762 5.103558466337113 … 4.634153441409875 5.103550410576175; 5.103550824917757 4.951656359414153 … 4.475622931714794 4.951643936289698; … ; 4.634179511200586 4.475651409825283 … 4.015995795005818 4.475648758510944; 5.103565604011092 4.951664334043086 … 4.475635151028711 4.951661007076617;;; 5.540120601331314 5.337805961494337 … 4.758722043371984 5.3378002035662195; 5.337799542859865 5.139543683045521 … 4.579391060840653 5.139537839276076; … ; 4.758739313628369 4.579411014287302 … 4.084319071737379 4.579405945907859; 5.337810086222061 5.139552497777324 … 4.579396889306741 5.139547096034745]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-1.0126195830662197 -0.9780322830494583 … -0.9030250307995255 -0.9780306191958543; -0.9780283813612867 -0.9436380437834928 … -0.843188663852719 -0.9436375439563811; … ; -0.903022801298142 -0.8432015053003797 … -0.7668323848608787 -0.8431978110038707; -0.9780280627873493 -0.9436426293124063 … -0.8431869279630746 -0.9436385095561223;;; -1.002494885373963 -0.9662956723386761 … -0.8943382260727473 -0.966292517622734; -0.966291209388975 -0.9381313725969259 … -0.865401447066182 -0.9381298879562402; … ; -0.8943333779114477 -0.865399713088506 … -0.7841997345597784 -0.8653952527356613; -0.9662874852363528 -0.9381294579216427 … -0.8653948550742319 -0.938124037347243;;; -0.8147207725112466 -0.8330466569503853 … -0.8252588124070147 -0.8330388123207392; -0.8330385887473697 -0.8331430332360491 … -0.815979099126357 -0.8331378467978879; … ; -0.8252444799541844 -0.8159759997353389 … -0.7766649786141505 -0.8159677552255777; -0.8330262720462243 -0.8331350913563184 … -0.8159715828626701 -0.8331251098341075;;; … ;;; -0.6908591056232611 -0.786449301114121 … -0.8338011139735627 -0.7864781369347733; -0.786441341116273 -0.812157386795065 … -0.8255523966871127 -0.8122162280490888; … ; -0.8337732176508383 -0.8255313906185182 … -0.8095255784633004 -0.8255155071859758; -0.7864488703194142 -0.8122040498769271 … -0.8255325724072102 -0.8121802546063417;;; -0.8147130247264575 -0.8330271405663998 … -0.8252596858256886 -0.8330426044505544; -0.8330170109117725 -0.8331066471772929 … -0.815979681208778 -0.833136942370606; … ; -0.8252458785830814 -0.8159774588712707 … -0.7766653783240123 -0.8159678170035155; -0.8330264425794495 -0.8331336094173154 … -0.8159710989866433 -0.8331249712263782;;; -1.0024876224993369 -0.9662860800699852 … -0.894334758872399 -0.966288814081732; -0.966278422825225 -0.9381148071843695 … -0.8653966021979768 -0.9381223673664039; … ; -0.8943350054260429 -0.8653960725321346 … -0.7842018781838477 -0.8653951012048597; -0.966282334002706 -0.9381211658030255 … -0.8653958276471562 -0.9381215271556169]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-3.1997991711566693 -2.8161865777103383 … -2.089700742946849 -2.8161925083699213; -2.816186971290154 -2.5152246905356477 … -1.8869855382380054 -2.5152302838005767; … ; -2.089686490368894 -1.8869844291106546 … -1.5017035590207084 -1.8869860632720612; -2.8161835905619523 -2.515225706209825 … -1.8869817755709661 -2.5152291735581405;;; -4.361784111158625 -3.7161267846053443 … -2.508592753786014 -3.716137921788703; -3.716126794878161 -3.216320191004993 … -2.2432918957568035 -3.2163299414860838; … ; -2.508571755795022 -2.2432727753089767 … -1.6838205509772637 -2.2432759328093246; -3.716124047130907 -3.2163176759983214 … -2.2432843974809433 -3.2163255054940647;;; -12.762820244711275 -7.9444620990532915 … -3.4512260812776216 -7.944471966173406; -7.9444588372918865 -5.626937165354158 … -2.9818308838794443 -5.626942540110372; … ; -3.4511906289005516 -2.9818061745121813 … -2.0514248869579252 -2.9818103049848483; -7.944447387683361 -5.626925053740117 … -2.981825577146557 -5.62693428233624;;; … ;;; -28.91770144472291 -14.76703032176114 … -4.084600788134193 -14.76706665636318; -14.767026091046262 -8.753179265602585 … -3.476073769320026 -8.753255511059098; … ; -4.084547395297489 -3.476027108218982 … -2.2997637122594217 -3.476007437431114; -14.767023392347792 -8.753227408537898 … -3.476038326294055 -8.75320110868323;;; -12.762850925862502 -7.944484510258709 … -3.4512537778834167 -7.944508029903802; -7.944482022023441 -5.626941562522428 … -2.9818651900512334 -5.626984280840197; … ; -3.4512139008500977 -2.981834489603237 … -2.0514430463797506 -2.9818274990498215; -7.944476674597782 -5.62696055013352 … -2.9818443885151815 -5.626955238909051;;; -4.3618014269427485 -3.7161444826062353 … -2.5086030519108706 -3.7161529745460995; -3.716143243995947 -3.216332927674193 … -2.243303362339946 -3.2163463316256724; … ; -2.508586028208129 -2.243282879227454 … -1.683834110442179 -2.2432869762796237; -3.7161366118112342 -3.2163304715610463 … -2.2432967593230377 -3.216336234656217]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.939612026458718), converged = true, occupation_threshold = 1.0e-6, ρ = [0.4340812763995402 0.38356110031644663 … 0.25503950031744804 0.38356145047509943; 0.38356163124529885 0.3371753570251668 … 0.22216220532403924 0.33717642154968447; … ; 0.2550379113912461 0.22216011004438904 … 0.14467314664956293 0.2221602111485537; 0.38356056639964364 0.33717494239358103 … 0.2221609019999394 0.3371749713653289;;; 0.3632330273790075 0.3478825821910123 … 0.27205293683387877 0.34787470090253814; 0.34788195509710196 0.32629503396689685 … 0.24601340679725142 0.32628906564649696; … ; 0.27206431271359666 0.24602292290004105 … 0.17361972819215338 0.24602223944095059; 0.34788194261889505 0.3262954116338774 … 0.2460161142821456 0.32628968726285423;;; 0.21379545413529677 0.27336243416225886 … 0.31040316880428 0.2733480291067588; 0.2733614296403853 0.3047877024296429 … 0.29922890792608836 0.3047814640734927; … ; 0.3104322548231374 0.2992534926722366 … 0.23812566033423713 0.2992459692234264; 0.27336639484822345 0.3047973815415078 … 0.29923052809475204 0.3047817000759784;;; … ;;; 0.14403858885554097 0.24617259408825762 … 0.3459766541292163 0.2461581668658955; 0.24617638585478302 0.30758445782076227 … 0.342764371451096 0.3075411897608423; … ; 0.3460183229887634 0.34279784226072013 … 0.2859690137547167 0.34281771853801185; 0.2461828809282339 0.30755891201106844 … 0.34279525857290355 0.30757622117154926;;; 0.21379237830809972 0.2733584708977229 … 0.3103996853137607 0.2733449895033034; 0.2733554131719704 0.3047937136446696 … 0.29921668829577797 0.3047654822856437; … ; 0.3104326821760086 0.29924598628139326 … 0.23812630450283864 0.299251717484453; 0.27336654138697547 0.3047861497024405 … 0.29923486149845224 0.30479026268171205;;; 0.3632302052208266 0.34787807306713353 … 0.27205443133336116 0.34787487714854975; 0.34787610500838273 0.32629084234887684 … 0.2460136720452943 0.3262848779808884; … ; 0.27206350097840376 0.2460218341780369 … 0.17361601768961143 0.24602098682768958; 0.3478815139083309 0.3262918486731208 … 0.24601655847343373 0.3262918813786474;;;; 0.4384522928624075 0.3878805966666112 … 0.2592736633429652 0.3878804533051279; 0.3878795158772315 0.34145783340577956 … 0.22632886045578868 0.34145994737641294; … ; 0.2592718535934988 0.22632761975559645 … 0.1485555308159442 0.22632622429804836; 0.38787916280444495 0.341459647988914 … 0.22632701255806087 0.34145736736350984;;; 0.36540338767814023 0.3373375759326351 … 0.24776491427101355 0.33733235581030996; 0.33733592023902276 0.30786863360358135 … 0.2214445415861471 0.3078657473237985; … ; 0.2477614591852782 0.22144199090947528 … 0.1536118573186095 0.22143931847962128; 0.33733042602475233 0.3078652739641586 … 0.22144107096833168 0.3078597089944855;;; 0.21256078702052594 0.23106739128884785 … 0.22252680350693405 0.23106021246175573; 0.2310644215086022 0.23671457113396177 … 0.20995493286605516 0.23671063577913704; … ; 0.22251934086057693 0.20994950624261952 … 0.16284684542144445 0.20994543066817006; 0.23105645343936476 0.2367096184138787 … 0.20994957747869114 0.23670192553621652;;; … ;;; 0.1422577120933884 0.18263544214237673 … 0.2118949766061043 0.1826440531379884; 0.18263150525248445 0.204661704908855 … 0.2054788040427876 0.2046818134589916; … ; 0.21188127085726433 0.20546886190487618 … 0.16730617685671553 0.2054597183542167; 0.1826368373505858 0.2046788091846184 … 0.20546752920178482 0.2046732236973043;;; 0.21255396132111026 0.23105179305455598 … 0.22252809935726695 0.23106050245914847; 0.2310486156797014 0.2366895252151925 … 0.20995557882340946 0.23670632370319145; … ; 0.22251952484685225 0.20994965410729324 … 0.16284504005081793 0.20994439024055034; 0.23105591023255215 0.23670493695700814 … 0.2099492502626357 0.23670275837431984;;; 0.3653938059168611 0.33732337942698204 … 0.24776412785478272 0.3373287501417577; 0.33732167788456485 0.3078498730616129 … 0.22144298326887282 0.307859398428212; … ; 0.24776050993514936 0.2214405898872447 … 0.15361128597225235 0.2214386171670034; 0.3373265261814023 0.30785884622268017 … 0.22144051065747586 0.30785827891075906], α = 0.8, eigenvalues = [[-1.3346581673543394, -0.7239642058548301, -0.4458677119409812, -0.4458646511318941, -0.4068865157259042, -0.05973964552762249, -0.05973464885709753, 0.015297811429289493, 0.1951193758835484, 0.20813241062911003, 0.24259518771292965], [-1.301456895912837, -0.6623266691827099, -0.39036694431319124, -0.39035999907091484, -0.37422141064702885, 0.014472877002269222, 0.014482271398402819, 0.02741517915281494, 0.2072698156465396, 0.2138716349224704, 0.261974625097943]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9947930588453786, 0.9947877597432533, 0.003033162456393078, 3.2561338784272183e-54, 1.3366043529986368e-60, 2.7646465729656716e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.003617353709435821, 0.0036101686551420773, 0.0001584965903971837, 3.636589697693344e-60, 1.5589045014620364e-63, 6.386502881247542e-91]], εF = -0.023510679016916405, n_bands_converge = 8, n_iter = 7, ψ = Matrix{ComplexF64}[[-0.18853319039696162 + 0.18613842146276305im -1.241237840726901e-6 - 1.5545787110834345e-6im … -0.058012187160776704 + 0.055189995665441624im 2.870146614168005e-6 + 1.8715048027358938e-6im; -0.14240780928986826 + 0.14060340859086265im 8.632973068544894e-7 - 8.284620417093797e-6im … -0.06971003670022026 + 0.06888194916205465im 0.05706215554031772 + 0.10463265566329474im; … ; -0.04332008844287812 + 0.04276957100504823im 0.04988568498492745 - 0.04008707778423171im … -0.012960452382946745 + 0.012430934335816232im -0.01867413739850434 + 0.022284689572899773im; -0.07949175263065687 + 0.07848363136109104im 0.10730049566883618 - 0.08621918818985534im … -0.0114016067964858 + 0.010918434549649752im -0.04626757535183626 + 0.04508496287238348im], [0.021927283421681747 - 0.2604929462821845im -3.097835182299098e-6 - 4.3630021715289813e-7im … -0.029602461848996245 - 0.07902755233162824im 6.072347627245794e-6 + 7.66271377855466e-6im; 0.016553251413133366 - 0.19662960024388476im 1.137187290194757e-5 + 4.10943371326169e-6im … -0.03364274770026633 - 0.08757690952804942im -0.1165300104614187 - 0.04370669844151188im; … ; 0.00510558476591097 - 0.060651163387571504im 0.009235536861479503 - 0.06393112576432379im … -0.006090419062545006 - 0.016190955300562523im -0.0001638954138887079 - 0.0274120971848491im; 0.009348025163050434 - 0.11105151744580388im 0.01978817359663811 - 0.13698654298551904im … -0.005377217610262052 - 0.014330642287152747im 0.007265902266669618 - 0.06523616798106063im]], diagonalization = @NamedTuple{λ::Vector{Vector{Float64}}, X::Vector{Matrix{ComplexF64}}, residual_norms::Vector{Vector{Float64}}, n_iter::Vector{Int64}, converged::Bool, n_matvec::Int64}[(λ = [[-1.3346581673543394, -0.7239642058548301, -0.4458677119409812, -0.4458646511318941, -0.4068865157259042, -0.05973964552762249, -0.05973464885709753, 0.015297811429289493, 0.1951193758835484, 0.20813241062911003, 0.24259518771292965], [-1.301456895912837, -0.6623266691827099, -0.39036694431319124, -0.39035999907091484, -0.37422141064702885, 0.014472877002269222, 0.014482271398402819, 0.02741517915281494, 0.2072698156465396, 0.2138716349224704, 0.261974625097943]], X = [[-0.18853319039696162 + 0.18613842146276305im -1.241237840726901e-6 - 1.5545787110834345e-6im … -0.058012187160776704 + 0.055189995665441624im 2.870146614168005e-6 + 1.8715048027358938e-6im; -0.14240780928986826 + 0.14060340859086265im 8.632973068544894e-7 - 8.284620417093797e-6im … -0.06971003670022026 + 0.06888194916205465im 0.05706215554031772 + 0.10463265566329474im; … ; -0.04332008844287812 + 0.04276957100504823im 0.04988568498492745 - 0.04008707778423171im … -0.012960452382946745 + 0.012430934335816232im -0.01867413739850434 + 0.022284689572899773im; -0.07949175263065687 + 0.07848363136109104im 0.10730049566883618 - 0.08621918818985534im … -0.0114016067964858 + 0.010918434549649752im -0.04626757535183626 + 0.04508496287238348im], [0.021927283421681747 - 0.2604929462821845im -3.097835182299098e-6 - 4.3630021715289813e-7im … -0.029602461848996245 - 0.07902755233162824im 6.072347627245794e-6 + 7.66271377855466e-6im; 0.016553251413133366 - 0.19662960024388476im 1.137187290194757e-5 + 4.10943371326169e-6im … -0.03364274770026633 - 0.08757690952804942im -0.1165300104614187 - 0.04370669844151188im; … ; 0.00510558476591097 - 0.060651163387571504im 0.009235536861479503 - 0.06393112576432379im … -0.006090419062545006 - 0.016190955300562523im -0.0001638954138887079 - 0.0274120971848491im; 0.009348025163050434 - 0.11105151744580388im 0.01978817359663811 - 0.13698654298551904im … -0.005377217610262052 - 0.014330642287152747im 0.007265902266669618 - 0.06523616798106063im]], residual_norms = [[0.0002109570868361856, 0.0007942503090915843, 0.00022503497056749108, 0.00021966225051800136, 0.00029019142916526726, 0.00027033021895703143, 0.0002680070380215159, 0.00041782018028442656, 0.000416266049633007, 0.0010277308082402461, 0.0023857832149810176], [0.0002358954504126215, 0.0005591315005458209, 0.0004289191925329408, 0.0004280419024242384, 0.0002458396266831769, 0.0010620408425235663, 0.0010309476660093624, 0.0004476775944760372, 0.0003869068533495484, 0.0020124592909213424, 0.0032298798361870165]], n_iter = [1, 1], converged = 1, n_matvec = 44)], stage = :finalize, history_Δρ = [0.7346389548895829, 0.15051152766173936, 0.07265787419768047, 0.06507723886555304, 0.0610109334434322, 0.01293756106228851, 0.000623856118217088], history_Etot = [-27.650397096790407, -28.923018376788512, -28.931072220024006, -28.937701686147985, -28.939433420430035, -28.93958924272495, -28.939612026458718], runtime_ns = 0x0000000028980e70, algorithm = "SCF")

    Notice that the ρ argument is now passed to kwargsscfcheckpoints instead. If we run in the same folder the SCF again (here using a tighter tolerance), the calculation just continues.

    checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))
    +scfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)
    (ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [5.659571635269909 5.429109960643782 … 4.798790424772928 5.429115070912149; 5.429113418241269 5.2090649659907795 … 4.609952555778232 5.209067995148189; … ; 4.798785658731766 4.609946105412797 … 4.099219158112927 4.609950786984762; 5.429112081391573 5.209062390287874 … 4.60995318088114 5.209068098733201;;; 5.5388890533461215 5.3366265496285 … 4.757723105410975 5.336628737282047; 5.3366240878807725 5.138422147304777 … 4.578442837154806 5.1384216327031496; … ; 4.757726824498019 4.578447510819708 … 4.083516371456752 4.578452072278829; 5.336632074432128 5.138426809101649 … 4.578450807853697 5.138431060545222;;; 5.245099587916832 5.102363639007508 … 4.633112255442075 5.102362824447733; 5.102357650932688 4.950502197508225 … 4.474631023217716 4.9504983108915575; … ; 4.633118808893631 4.474640395447457 … 4.015150311411811 4.474644643885676; 5.102368838849399 4.950508963893225 … 4.47464251715071 4.950511563060716;;; … ;;; 4.9130978658882904 4.808568293424805 … 4.414178850156551 4.808574533581457; 4.808574539719402 4.687369114689586 … 4.271527974815774 4.687375337359943; … ; 4.414163085565004 4.271508812749238 … 3.8432855314996113 4.271512092686963; 4.80856548542823 4.687361309898208 … 4.271520067583874 4.687366347029366;;; 5.245179265551133 5.102437103571598 … 4.633185991317808 5.102444467724505; 5.102447405151256 4.95058277220968 … 4.474711213106362 4.9505893947099855; … ; 4.633166529955644 4.474687115775146 … 4.015191936783174 4.474691277361929; 5.102431930433372 4.950569127708537 … 4.4747006958321345 4.950575443266809;;; 5.538939732377083 5.336672553043613 … 4.757767252697999 5.336679534829069; 5.336681451587202 5.138473083225729 … 4.578491242112596 5.138478621769425; … ; 4.757752695954941 4.578472731763227 … 4.083538864982861 4.578477352073054; 5.33666979254771 5.138462245122864 … 4.578484274524064 5.138468772633425]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-1.0076715786715773 -0.9757399098601619 … -0.8487262154974065 -0.9757394101111444; -0.975735526739213 -0.9293825931000469 … -0.8473274192925453 -0.929382770094042; … ; -0.8487365619114188 -0.847330059970529 … -0.6672381348143629 -0.8473304267719385; -0.9757330118510338 -0.9293847972691349 … -0.8473286254791859 -0.9293889948278355;;; -0.9898358350424429 -0.9544027543696294 … -0.9009375792492678 -0.9544025677332667; -0.9543984964434593 -0.9322314449243789 … -0.878503685058895 -0.9322294270672793; … ; -0.9009474769224335 -0.8785205444194096 … -0.7914629066355384 -0.8785205415011242; -0.9544100886342254 -0.9322403062787757 … -0.8785138169269109 -0.9322413545104463;;; -0.7547027920733199 -0.8566199649139482 … -0.9144832415201897 -0.8566138757289952; -0.8566075083125086 -0.8894533988466645 … -0.9071447818001468 -0.8894452371362794; … ; -0.9144929503125164 -0.9071582977661931 … -0.8647774213039329 -0.9071586675927908; -0.8566289189251276 -0.8894633131212593 … -0.9071549261317409 -0.889462375401123;;; … ;;; -0.6145845805119189 -0.8437446245437387 … -0.9685976466319784 -0.8437450951206156; -0.8437496619743102 -0.9186121061274659 … -0.9582381392337905 -0.9186060054592373; … ; -0.9685933836420452 -0.9582318242995315 … -0.9351710663429885 -0.9582342522309805; -0.8437373399135573 -0.9186004922004148 … -0.9582374094993201 -0.9186070306770601;;; -0.7547311800562244 -0.8566342850331827 … -0.9144943395953125 -0.8566366389191676; -0.8566486366031059 -0.8894804622896693 … -0.9071630624893816 -0.889476028585826; … ; -0.9144837755168977 -0.9071505195857915 … -0.8647718953244973 -0.9071536849879579; -0.8566197007083508 -0.8894564569188376 … -0.907158605941777 -0.8894635775337529;;; -0.989852399844341 -0.9544199814853929 … -0.9009504517468638 -0.9544215066558529; -0.9544240854798992 -0.9322569768697778 … -0.8785243366988803 -0.9322576393151943; … ; -0.9009404658933303 -0.8785165632974964 … -0.7914564381722701 -0.8785176793464153; -0.9544145746484606 -0.9322456550567357 … -0.8785199074619553 -0.9322509588483338]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-3.1960749934066204 -2.8150583894220627 … -2.0363679642039685 -2.815052779404676; -2.8150505487036255 -2.502067074908344 … -1.8920375347818303 -2.50206422274493; … ; -2.0363830766591424 -1.8920466258252495 … -1.4028861278643183 -1.8920423110546936; -2.8150493706651423 -2.502071854780337 … -1.8920381158655628 -2.5020703438937106;;; -4.3503811874710445 -3.7054405687717167 … -2.516204810248749 -3.7054381944818067; -3.705438772593274 -3.2115711011549477 … -2.2573586688867113 -3.211569597899475; … ; -2.516210988834869 -2.2573708545823234 … -1.691897839174497 -2.2573662902049194; -3.705442378232685 -3.2115753007124725 … -2.257360830055836 -3.2115720975005697;;; -12.704067985214294 -7.969272161935865 … -3.541518519545719 -7.9692668873106856; -7.969265693409247 -5.684442476097728 … -3.07402219913968 -5.684438201004011; … ; -3.541521674886488 -3.074026342875986 … -2.1404005729536784 -3.074022464264365; -7.969275916105155 -5.6844456239873224 … -3.07402084953828 -5.684442087099695;;; … ;;; -28.842539229168654 -14.825419507862744 … -4.2203502004044875 -14.825413738282966; -14.82541829899872 -8.860695018857525 … -3.6096575209295443 -8.86068269551894; … ; -4.220361702006101 -3.6096703680618205 … -2.426198407341224 -3.6096695160555448; -14.82541503122914 -8.860691209721853 … -3.6096646984269736 -8.86069271106734;;; -12.704016695562897 -7.969213017491008 … -3.541455881745107 -7.969208007224085; -7.969217067481274 -5.684388964839278 … -3.0739602899402687 -5.684377908635129; … ; -3.541464779028856 -3.0739718443678945 … -2.140353421602879 -3.0739708481832793; -7.969203606304403 -5.684378603969591 … -3.073966350666892 -5.684379409026235;;; -4.350347073241983 -3.7054117924723675 … -2.5161735354593207 -3.705406335857371; -3.7054069979232844 -3.2115456971793934 … -2.257330915568906 -3.2115408210811136; … ; -2.5161781063488444 -2.257341652516891 … -1.6918688771851196 -2.2573381482559842; -3.70540914613134 -3.2115452134692175 … -2.2573334539205137 -3.211543989750254]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [5.659571635269909 5.429109960643782 … 4.798790424772928 5.429115070912149; 5.429113418241269 5.2090649659907795 … 4.609952555778232 5.209067995148189; … ; 4.798785658731766 4.609946105412797 … 4.099219158112927 4.609950786984762; 5.429112081391573 5.209062390287874 … 4.60995318088114 5.209068098733201;;; 5.5388890533461215 5.3366265496285 … 4.757723105410975 5.336628737282047; 5.3366240878807725 5.138422147304777 … 4.578442837154806 5.1384216327031496; … ; 4.757726824498019 4.578447510819708 … 4.083516371456752 4.578452072278829; 5.336632074432128 5.138426809101649 … 4.578450807853697 5.138431060545222;;; 5.245099587916832 5.102363639007508 … 4.633112255442075 5.102362824447733; 5.102357650932688 4.950502197508225 … 4.474631023217716 4.9504983108915575; … ; 4.633118808893631 4.474640395447457 … 4.015150311411811 4.474644643885676; 5.102368838849399 4.950508963893225 … 4.47464251715071 4.950511563060716;;; … ;;; 4.9130978658882904 4.808568293424805 … 4.414178850156551 4.808574533581457; 4.808574539719402 4.687369114689586 … 4.271527974815774 4.687375337359943; … ; 4.414163085565004 4.271508812749238 … 3.8432855314996113 4.271512092686963; 4.80856548542823 4.687361309898208 … 4.271520067583874 4.687366347029366;;; 5.245179265551133 5.102437103571598 … 4.633185991317808 5.102444467724505; 5.102447405151256 4.95058277220968 … 4.474711213106362 4.9505893947099855; … ; 4.633166529955644 4.474687115775146 … 4.015191936783174 4.474691277361929; 5.102431930433372 4.950569127708537 … 4.4747006958321345 4.950575443266809;;; 5.538939732377083 5.336672553043613 … 4.757767252697999 5.336679534829069; 5.336681451587202 5.138473083225729 … 4.578491242112596 5.138478621769425; … ; 4.757752695954941 4.578472731763227 … 4.083538864982861 4.578477352073054; 5.33666979254771 5.138462245122864 … 4.578484274524064 5.138468772633425]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-1.012540585352736 -0.977937939713659 … -0.9029802868850898 -0.9779403345007108; -0.9779385490803053 -0.943583354360013 … -0.8431693605007722 -0.9435849876172294; … ; -0.902957259349165 -0.8431855439144784 … -0.7667774385092894 -0.8431872027550279; -0.9779386398666609 -0.9435837274031648 … -0.8431681251366379 -0.9435833457832278;;; -1.002498260310474 -0.9662078306535878 … -0.8942949275776139 -0.9662082710447745; -0.9662084510596157 -0.9379904118147968 … -0.8653511222587447 -0.9379908150333743; … ; -0.8942932427262585 -0.865347761088426 … -0.7841726381321412 -0.8653492152689053; -0.9662066717393806 -0.9379882552478602 … -0.8653515760048567 -0.9379898639785135;;; -0.8145057338862987 -0.8328657731489516 … -0.8251501099209564 -0.832866861987788; -0.83286699570772 -0.832936265805215 … -0.8158382263609919 -0.8329360979591295; … ; -0.82514731604299 -0.8158352264158635 … -0.7766024016745381 -0.8158372745224409; -0.8328632685611699 -0.8329328952433329 … -0.8158389063037564 -0.8329349655216444;;; … ;;; -0.690598978655032 -0.7862332431916635 … -0.8336421863267018 -0.7862365124781626; -0.7862308547561273 -0.8119769410212752 … -0.825388084069457 -0.8119903422180262; … ; -0.8336352226797371 -0.8253825169198948 … -0.8094327049202094 -0.8253781565710515; -0.7862343383146749 -0.8119872585090316 … -0.8253814117701292 -0.8119807235744926;;; -0.8145046686679458 -0.8328715940403213 … -0.8251649175688593 -0.8328752411690393; -0.8328693098616946 -0.8329391012405511 … -0.8158558772825343 -0.8329485160141419; … ; -0.8251606762831005 -0.8158513514114075 … -0.7766124285797651 -0.8158484911859506; -0.8328740410276595 -0.8329481827253269 … -0.8158508887729409 -0.8329449823022113;;; -1.0025003725402228 -0.966210158138857 … -0.8943036662830933 -0.966212383601602; -0.9662113845385766 -0.937993406628273 … -0.865359819817615 -0.9379961576881526; … ; -0.894299801697915 -0.8653554740766186 … -0.7841791023205634 -0.865355769500013; -0.966210523265904 -0.937993895239851 … -0.8653574426044477 -0.9379937679970003]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-3.200944000087779 -2.81725641927556 … -2.0906220355916516 -2.8172537037942424; -2.8172535710447177 -2.5162678361683097 … -1.8878794759900572 -2.516266440268117; … ; -2.0906037740968886 -1.887902109769199 … -1.5024254315592447 -1.8878990870377828; -2.8172549986807693 -2.516270784914367 … -1.8878776155230148 -2.5162646948491028;;; -4.363043612739076 -3.7172456450556752 … -2.509562158577095 -3.7172438977933147; -3.7172487272094306 -3.2173300680453654 … -2.244206106086561 -3.21733098586557; … ; -2.509556754638694 -2.24419807125134 … -1.6846075706711 -2.2441949639727; -3.71723896133784 -3.2173232496815567 … -2.2441985891337817 -3.217320606968637;;; -12.763870927027272 -7.945517970170869 … -3.4521853879464857 -7.945519873569478; -7.9455251808044585 -5.627925343056279 … -2.982715643700525 -5.627929061826861; … ; -3.4521760406169615 -2.982703271525657 … -2.0522255533242837 -2.982701071194015; -7.945510265741197 -5.627915206109397 … -2.9827048297102956 -5.627914677220217;;; … ;;; -28.918553627311766 -14.767908126510669 … -4.085394740099211 -14.767905155640513; -14.767899491780536 -8.754059853751334 … -3.476807465765211 -8.75406703227773; … ; -4.085403541043792 -3.476821060682184 … -2.300460045918445 -3.4768134203956156; -14.767912029630256 -8.75407797603047 … -3.4768087006977826 -8.754066403964773;;; -12.763790184174619 -7.945450326498147 … -3.452126459718654 -7.945446609473957; -7.945437740739862 -5.62784760379016 … -2.9826531047334215 -5.627850396063445; … ; -3.452141679795059 -2.9826726761935105 … -2.0521939548581467 -2.9826656543812717; -7.945457946623712 -5.62787032977608 … -2.9826586334980556 -5.627860813794693;;; -4.362995045937866 -3.7172019691258313 … -2.5095267499955503 -3.71719721280312; -3.717194296981962 -3.2172821269378886 … -2.2441663986876406 -3.2172793394540715; … ; -2.509537442153429 -2.244180563296013 … -1.684591541333413 -2.2441762384095822; -3.717205094748783 -3.2172934536523323 … -2.244170989063006 -3.2172867988989204]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.939612789595976), converged = true, occupation_threshold = 1.0e-6, ρ = [0.4340009730999828 0.38349048792206986 … 0.2549990760677972 0.3834921370953912; 0.3834917345409029 0.3371164890074457 … 0.22212730296563415 0.337115328159514; … ; 0.25500138722164106 0.22212969142864677 … 0.14465993399360683 0.2221309932378846; 0.38349324957895814 0.3371159574435687 … 0.2221299128901411 0.3371185392170697;;; 0.36318032319271354 0.34781985670963655 … 0.2720049998303422 0.3478191602541161; 0.3478152619670397 0.32622731618354506 … 0.24596626019971055 0.3262241073333208; … ; 0.27201466937875773 0.24597761818870537 … 0.17359318175403293 0.245978403210819; 0.3478268503862664 0.32623509541061335 … 0.24597440744312027 0.32623605203813155;;; 0.2138143159180128 0.2733302617058305 … 0.31033600308049647 0.27332656984939585; 0.27332226175708807 0.30472307882353505 … 0.2991520754868817 0.3047170145288715; … ; 0.3103470466440549 0.29916632096573903 … 0.23806872493803707 0.299166666319729; 0.2733363902910564 0.30473269842102424 … 0.29916264707416157 0.3047318229878424;;; … ;;; 0.14404621170757528 0.24611659383114573 … 0.3458813758785258 0.24611744065762794; 0.2461193627441243 0.3074752324289095 … 0.34267721139833096 0.3074715965895106; … ; 0.34587423556276575 0.34266993477583374 … 0.2858672497955743 0.3426732573025629; 0.24611264114492595 0.30746544867485504 … 0.3426768220518055 0.3074694859124751;;; 0.21382976445962945 0.27334219468862986 … 0.3103501868714406 0.2733444419408687; 0.27335126021510797 0.3047471449126851 … 0.2991714827759214 0.30474488179768544; … ; 0.3103377358606354 0.29915758554982513 … 0.23806552345263765 0.29916067094409604; 0.2733340530419309 0.30472930906521967 … 0.29916625735167396 0.3047339544540833;;; 0.3632001744650804 0.3478355427815636 … 0.27201747187350395 0.34783809469204935; 0.3478428604879782 0.32624989624769773 … 0.24598178221723146 0.32624879221406206; … ; 0.272010206794166 0.24597330439508225 … 0.1735914324853293 0.245975484269379; 0.34783128542077724 0.3262377992390268 … 0.2459785653123194 0.3262417159036597;;;; 0.4383333031181176 0.3877797424248801 … 0.2592241637894135 0.38778179586999756; 0.38778075374068754 0.3413765466515244 … 0.22629063531200092 0.3413786688204771; … ; 0.25922178339536955 0.2262882689330048 … 0.14854327925127195 0.2262887771222638; 0.38777985520026836 0.3413762661900757 … 0.22628985765273812 0.3413774896020996;;; 0.36527919682127663 0.3372189841506778 … 0.24769060313746682 0.3372200990695206; 0.33721943667086907 0.307761910370912 … 0.2213799895125445 0.30776223292989474; … ; 0.2476887505548954 0.22137824666620287 … 0.1535800706018308 0.22137942362343557; 0.33721873833455107 0.3077607275766196 … 0.22138031033925032 0.3077622049381796;;; 0.21243834201188075 0.2309289446157391 … 0.22240874670724178 0.23092901256532744; 0.23092868979306158 0.2365754728893706 … 0.20984489697559505 0.23657405708982387; … ; 0.2224070852804485 0.2098434782135487 … 0.16277941875905724 0.20984527710323525; 0.230928154333825 0.23657344836230765 … 0.20984617454125945 0.23657502630873736;;; … ;;; 0.14215863723266636 0.18252111425342782 … 0.21177551276749088 0.1825232162311935; 0.18252109488890733 0.20455011574423482 … 0.20536748710058833 0.2045562223318821; … ; 0.2117708242574374 0.20536317303539503 … 0.16723768551825605 0.20536027393365214; 0.18252069794745499 0.20455385844293963 … 0.20536279245638073 0.20455174754385172;;; 0.21244306445794894 0.23093568832141007 … 0.22242123443840012 0.23093839403462904; 0.23093644799134982 0.23658166727870397 … 0.20985928481576266 0.23658726079918194; … ; 0.22241673625463737 0.20985495551232458 … 0.1627856506626917 0.20985320187922343; 0.2309355543467567 0.23658410888382142 … 0.20985548531330725 0.23658332896079326;;; 0.36528457266180625 0.3372246988982344 … 0.2476981950180095 0.3372273457597918; 0.33722584711650233 0.3077669859110939 … 0.2213882492764832 0.3077709443794334; … ; 0.24769480237458616 0.2213848819647534 … 0.15358376845908692 0.22138445078991456; 0.33722483309554835 0.3077678892371662 … 0.22138606134240704 0.30776840136642225], α = 0.8, eigenvalues = [[-1.3337928978260098, -0.7233312169119137, -0.44525884894035117, -0.44525773442813826, -0.40629075564412775, -0.059209131758696534, -0.05920757124992352, 0.015425979649566116, 0.195234755735637, 0.20823555256758575, 0.24236535913929103], [-1.3004907537408528, -0.6617353923571838, -0.3896996793984071, -0.38969517039716256, -0.3736426584429545, 0.015034043763826502, 0.015039324313306604, 0.028028534155278485, 0.20772904619167812, 0.2142778738269242, 0.2580040967312771]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9947372739805739, 0.9947356037748425, 0.003269745752100342, 4.84723146493621e-54, 2.0662084920134742e-60, 7.101309299856351e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.003554293543286886, 0.0035503165601898984, 0.0001527663890058587, 3.7171012253155747e-60, 1.698268285739875e-63, 3.5350501192749393e-88]], εF = -0.023032541029829087, n_bands_converge = 9, n_iter = 1, ψ = Matrix{ComplexF64}[[0.15250539319560363 - 0.21673904462366414im 2.399069147118555e-6 - 1.972952802738244e-6im … -0.07590372863504949 + 0.025334595197545186im -8.64955294386954e-6 + 3.3995328794820555e-6im; 0.11517827701997926 - 0.16369027071983042im 8.295095720604513e-7 - 1.4598471952781167e-6im … -0.09383220327132918 + 0.03173663133033844im -0.24401737322770736 - 0.3094122181565572im; … ; 0.03502581685387627 - 0.04977946083168386im -0.041530327928154094 - 0.04866824875425275im … -0.017094034303627062 + 0.005658872977776245im -0.034579636195227165 - 0.006389960378903389im; 0.06428335018188634 - 0.09136142994097235im -0.08935364274570315 - 0.10470864196448583im … -0.014975735453666627 + 0.004876176557385483im -0.06660144755530485 + 0.002374572789774817im], [0.23674957129601146 + 0.11105482463349776im 3.63394570481607e-6 + 3.1086852469907554e-6im … -0.08305841038904434 - 0.01539178153888513im 9.334770864486697e-6 - 5.951137103897814e-6im; 0.17869781905680057 + 0.08382348570115257im 1.8277785693905518e-6 + 2.062402033589303e-6im … -0.09372276184017204 - 0.017338750875529482im 0.3009661752952853 - 0.43774344158817297im; … ; 0.05509072098796381 + 0.02584117122588861im 0.04200711957244624 - 0.04907520640229016im … -0.016918860562775903 - 0.00313666107428781im 0.014736852832258073 - 0.03982742907284569im; 0.10088413297403094 + 0.047321046979011676im 0.09001434712048181 - 0.10516173128303666im … -0.014770412823948574 - 0.002741923155877172im 0.01710870024092006 - 0.0707170269000369im]], diagonalization = @NamedTuple{λ::Vector{Vector{Float64}}, X::Vector{Matrix{ComplexF64}}, residual_norms::Vector{Vector{Float64}}, n_iter::Vector{Int64}, converged::Bool, n_matvec::Int64}[(λ = [[-1.3337928978260098, -0.7233312169119137, -0.44525884894035117, -0.44525773442813826, -0.40629075564412775, -0.059209131758696534, -0.05920757124992352, 0.015425979649566116, 0.195234755735637, 0.20823555256758575, 0.24236535913929103], [-1.3004907537408528, -0.6617353923571838, -0.3896996793984071, -0.38969517039716256, -0.3736426584429545, 0.015034043763826502, 0.015039324313306604, 0.028028534155278485, 0.20772904619167812, 0.2142778738269242, 0.2580040967312771]], X = [[0.15250539319560363 - 0.21673904462366414im 2.399069147118555e-6 - 1.972952802738244e-6im … -0.07590372863504949 + 0.025334595197545186im -8.64955294386954e-6 + 3.3995328794820555e-6im; 0.11517827701997926 - 0.16369027071983042im 8.295095720604513e-7 - 1.4598471952781167e-6im … -0.09383220327132918 + 0.03173663133033844im -0.24401737322770736 - 0.3094122181565572im; … ; 0.03502581685387627 - 0.04977946083168386im -0.041530327928154094 - 0.04866824875425275im … -0.017094034303627062 + 0.005658872977776245im -0.034579636195227165 - 0.006389960378903389im; 0.06428335018188634 - 0.09136142994097235im -0.08935364274570315 - 0.10470864196448583im … -0.014975735453666627 + 0.004876176557385483im -0.06660144755530485 + 0.002374572789774817im], [0.23674957129601146 + 0.11105482463349776im 3.63394570481607e-6 + 3.1086852469907554e-6im … -0.08305841038904434 - 0.01539178153888513im 9.334770864486697e-6 - 5.951137103897814e-6im; 0.17869781905680057 + 0.08382348570115257im 1.8277785693905518e-6 + 2.062402033589303e-6im … -0.09372276184017204 - 0.017338750875529482im 0.3009661752952853 - 0.43774344158817297im; … ; 0.05509072098796381 + 0.02584117122588861im 0.04200711957244624 - 0.04907520640229016im … -0.016918860562775903 - 0.00313666107428781im 0.014736852832258073 - 0.03982742907284569im; 0.10088413297403094 + 0.047321046979011676im 0.09001434712048181 - 0.10516173128303666im … -0.014770412823948574 - 0.002741923155877172im 0.01710870024092006 - 0.0707170269000369im]], residual_norms = [[3.9636723202586384e-5, 5.8074072625138284e-5, 8.161471017816532e-5, 0.00010322003833050203, 8.025909475738257e-5, 8.72228254711766e-5, 3.954574572117645e-5, 1.8539960680749642e-5, 8.670298413327017e-5, 0.0003963615887261576, 0.002115145972054291], [1.248701433356305e-5, 4.135470443430611e-5, 4.299396904797361e-5, 3.664024923616367e-5, 6.074919556448238e-6, 4.3188203978741715e-5, 4.194647312548626e-5, 1.1281247034437756e-6, 9.70257714548515e-6, 7.867582993884183e-5, 0.015426510310727882]], n_iter = [16, 6], converged = 1, n_matvec = 229)], stage = :finalize, history_Δρ = [0.0004935259839679793], history_Etot = [-28.939612789595976], runtime_ns = 0x000000000b5d52f7, algorithm = "SCF")

    Since only the density is stored in a checkpoint (and not the Bloch waves), the first step needs a slightly elevated number of diagonalizations. Notice, that reconstructing the checkpointargs in this second call is important as the checkpointargs now contain different data, such that the SCF continues from the checkpoint. By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which can be changed using the filename keyword argument of kwargs_scf_checkpoints. Note that the file is not deleted by DFTK, so it is your responsibility to clean it up. Further note that warnings or errors will arise if you try to use a checkpoint, which is incompatible with your calculation.

    We can also inspect the checkpoint file manually using the load_scfres function and use it manually to continue the calculation:

    oldstate = load_scfres("dftk_scf_checkpoint.jld2")
    +scfres   = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
     ---   ---------------   ---------   ---------   ------   ----   ------
    -  1   -28.93961144473                   -3.12    1.985    1.0
    Availability of `load_scfres`, `save_scfres` and `ScfSaveCheckpoints`

    As JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).

    (Cleanup files generated by this notebook)

    rm("dftk_scf_checkpoint.jld2")
    -rm("scfres.jld2")
    + 1 -28.93873409464 -2.33 1.986 5.0 82.1ms + 2 -28.93949066469 -3.12 -2.71 1.985 1.0 64.6ms + 3 -28.93961010583 -3.92 -2.62 1.985 3.5 87.0ms + 4 -28.93961145232 -5.87 -2.75 1.985 1.0 61.1ms + 5 -28.93961237778 -6.03 -2.84 1.985 1.0 60.8ms + 6 -28.93961266949 -6.54 -2.93 1.985 1.0 61.2ms + 7 -28.93961303269 -6.44 -3.16 1.985 1.0 62.6ms + 8 -28.93961309267 -7.22 -3.25 1.985 1.0 74.9ms + 9 -28.93961314066 -7.32 -3.44 1.985 1.5 66.7ms + 10 -28.93961316481 -7.62 -4.14 1.985 1.5 67.2ms

    Some details on what happens under the hood in this mechanism: When using the kwargs_scf_checkpoints function, the ScfSaveCheckpoints callback is employed during the SCF, which causes the density to be stored to the JLD2 file in every iteration. When reading the file, the kwargs_scf_checkpoints transparently patches away the ψ and ρ keyword arguments and replaces them by the data obtained from the file. For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.

    (Cleanup files generated by this notebook)

    rm("dftk_scf_checkpoint.jld2")
    +rm("scfres.jld2")
    diff --git a/stable b/stable index 66e8b118d0..7f4db7fbb2 120000 --- a/stable +++ b/stable @@ -1 +1 @@ -v0.6.15 \ No newline at end of file +v0.6.17 \ No newline at end of file diff --git a/v0.6 b/v0.6 index 66e8b118d0..7f4db7fbb2 120000 --- a/v0.6 +++ b/v0.6 @@ -1 +1 @@ -v0.6.15 \ No newline at end of file +v0.6.17 \ No newline at end of file diff --git a/v0.6.16/.documenter-siteinfo.json b/v0.6.16/.documenter-siteinfo.json new file mode 100644 index 0000000000..5474d9bc0b --- /dev/null +++ b/v0.6.16/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.9.4","generation_timestamp":"2023-12-26T11:28:09","documenter_version":"1.1.2"}} \ No newline at end of file diff --git a/v0.6.16/api/index.html b/v0.6.16/api/index.html new file mode 100644 index 0000000000..ef8c80ff28 --- /dev/null +++ b/v0.6.16/api/index.html @@ -0,0 +1,986 @@ + +API reference · DFTK.jl

    API reference

    This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.

    DFTK.AdaptiveBandsType

    Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.

    source
    DFTK.AdaptiveDiagtolType

    Algorithm for the tolerance used for the next diagonalization. This function takes $|ρnext - ρin|$ and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.

    source
    DFTK.AtomicNonlocalType

    Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. $\text{Energy} = \sum_a \sum_{ij} \sum_{n} f_n <ψ_n|p_{ai}> D_{ij} <p_{aj}|ψ_n>.$

    source
    DFTK.BlowupCHVType

    Blow-up function as proposed in https://arxiv.org/abs/2210.00442 The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.

    source
    DFTK.DielectricMixingType

    We use a simplification of the Resta model DOI 10.1103/physrevb.16.2717 and set $χ_0(q) = \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)}$ where $C_0 = 1 - ε_r$ with $ε_r$ being the macroscopic relative permittivity. We neglect $K_\text{xc}$, such that $J^{-1} ≈ \frac{k_{TF}^2 - C_0 G^2}{ε_r k_{TF}^2 - C_0 G^2}$

    By default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to $ρ$ and $ρ_\text{spin}$ in the same way.

    source
    DFTK.DielectricModelType

    A localised dielectric model for $χ_0$:

    \[\sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)}\]

    where $C_0 = 1 - ε_r$, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.

    source
    DFTK.DivAgradOperatorType

    Nonlocal "divAgrad" operator $-½ ∇ ⋅ (A ∇)$ where $A$ is a scalar field on the real-space grid. The $-½$ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for $A=1$).

    source
    DFTK.ElementCohenBergstresserMethod
    ElementCohenBergstresser(
    +    key;
    +    lattice_constant
    +) -> ElementCohenBergstresser
    +

    Element where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).

    key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

    source
    DFTK.ElementCoulombMethod
    ElementCoulomb(key; mass) -> ElementCoulomb
    +

    Element interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

    source
    DFTK.ElementGaussianMethod
    ElementGaussian(α, L; symbol) -> ElementGaussian
    +

    Element interacting with electrons via a Gaussian potential. Symbol is non-mandatory.

    source
    DFTK.ElementPspMethod
    ElementPsp(key; psp, mass)
    +

    Element interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

    source
    DFTK.EnergiesType

    A simple struct to contain a vector of energies, and utilities to print them in a nice format.

    source
    DFTK.EntropyType

    Entropy term -TS, where S is the electronic entropy. Turns the energy E into the free energy F=E-TS. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.

    source
    DFTK.EwaldType

    Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.

    source
    DFTK.ExplicitKpointsType

    Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)

    source
    DFTK.ExternalFromRealType

    External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.

    source
    DFTK.FixedBandsType

    In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).

    source
    DFTK.GPUMethod

    Construct a particular GPU architecture by passing the ArrayType

    source
    DFTK.HartreeType

    Hartree term: for a decaying potential V the energy would be

    1/2 ∫ρ(x)ρ(y)V(x-y) dxdy

    with the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather

    1/2 ∫ρ(x)ρ(y) G(x-y) dx dy

    where G is the Green's function of the periodic Laplacian with zero mean (-Δ G = sum{R} 4π δR, integral of G zero on a unit cell).

    source
    DFTK.KerkerMixingType

    Kerker mixing: $J^{-1} ≈ \frac{|G|^2}{k_{TF}^2 + |G|^2}$ where $k_{TF}$ is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for $ΔDOS_Ω$ is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.

    Notes:

    • Abinit calls $1/k_{TF}$ the dielectric screening length (parameter dielng)
    source
    DFTK.KpointType

    Discretization information for $k$-point-dependent quantities such as orbitals. More generally, a $k$-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.

    source
    DFTK.LazyHcatType

    Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).

    source
    DFTK.LdosModelType

    Represents the LDOS-based $χ_0$ model

    \[χ_0(r, r') = (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D)\]

    where $D_\text{loc}$ is the local density of states and $D$ the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665

    source
    DFTK.LibxcDensitiesMethod
    LibxcDensities(
    +    basis,
    +    max_derivative::Integer,
    +    ρ,
    +    τ
    +) -> DFTK.LibxcDensities
    +

    Compute density in real space and its derivatives starting from ρ

    source
    DFTK.MagneticType

    Magnetic term $A⋅(-i∇)$. It is assumed (but not checked) that $∇⋅A = 0$.

    source
    DFTK.ModelMethod
    Model(system::AbstractSystem; kwargs...)

    AtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.

    source
    DFTK.ModelMethod
    Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,
    +      smearing, spin_polarization, symmetries)

    Creates the physical specification of a model (without any discretization information).

    n_electrons is taken from atoms if not specified.

    spin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.

    magnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.

    smearing is Fermi-Dirac if temperature is non-zero, none otherwise

    The symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.

    source
    DFTK.ModelMethod
    Model(model; [lattice, positions, atoms, kwargs...])
    +Model{T}(model; [lattice, positions, atoms, kwargs...])

    Construct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.

    source
    DFTK.NonlocalOperatorType

    Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.

    source
    DFTK.NoopOperatorType

    Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).

    source
    DFTK.PairwisePotentialMethod
    PairwisePotential(
    +    V,
    +    params;
    +    max_radius
    +) -> PairwisePotential
    +

    Pairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.

    source
    DFTK.PlaneWaveBasisType

    A plane-wave discretized Model. Normalization conventions:

    • Things that are expressed in the G basis are normalized so that if $x$ is the vector, then the actual function is $\sum_G x_G e_G$ with $e_G(x) = e^{iG x} / \sqrt(\Omega)$, where $\Omega$ is the unit cell volume. This is so that, eg $norm(ψ) = 1$ gives the correct normalization. This also holds for the density and the potentials.
    • Quantities expressed on the real-space grid are in actual values.

    ifft and fft convert between these representations.

    source
    DFTK.PlaneWaveBasisMethod

    Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.

    source
    DFTK.PreconditionerTPAType

    (simplified version of) Tetter-Payne-Allan preconditioning ↑ M.P. Teter, M.C. Payne and D.C. Allan, Phys. Rev. B 40, 12255 (1989).

    source
    DFTK.PspHghMethod
    PspHgh(path[, identifier, description])

    Construct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.

    source
    DFTK.PspUpfMethod
    PspUpf(path[, identifier])

    Construct a Unified Pseudopotential Format pseudopotential from file.

    Does not support:

    • Fully-realtivistic / spin-orbit pseudos
    • Bare Coulomb / all-electron potentials
    • Semilocal potentials
    • Ultrasoft potentials
    • Projector-augmented wave potentials
    • GIPAW reconstruction data
    source
    DFTK.RealFourierOperatorType

    Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (real, fourier) They also implement mul! and Matrix(op) for exploratory use.

    source
    DFTK.ScfSaveCheckpointsType

    Adds checkpointing to a DFTK self-consistent field calculation. The checkpointing file is silently overwritten. Requires the package for writing the output file (usually JLD2) to be loaded.

    • filename: Name of the checkpointing file.
    • compress: Should compression be used on writing (rarely useful)
    • save_ψ: Should the bands also be saved (noteworthy additional cost ... use carefully)
    source
    DFTK.XcType

    Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.

    source
    DFTK.χ0MixingType

    Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).

    source
    AbstractFFTs.fft!Method
    fft!(
    +    f_fourier::AbstractArray{T, 3} where T,
    +    basis::PlaneWaveBasis,
    +    f_real::AbstractArray{T, 3} where T
    +) -> Any
    +

    In-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.

    source
    AbstractFFTs.fftMethod
    fft(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    f_real::AbstractArray{U}
    +) -> Any
    +
    fft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)

    Perform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.

    source
    AbstractFFTs.ifft!Method
    ifft!(
    +    f_real::AbstractArray{T, 3} where T,
    +    basis::PlaneWaveBasis,
    +    f_fourier::AbstractArray{T, 3} where T
    +) -> Any
    +

    In-place version of ifft.

    source
    AbstractFFTs.ifftMethod
    ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any
    +
    ifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)

    Perform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.

    source
    AtomsBase.atomic_systemFunction
    atomic_system(
    +    lattice::AbstractMatrix{<:Number},
    +    atoms::Vector{<:DFTK.Element},
    +    positions::AbstractVector
    +) -> AtomsBase.FlexibleSystem
    +atomic_system(
    +    lattice::AbstractMatrix{<:Number},
    +    atoms::Vector{<:DFTK.Element},
    +    positions::AbstractVector,
    +    magnetic_moments::AbstractVector
    +) -> AtomsBase.FlexibleSystem
    +
    atomic_system(model::DFTK.Model, magnetic_moments=[])
    +atomic_system(lattice, atoms, positions, magnetic_moments=[])

    Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

    source
    AtomsBase.periodic_systemFunction
    periodic_system(model::Model) -> AtomsBase.FlexibleSystem
    +periodic_system(
    +    model::Model,
    +    magnetic_moments
    +) -> AtomsBase.FlexibleSystem
    +
    periodic_system(model::DFTK.Model, magnetic_moments=[])
    +periodic_system(lattice, atoms, positions, magnetic_moments=[])

    Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

    source
    Brillouin.KPaths.irrfbz_pathFunction
    irrfbz_path(model::Model) -> Brillouin.KPaths.KPath
    +irrfbz_path(
    +    model::Model,
    +    magnetic_moments;
    +    dim,
    +    space_group_number
    +) -> Brillouin.KPaths.KPath
    +

    Extract the high-symmetry $k$-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the $k$-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.

    If the cell is a supercell of a smaller primitive cell, the standard $k$-path of the associated primitive cell is returned. So, the high-symmetry $k$ points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.

    The dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).

    Due to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.

    source
    DFTK.CROPFunction
    CROP(
    +    f,
    +    x0,
    +    m::Int64,
    +    max_iter::Int64,
    +    tol::Real
    +) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}
    +CROP(
    +    f,
    +    x0,
    +    m::Int64,
    +    max_iter::Int64,
    +    tol::Real,
    +    warming
    +) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}
    +

    CROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.

    source
    DFTK.G_vectorsMethod
    G_vectors(
    +    basis::PlaneWaveBasis
    +) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}
    +
    G_vectors(basis::PlaneWaveBasis)
    +G_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of wave vectors $G$ in reduced (integer) coordinates of a basis or a $k$-point kpt.

    source
    DFTK.G_vectorsMethod
    G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any
    +
    G_vectors([architecture=AbstractArchitecture], fft_size::Tuple)

    The wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.

    source
    DFTK.G_vectors_cartMethod
    G_vectors_cart(basis::PlaneWaveBasis) -> Any
    +
    G_vectors_cart(basis::PlaneWaveBasis)
    +G_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of $G$ vectors of a given basis or kpt, in cartesian coordinates.

    source
    DFTK.Gplusk_vectorsMethod
    Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any
    +
    Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of $G + k$ vectors, in reduced coordinates.

    source
    DFTK.Gplusk_vectors_cartMethod
    Gplusk_vectors_cart(
    +    basis::PlaneWaveBasis,
    +    kpt::Kpoint
    +) -> Any
    +
    Gplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of $G + k$ vectors, in cartesian coordinates.

    source
    DFTK.Gplusk_vectors_in_supercellMethod
    Gplusk_vectors_in_supercell(
    +    basis::PlaneWaveBasis,
    +    basis_supercell::PlaneWaveBasis,
    +    kpt::Kpoint
    +) -> Any
    +

    Maps all $k+G$ vectors of an given basis as $G$ vectors of the supercell basis, in reduced coordinates.

    source
    DFTK.HybridMixingMethod
    HybridMixing(
    +;
    +    εr,
    +    kTF,
    +    localization,
    +    adjust_temperature,
    +    kwargs...
    +) -> χ0Mixing
    +

    The model for the susceptibility is

    \[\begin{aligned} + χ_0(r, r') &= (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D) \\ + &+ \sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)} +\end{aligned}\]

    where $C_0 = 1 - ε_r$, $D_\text{loc}$ is the local density of states, $D$ is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020 arXiv:2009.01665

    Important kwargs passed on to χ0Mixing

    • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
    • verbose: Run the GMRES in verbose mode.
    • reltol: Relative tolerance for GMRES
    source
    DFTK.IncreaseMixingTemperatureMethod
    IncreaseMixingTemperature(
    +;
    +    factor,
    +    above_ρdiff,
    +    temperature_max
    +) -> DFTK.var"#callback#686"{DFTK.var"#callback#685#687"{Int64, Float64}}
    +

    Increase the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.

    source
    DFTK.LdosMixingMethod
    LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing
    +

    The model for the susceptibility is

    \[\begin{aligned} + χ_0(r, r') &= (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D) +\end{aligned}\]

    where $D_\text{loc}$ is the local density of states, $D$ is the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665.

    Important kwargs passed on to χ0Mixing

    • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
    • verbose: Run the GMRES in verbose mode.
    • reltol: Relative tolerance for GMRES
    source
    DFTK.ScfAcceptImprovingStepMethod
    ScfAcceptImprovingStep(
    +;
    +    max_energy_change,
    +    max_relative_residual
    +) -> DFTK.var"#accept_step#773"{Float64, Float64}
    +

    Accept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.

    source
    DFTK.apply_KMethod
    apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any
    +
    apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)

    Compute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.

    source
    DFTK.apply_kernelMethod
    apply_kernel(
    +    basis::PlaneWaveBasis,
    +    δρ;
    +    RPA,
    +    kwargs...
    +) -> Any
    +
    apply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)

    Computes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.

    source
    DFTK.apply_symopMethod
    apply_symop(
    +    symop::SymOp,
    +    basis,
    +    kpoint,
    +    ψk::AbstractVecOrMat
    +) -> Tuple{Any, Any}
    +

    Apply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new $k$-point).

    source
    DFTK.apply_symopMethod
    apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any
    +

    Apply a symmetry operation to a density.

    source
    DFTK.apply_ΩMethod
    apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any
    +
    apply_Ω(δψ, ψ, H::Hamiltonian, Λ)

    Compute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.

    source
    DFTK.apply_χ0Method
    apply_χ0(
    +    ham,
    +    ψ,
    +    occupation,
    +    εF,
    +    eigenvalues,
    +    δV::AbstractArray{TδV};
    +    occupation_threshold,
    +    q,
    +    kwargs_sternheimer...
    +) -> Any
    +

    Get the density variation δρ corresponding to a potential variation δV.

    source
    DFTK.attach_pspMethod
    attach_psp(
    +    system::AtomsBase.AbstractSystem,
    +    pspmap::AbstractDict{Symbol, String}
    +) -> AtomsBase.FlexibleSystem
    +
    attach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})
    +attach_psp(system::AbstractSystem; psps::String...)

    Return a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.

    Examples

    Select pseudopotentials for all silicon and oxygen atoms in the system.

    julia> attach_psp(system, Dict(:Si => "hgh/lda/si-q4", :O => "hgh/lda/o-q6")

    Same thing but using the kwargs syntax:

    julia> attach_psp(system, Si="hgh/lda/si-q4", O="hgh/lda/o-q6")
    source
    DFTK.band_data_to_dictMethod
    band_data_to_dict(
    +    band_data::NamedTuple;
    +    kwargs...
    +) -> Dict{String, Any}
    +

    Convert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns meaningful data. All other processors still return a dictionary (to simplify code in calling locations), but the data may be dummy.

    Some details on the conventions for the returned data:

    • εF: Computed Fermi level (if present in band_data)
    • labels: A mapping of high-symmetry k-Point labels to the index in the "kcoords" vector of the corresponding k-Point.
    • eigenvalues, eigenvalues_error, occupation, residual_norms: (n_bands, n_kpoints, n_spin) arrays of the respective data.
    • n_iter: (n_kpoints, n_spin) array of the number of iterations the diagonalization routine required.
    • kpt_max_n_G: Maximal number of G-vectors used for any k-point.
    • kpt_n_G_vectors: (n_kpoints, n_spin) array, the number of valid G-vectors for each k-point, i.e. the extend along the first axis of ψ where data is valid.
    • kpt_G_vectors: (3, max_n_G, n_kpoints, n_spin) array of the integer (reduced) coordinates of the G-points used for each k-point.
    • ψ: (max_n_G, n_bands, n_kpoints, n_spin) arrays where max_n_G is the maximal number of G-vectors used for any k-point. The data is zero-padded, i.e. for k-points which have less G-vectors than maxnG, then there are tailing zeros.
    source
    DFTK.build_fft_plans!Method
    build_fft_plans!(
    +    tmp::Array{ComplexF64}
    +) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}
    +

    Plan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.

    source
    DFTK.build_form_factorsMethod
    build_form_factors(psp, qs::Array) -> Matrix
    +

    Build form factors (Fourier transforms of projectors) for an atom centered at 0.

    source
    DFTK.build_projection_vectors_Method
    build_projection_vectors_(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt::Kpoint,
    +    psps,
    +    psp_positions
    +) -> Any
    +

    Build projection vectors for a atoms array generated by term_nonlocal

    \[\begin{aligned} +H_{\rm at} &= \sum_{ij} C_{ij} \ket{p_i} \bra{p_j} \\ +H_{\rm per} &= \sum_R \sum_{ij} C_{ij} \ket{p_i(x-R)} \bra{p_j(x-R)} +\end{aligned}\]

    \[\begin{aligned} +\braket{e_k(G') \middle| H_{\rm per}}{e_k(G)} + &= \ldots \\ + &= \frac{1}{Ω} \sum_{ij} C_{ij} \hat p_i(k+G') \hat p_j^*(k+G), +\end{aligned}\]

    where $\hat p_i(q) = ∫_{ℝ^3} p_i(r) e^{-iq·r} dr$.

    We store $\frac{1}{\sqrt Ω} \hat p_i(k+G)$ in proj_vectors.

    source
    DFTK.cell_to_supercellMethod
    cell_to_supercell(scfres::NamedTuple) -> Any
    +

    Transpose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:

    • basis_supercell and ψ_supercell are computed by the routines above.
    • The supercell occupations vector is the concatenation of all input occupations vectors.
    • The supercell density is computed with supercell occupations and ψ_supercell.
    • Supercell energies are the multiplication of input energies by the number of unit cells in the supercell.

    Other parameters stay untouched.

    source
    DFTK.cell_to_supercellMethod
    cell_to_supercell(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real
    +) -> PlaneWaveBasis
    +

    Construct a plane-wave basis whose unit cell is the supercell associated to an input basis $k$-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.

    source
    DFTK.cell_to_supercellMethod
    cell_to_supercell(
    +    ψ,
    +    basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,
    +    basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real
    +) -> Any
    +

    Re-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at $Γ$-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.

    source
    DFTK.cg!Method
    cg!(
    +    x::AbstractArray{T, 1},
    +    A::LinearMaps.LinearMap{T},
    +    b::AbstractArray{T, 1};
    +    precon,
    +    proj,
    +    callback,
    +    tol,
    +    maxiter,
    +    miniter
    +) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), _A} where _A<:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}
    +

    Implementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.

    source
    DFTK.charge_ionicMethod
    charge_ionic(el::DFTK.Element) -> Int64
    +

    Return the total ionic charge of an atom type (nuclear charge - core electrons)

    source
    DFTK.charge_nuclearMethod
    charge_nuclear(_::DFTK.Element) -> Int64
    +

    Return the total nuclear charge of an atom type

    source
    DFTK.compute_amn_kpointMethod
    compute_amn_kpoint(
    +    basis::PlaneWaveBasis,
    +    kpt,
    +    ψk,
    +    projections,
    +    n_bands
    +) -> Any
    +

    Compute the starting matrix for Wannierization.

    Wannierization searches for a unitary matrix $U_{m_n}$. As a starting point for the search, we can provide an initial guess function $g$ for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called $[A_k]_{m,n}$, and is computed as follows: $[A_k]_{m,n} = \langle ψ_m^k | g^{\text{per}}_n \rangle$. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.

    Centers are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.

    Given an orbital $g_n$, the periodized orbital is defined by : $g^{per}_n = \sum\limits_{R \in {\rm lattice}} g_n( \cdot - R)$. The Fourier coefficient of $g^{per}_n$ at any G is given by the value of the Fourier transform of $g_n$ in G.

    Each projection is a callable object that accepts the basis and some qpoints as an argument, and returns the Fourier transform of $g_n$ at the qpoints.

    source
    DFTK.compute_bandsMethod
    compute_bands(
    +    basis_or_scfres,
    +    kpath::Brillouin.KPaths.KPath;
    +    kline_density,
    +    kwargs...
    +) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization, :kinter)}
    +

    Compute band data along a specific Brillouin.KPath using a kline_density, the number of $k$-points per inverse bohrs (i.e. overall in units of length).

    If not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.

    source
    DFTK.compute_bandsMethod
    compute_bands(
    +    scfres::NamedTuple,
    +    kgrid::DFTK.AbstractKgrid;
    +    n_bands,
    +    kwargs...
    +) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Any, Any, Vector}
    +

    Compute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).

    source
    DFTK.compute_bandsMethod
    compute_bands(
    +    basis::PlaneWaveBasis,
    +    kgrid::DFTK.AbstractKgrid;
    +    n_bands,
    +    n_extra,
    +    ρ,
    +    εF,
    +    eigensolver,
    +    tol,
    +    kwargs...
    +) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Nothing, Nothing, Vector}
    +

    Compute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:

    • kgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.
    • tol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.
    • eigensolver: The diagonalisation method to be employed.
    source
    DFTK.compute_currentMethod
    compute_current(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    occupation
    +) -> Vector
    +

    Computes the probability (not charge) current, ∑ fn Im(ψn* ∇ψn)

    source
    DFTK.compute_densityMethod
    compute_density(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    occupation;
    +    occupation_threshold
    +) -> AbstractArray{_A, 4} where _A
    +
    compute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)

    Compute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per $k$-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.

    source
    DFTK.compute_dosMethod
    compute_dos(
    +    ε,
    +    basis,
    +    eigenvalues;
    +    smearing,
    +    temperature
    +) -> Any
    +

    Total density of states at energy ε

    source
    DFTK.compute_dynmatMethod
    compute_dynmat(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    occupation;
    +    q,
    +    ρ,
    +    ham,
    +    εF,
    +    eigenvalues,
    +    kwargs...
    +) -> Any
    +

    Compute the dynamical matrix in the form of a $3×n_{\rm atoms}×3×n_{\rm atoms}$ tensor in reduced coordinates.

    source
    DFTK.compute_fft_sizeMethod
    compute_fft_size(
    +    model::Model{T},
    +    Ecut
    +) -> Tuple{Vararg{Any, _A}} where _A
    +compute_fft_size(
    +    model::Model{T},
    +    Ecut,
    +    kgrid;
    +    ensure_smallprimes,
    +    algorithm,
    +    factors,
    +    kwargs...
    +) -> Tuple{Vararg{Any, _A}} where _A
    +

    Determine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).

    Optionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.

    The function will determine the smallest parallelepiped containing the wave vectors $|G|^2/2 \leq E_\text{cut} ⋅ \text{supersampling}^2$. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.

    If factors is not empty, ensure that the resulting fft_size contains all the factors

    source
    DFTK.compute_forcesMethod
    compute_forces(scfres) -> Any
    +

    Compute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.

    source
    DFTK.compute_forces_cartMethod
    compute_forces_cart(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    occupation;
    +    kwargs...
    +) -> Any
    +

    Compute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.

    source
    DFTK.compute_inverse_latticeMethod
    compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any
    +

    Compute the inverse of the lattice. Takes special care of 1D or 2D cases.

    source
    DFTK.compute_kernelMethod
    compute_kernel(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real;
    +    kwargs...
    +) -> Any
    +
    compute_kernel(basis::PlaneWaveBasis; kwargs...)

    Computes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks

    \[\left(\begin{array}{cc} + K_{αα} & K_{αβ}\\ + K_{βα} & K_{ββ} +\end{array}\right)\]

    source
    DFTK.compute_ldosMethod
    compute_ldos(
    +    ε,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues,
    +    ψ;
    +    smearing,
    +    temperature,
    +    weight_threshold
    +) -> AbstractArray{_A, 4} where _A
    +

    Local density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.

    source
    DFTK.compute_occupationMethod
    compute_occupation(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues::AbstractVector,
    +    εF::Number;
    +    temperature,
    +    smearing
    +) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}
    +

    Compute occupation given eigenvalues and Fermi level

    source
    DFTK.compute_occupationMethod
    compute_occupation(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues::AbstractVector
    +) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}
    +compute_occupation(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues::AbstractVector,
    +    fermialg::AbstractFermiAlgorithm;
    +    tol_n_elec,
    +    temperature,
    +    smearing
    +) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}
    +

    Compute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.

    source
    DFTK.compute_recip_latticeMethod
    compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any
    +

    Compute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.

    source
    DFTK.compute_stresses_cartMethod
    compute_stresses_cart(scfres) -> Any
    +

    Compute the stresses of an obtained SCF solution. The stress tensor is given by

    \[\left( \begin{array}{ccc} +σ_{xx} σ_{xy} σ_{xz} \\ +σ_{yx} σ_{yy} σ_{yz} \\ +σ_{zx} σ_{zy} σ_{zz} +\right) = \frac{1}{|Ω|} \left. \frac{dE[ (I+ϵ) * L]}{dM}\right|_{ϵ=0}\]

    where $ϵ$ is the strain. See O. Nielsen, R. Martin Phys. Rev. B. 32, 3792 (1985) for details. In Voigt notation one would use the vector $[σ_{xx} σ_{yy} σ_{zz} σ_{zy} σ_{zx} σ_{yx}]$.

    source
    DFTK.compute_transfer_matrixMethod
    compute_transfer_matrix(
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt_in::Kpoint,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt_out::Kpoint
    +) -> Any
    +

    Return a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.

    source
    DFTK.compute_transfer_matrixMethod
    compute_transfer_matrix(
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real
    +) -> Any
    +

    Return a list of sparse matrices (one per $k$-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.

    source
    DFTK.compute_unit_cell_volumeMethod
    compute_unit_cell_volume(lattice) -> Any
    +

    Compute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.

    source
    DFTK.compute_δHψ_sαMethod
    compute_δHψ_sα(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    q,
    +    s,
    +    α;
    +    kwargs...
    +) -> Any
    +

    Assemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.

    source
    DFTK.compute_δocc!Method
    compute_δocc!(
    +    δocc,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    εF,
    +    ε,
    +    δHψ
    +) -> NamedTuple{(:δocc, :δεF), _A} where _A<:Tuple{Any, Any}
    +

    Compute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.

    source
    DFTK.compute_δψ!Method
    compute_δψ!(
    +    δψ,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    H,
    +    ψ,
    +    εF,
    +    ε,
    +    δHψ
    +)
    +compute_δψ!(
    +    δψ,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    H,
    +    ψ,
    +    εF,
    +    ε,
    +    δHψ,
    +    ε_minus_q;
    +    ψ_extra,
    +    q,
    +    kwargs_sternheimer...
    +)
    +

    Perform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.

    source
    DFTK.compute_χ0Method
    compute_χ0(ham; temperature) -> Any
    +

    Compute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:

    \[\left(\begin{array}{cc} + (χ_0)_{αα} & (χ_0)_{αβ} \\ + (χ_0)_{βα} & (χ_0)_{ββ} +\end{array}\right)\]

    source
    DFTK.count_n_projMethod
    count_n_proj(psps, psp_positions) -> Any
    +
    count_n_proj(psps, psp_positions)

    Number of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.

    source
    DFTK.count_n_projMethod
    count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any
    +
    count_n_proj(psp, l)

    Number of projector functions for angular momentum l, including angular parts from -m:m.

    source
    DFTK.count_n_projMethod
    count_n_proj(psp::DFTK.NormConservingPsp) -> Int64
    +
    count_n_proj(psp)

    Number of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.

    source
    DFTK.count_n_proj_radialMethod
    count_n_proj_radial(
    +    psp::DFTK.NormConservingPsp,
    +    l::Integer
    +) -> Any
    +
    count_n_proj_radial(psp, l)

    Number of projector radial functions at angular momentum l.

    source
    DFTK.count_n_proj_radialMethod
    count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64
    +
    count_n_proj_radial(psp)

    Number of projector radial functions at all angular momenta up to psp.lmax.

    source
    DFTK.create_supercellMethod
    create_supercell(
    +    lattice,
    +    atoms,
    +    positions,
    +    supercell_size
    +) -> NamedTuple{(:lattice, :atoms, :positions), _A} where _A<:Tuple{Any, Any, Any}
    +

    Construct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.

    source
    DFTK.datadir_pspMethod
    datadir_psp() -> String
    +

    Return the data directory with pseudopotential files

    source
    DFTK.default_fermialgMethod
    default_fermialg(
    +    _::DFTK.Smearing.SmearingFunction
    +) -> FermiBisection
    +

    Default selection of a Fermi level determination algorithm

    source
    DFTK.default_symmetriesMethod
    default_symmetries(
    +    lattice,
    +    atoms,
    +    positions,
    +    magnetic_moments,
    +    spin_polarization,
    +    terms;
    +    tol_symmetry
    +) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
    +

    Default logic to determine the symmetry operations to be used in the model.

    source
    DFTK.default_wannier_centersMethod
    default_wannier_centers(n_wannier) -> Any
    +

    Default random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.

    source
    DFTK.diagonalize_all_kblocksMethod
    diagonalize_all_kblocks(
    +    eigensolver,
    +    ham::Hamiltonian,
    +    nev_per_kpoint::Int64;
    +    ψguess,
    +    prec_type,
    +    interpolate_kpoints,
    +    tol,
    +    miniter,
    +    maxiter,
    +    n_conv_check
    +) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}
    +

    Function for diagonalising each $k$-Point blow of ham one step at a time. Some logic for interpolating between $k$-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single $k$-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)

    source
    DFTK.diameterMethod
    diameter(lattice::AbstractMatrix) -> Any
    +

    Compute the diameter of the unit cell

    source
    DFTK.direct_minimizationMethod
    direct_minimization(
    +    basis::PlaneWaveBasis;
    +    kwargs...
    +) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :ψ, :eigenvalues, :occupation, :εF, :optim_res), _A} where _A<:Tuple{Any, PlaneWaveBasis, Any, Bool, Any, Any, Vector{Any}, Vector, Nothing, Optim.MultivariateOptimizationResults{Optim.LBFGS{DFTK.DMPreconditioner, LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, typeof(DFTK.precondprep!)}, _A, _B, _C, _D, Bool} where {_A, _B, _C, _D}}
    +

    Computes the ground state by direct minimization. kwargs... are passed to Optim.Options(). Note that the resulting ψ are not necessarily eigenvectors of the Hamiltonian.

    source
    DFTK.disable_threadingMethod
    disable_threading() -> Union{Nothing, Bool}
    +

    Convenience function to disable all threading in DFTK and assert that Julia threading is off as well.

    source
    DFTK.divergence_realMethod
    divergence_real(operand, basis) -> Any
    +

    Compute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.

    source
    DFTK.energy_forces_ewaldMethod
    energy_forces_ewald(
    +    lattice::AbstractArray{T},
    +    charges::AbstractArray,
    +    positions;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
    +

    Standard computation of energy and forces.

    source
    DFTK.energy_forces_ewaldMethod
    energy_forces_ewald(
    +    lattice::AbstractArray{T},
    +    charges,
    +    positions,
    +    q,
    +    ph_disp;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
    +

    Computation for phonons; required to build the dynamical matrix.

    source
    DFTK.energy_forces_ewaldMethod
    energy_forces_ewald(
    +    S,
    +    lattice::AbstractArray{T},
    +    charges,
    +    positions,
    +    q,
    +    ph_disp;
    +    η
    +) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
    +

    Compute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.

    lattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.

    For now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.

    source
    DFTK.energy_forces_pairwiseMethod
    energy_forces_pairwise(
    +    lattice::AbstractArray{T},
    +    symbols,
    +    positions,
    +    V,
    +    params;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
    +

    Standard computation of energy and forces.

    source
    DFTK.energy_forces_pairwiseMethod
    energy_forces_pairwise(
    +    lattice::AbstractArray{T},
    +    symbols,
    +    positions,
    +    V,
    +    params,
    +    q,
    +    ph_disp;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
    +

    Computation for phonons; required to build the dynamical matrix.

    source
    DFTK.energy_forces_pairwiseMethod
    energy_forces_pairwise(
    +    S,
    +    lattice::AbstractArray{T},
    +    symbols,
    +    positions,
    +    V,
    +    params,
    +    q,
    +    ph_disp;
    +    max_radius
    +) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}
    +

    Compute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.

    lattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).

    The potential is expected to decrease quickly at infinity.

    source
    DFTK.energy_psp_correctionMethod
    energy_psp_correction(
    +    lattice::AbstractArray{T, 2},
    +    atoms,
    +    atom_groups
    +) -> Any
    +

    Compute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.

    source
    DFTK.enforce_real!Method
    enforce_real!(
    +    fourier_coeffs,
    +    basis::PlaneWaveBasis
    +) -> AbstractArray
    +

    Ensure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.

    source
    DFTK.estimate_integer_lattice_boundsMethod
    estimate_integer_lattice_bounds(
    +    M::AbstractArray{T, 2},
    +    δ
    +) -> Any
    +estimate_integer_lattice_bounds(
    +    M::AbstractArray{T, 2},
    +    δ,
    +    shift;
    +    tol
    +) -> Any
    +

    Estimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.

    source
    DFTK.eval_psp_density_core_fourierMethod
    eval_psp_density_core_fourier(
    +    _::DFTK.NormConservingPsp,
    +    _::Real
    +) -> Real
    +
    eval_psp_density_core_fourier(psp, q)

    Evaluate the atomic core charge density in reciprocal space: ρval(q) = ∫{R^3} ρcore(r) e^{-iqr} dr = 4π ∫{R+} ρcore(r) sin(qr)/qr r^2 dr

    source
    DFTK.eval_psp_density_core_realMethod
    eval_psp_density_core_real(
    +    _::DFTK.NormConservingPsp,
    +    _::Real
    +) -> Any
    +
    eval_psp_density_core_real(psp, r)

    Evaluate the atomic core charge density in real space.

    source
    DFTK.eval_psp_density_valence_fourierMethod
    eval_psp_density_valence_fourier(
    +    psp::DFTK.NormConservingPsp,
    +    q::AbstractVector
    +) -> Real
    +
    eval_psp_density_valence_fourier(psp, q)

    Evaluate the atomic valence charge density in reciprocal space: ρval(q) = ∫{R^3} ρval(r) e^{-iqr} dr = 4π ∫{R+} ρval(r) sin(qr)/qr r^2 dr

    source
    DFTK.eval_psp_density_valence_realMethod
    eval_psp_density_valence_real(
    +    psp::DFTK.NormConservingPsp,
    +    r::AbstractVector
    +) -> Any
    +
    eval_psp_density_valence_real(psp, r)

    Evaluate the atomic valence charge density in real space.

    source
    DFTK.eval_psp_energy_correctionFunction
    eval_psp_energy_correction([T=Float64,] psp, n_electrons)

    Evaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.

    Notice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.

    The energy correction is defined as the limit of the Fourier-transform of the local potential as $q \to 0$, using the same correction as in the Fourier-transform of the local potential: math \lim_{q \to 0} 4π N_{\rm elec} ∫_{ℝ_+} (V(r) - C(r)) \frac{\sin(qr)}{qr} r^2 dr + F[C(r)] = 4π N_{\rm elec} ∫_{ℝ_+} (V(r) + Z/r) r^2 dr

    source
    DFTK.eval_psp_local_fourierMethod
    eval_psp_local_fourier(
    +    psp::DFTK.NormConservingPsp,
    +    q::AbstractVector
    +) -> Any
    +
    eval_psp_local_fourier(psp, q)

    Evaluate the local part of the pseudopotential in reciprocal space:

    \[\begin{aligned} +V_{\rm loc}(q) &= ∫_{ℝ^3} V_{\rm loc}(r) e^{-iqr} dr \\ + &= 4π ∫_{ℝ_+} V_{\rm loc}(r) \frac{\sin(qr)}{q} r dr +\end{aligned}\]

    In practice, the local potential should be corrected using a Coulomb-like term $C(r) = -Z/r$ to remove the long-range tail of $V_{\rm loc}(r)$ from the integral:

    \[\begin{aligned} +V_{\rm loc}(q) &= ∫_{ℝ^3} (V_{\rm loc}(r) - C(r)) e^{-iq·r} dr + F[C(r)] \\ + &= 4π ∫_{ℝ_+} (V_{\rm loc}(r) + Z/r) \frac{\sin(qr)}{qr} r^2 dr - Z/q^2 +\end{aligned}\]

    source
    DFTK.eval_psp_local_realMethod
    eval_psp_local_real(
    +    psp::DFTK.NormConservingPsp,
    +    r::AbstractVector
    +) -> Any
    +
    eval_psp_local_real(psp, r)

    Evaluate the local part of the pseudopotential in real space.

    source
    DFTK.eval_psp_projector_fourierMethod
    eval_psp_projector_fourier(
    +    psp::DFTK.NormConservingPsp,
    +    q::AbstractVector
    +)
    +
    eval_psp_projector_fourier(psp, i, l, q)

    Evaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus q:

    \[\begin{aligned} +p(q) &= ∫_{ℝ^3} p_{il}(r) e^{-iq·r} dr \\ + &= 4π ∫_{ℝ_+} r^2 p_{il}(r) j_l(qr) dr +\end{aligned}\]

    source
    DFTK.eval_psp_projector_realMethod
    eval_psp_projector_real(
    +    psp::DFTK.NormConservingPsp,
    +    i,
    +    l,
    +    r::AbstractVector
    +) -> Any
    +
    eval_psp_projector_real(psp, i, l, r)

    Evaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.

    source
    DFTK.filled_occupationMethod
    filled_occupation(model) -> Int64
    +

    Maximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).

    source
    DFTK.find_equivalent_kptMethod
    find_equivalent_kpt(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kcoord,
    +    spin;
    +    tol
    +) -> NamedTuple{(:index, :ΔG), _A} where _A<:Tuple{Int64, Any}
    +

    Find the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.

    source
    DFTK.gather_kptsMethod
    gather_kpts(
    +    basis::PlaneWaveBasis
    +) -> Union{Nothing, PlaneWaveBasis}
    +

    Gather the distributed $k$-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only for debugging or to extract data for serialisation to disk.

    source
    DFTK.gather_kpts_block!Method
    gather_kpts_block!(
    +    dest,
    +    basis::PlaneWaveBasis,
    +    kdata::AbstractArray{A, 1}
    +) -> Any
    +

    Gather the distributed data of a quantity depending on k-Points on the master process and save it in dest as a dense (size(kdata[1])..., n_kpoints) array. On the other (non-master) processes nothing is returned.

    source
    DFTK.guess_densityFunction
    guess_density(
    +    basis::PlaneWaveBasis,
    +    method::AtomicDensity
    +) -> Any
    +guess_density(
    +    basis::PlaneWaveBasis,
    +    method::AtomicDensity,
    +    magnetic_moments;
    +    n_electrons
    +) -> Any
    +
    guess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,
    +              magnetic_moments=[]; n_electrons=basis.model.n_electrons)

    Build a superposition of atomic densities (SAD) guess density or a rarndom guess density.

    The guess atomic densities are taken as one of the following depending on the input method:

    -RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:

    \[\hat{ρ}(G) = Z_{\mathrm{valence}} \exp\left(-(2π \text{length} |G|)^2\right)\]

    • ValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the

    pseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.

    When magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of $μ_B$.

    source
    DFTK.hankelMethod
    hankel(
    +    r::AbstractVector,
    +    r2_f::AbstractVector,
    +    l::Integer,
    +    q::Real
    +) -> Real
    +
    hankel(r, r2_f, l, q)

    Compute the Hankel transform

    \[ H[f] = 4\pi \int_0^\infty r f(r) j_l(qr) r dr.\]

    The integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate q.

    source
    DFTK.has_core_densityMethod
    has_core_density(_::DFTK.Element) -> Any
    +

    Check presence of model core charge density (non-linear core correction).

    source
    DFTK.index_G_vectorsMethod
    index_G_vectors(
    +    fft_size::Tuple,
    +    G::AbstractVector{<:Integer}
    +) -> Any
    +

    Return the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.

    source
    DFTK.interpolate_densityMethod
    interpolate_density(
    +    ρ_in,
    +    basis_in::PlaneWaveBasis,
    +    basis_out::PlaneWaveBasis
    +) -> Any
    +

    Interpolate a function expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.

    source
    DFTK.interpolate_kpointMethod
    interpolate_kpoint(
    +    data_in::AbstractVecOrMat,
    +    basis_in::PlaneWaveBasis,
    +    kpoint_in::Kpoint,
    +    basis_out::PlaneWaveBasis,
    +    kpoint_out::Kpoint
    +) -> Any
    +

    Interpolate some data from one $k$-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.

    source
    DFTK.irfftMethod
    irfft(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    f_fourier::AbstractArray
    +) -> Any
    +

    Perform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.

    source
    DFTK.irreducible_kcoordsMethod
    irreducible_kcoords(
    +    kgrid::MonkhorstPack,
    +    symmetries::AbstractVector{<:SymOp};
    +    check_symmetry
    +) -> Union{NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, Vector{Float64}}}, NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Float64}}, Vector{Float64}}}}
    +

    Construct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.

    source
    DFTK.is_metalMethod
    is_metal(eigenvalues, εF; tol) -> Bool
    +
    is_metal(eigenvalues, εF; tol)

    Determine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.

    source
    DFTK.k_to_equivalent_kpq_permutationMethod
    k_to_equivalent_kpq_permutation(
    +    basis::PlaneWaveBasis,
    +    qcoord
    +) -> Any
    +

    Return the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.

    source
    DFTK.kgrid_from_maximal_spacingMethod
    kgrid_from_maximal_spacing(
    +    lattice,
    +    spacing;
    +    kshift
    +) -> Union{MonkhorstPack, Vector{Int64}}
    +

    Build a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around $2π * 0.04 \AA^{-1}$).

    source
    DFTK.kgrid_from_minimal_n_kpointsMethod
    kgrid_from_minimal_n_kpoints(
    +    lattice,
    +    n_kpoints::Integer;
    +    kshift
    +) -> Union{MonkhorstPack, Vector{Int64}}
    +

    Selects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of $k$-points are used. The distribution of $k$-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.

    source
    DFTK.kpath_get_kcoordsMethod
    kpath_get_kcoords(
    +    kinter::Brillouin.KPaths.KPathInterpolant{D}
    +) -> Any
    +

    Return kpoint coordinates in reduced coordinates

    source
    DFTK.kpq_equivalent_blochwave_to_kpqMethod
    kpq_equivalent_blochwave_to_kpq(
    +    basis,
    +    kpt,
    +    q,
    +    ψk_plus_q_equivalent
    +) -> NamedTuple{(:kpt, :ψk), _A} where _A<:Tuple{Kpoint, Any}
    +

    Create the Fourier expansion of $ψ_{k+q}$ from $ψ_{[k+q]}$, where $[k+q]$ is in basis.kpoints. while $k+q$ may or may not be inside.

    If $ΔG ≔ [k+q] - (k+q)$, then we have that

    \[ ∑_G \hat{u}_{[k+q]}(G) e^{i(k+q+G)·r} &= ∑_{G'} \hat{u}_{k+q}(G'-ΔG) e^{i(k+q+ΔG+G')·r},\]

    hence

    \[ u_{k+q}(G) = u_{[k+q]}(G + ΔG).\]

    source
    DFTK.krange_spinMethod
    krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any
    +

    Return the index range of $k$-points that have a particular spin component.

    source
    DFTK.kwargs_scf_checkpointsMethod
    kwargs_scf_checkpoints(
    +    basis::DFTK.AbstractBasis;
    +    filename,
    +    callback,
    +    diagtolalg,
    +    ρ,
    +    ψ,
    +    save_ψ,
    +    kwargs...
    +) -> NamedTuple{(:callback, :diagtolalg, :ψ, :ρ), _A} where _A<:Tuple{ComposedFunction{ScfDefaultCallback, ScfSaveCheckpoints}, AdaptiveDiagtol, Any, Any}
    +

    Transparently handle checkpointing by either returning kwargs for self_consistent_field, which start checkpointing (if no checkpoint file is present) or that continue a checkpointed run (if a checkpoint file can be loaded). filename is the location where the checkpoint is saved, save_ψ determines whether orbitals are saved in the checkpoint as well. The latter is discouraged, since generally slow.

    source
    DFTK.list_pspFunction
    list_psp() -> Any
    +list_psp(element; family, functional, core) -> Any
    +
    list_psp(element; functional, family, core)

    List the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.

    Examples

    julia> list_psp(; family="hgh")

    will list all HGH-type pseudopotentials and

    julia> list_psp(; family="hgh", functional="lda")

    will only list those for LDA (also known as Pade in this context) and

    julia> list_psp(:O, core=:semicore)

    will list all oxygen semicore pseudopotentials known to DFTK.

    source
    DFTK.load_pspMethod
    load_psp(
    +    key::AbstractString;
    +    kwargs...
    +) -> Union{PspHgh{Float64}, PspUpf}
    +

    Load a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.

    source
    DFTK.load_scfresFunction
    load_scfres(filename::AbstractString) -> Any
    +load_scfres(
    +    filename::AbstractString,
    +    basis;
    +    skip_hamiltonian,
    +    strict
    +) -> Any
    +

    Load back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.

    If basis is nothing, the basis is also loaded and reconstructed from the file, in which case architecture=CPU(). If a basis is passed, this one is used, which can be used to continue computation on a slightly different model or to avoid the cost of rebuilding the basis. If the stored basis and the passed basis are inconsistent (e.g. different FFT size, Ecut, k-points etc.) the load_scfres will error out.

    By default the energies and ham (Hamiltonian object) are recomputed. To avoid this, set skip_hamiltonian=true. On errors the routine exits unless strict=false in which case it tries to recover from the file as much data as it can, but then the resulting scfres might not be fully consistent.

    No compatibility guarantees

    No guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions (including patch versions) or stop working / be removed in the future.

    source
    DFTK.model_DFTMethod
    model_DFT(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector},
    +    xc::Xc;
    +    extra_terms,
    +    kwargs...
    +) -> Model
    +

    Build a DFT model from the specified atoms, with the specified functionals.

    source
    DFTK.model_LDAMethod
    model_LDA(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector};
    +    kwargs...
    +) -> Model
    +

    Build an LDA model (Perdew & Wang parametrization) from the specified atoms. DOI:10.1103/PhysRevB.45.13244

    source
    DFTK.model_PBEMethod
    model_PBE(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector};
    +    kwargs...
    +) -> Model
    +

    Build an PBE-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.77.3865

    source
    DFTK.model_SCANMethod
    model_SCAN(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector};
    +    kwargs...
    +) -> Model
    +

    Build a SCAN meta-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.115.036402

    source
    DFTK.model_atomicMethod
    model_atomic(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector};
    +    extra_terms,
    +    kinetic_blowup,
    +    kwargs...
    +) -> Model
    +

    Convenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.

    source
    DFTK.mpi_nprocsFunction
    mpi_nprocs() -> Int64
    +mpi_nprocs(comm) -> Int64
    +

    Number of processors used in MPI. Can be called without ensuring initialization.

    source
    DFTK.multiply_ψ_by_blochwaveMethod
    multiply_ψ_by_blochwave(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    f_real,
    +    q
    +) -> Any
    +
    multiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)

    Return the Fourier coefficients for the Bloch waves $f^{\rm real}_{q} ψ_{k-q}$ in an element of basis.kpoints equivalent to $k-q$.

    source
    DFTK.newtonMethod
    newton(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ0;
    +    tol,
    +    tol_cg,
    +    maxiter,
    +    callback,
    +    is_converged
    +) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm, :runtime_ns), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String, UInt64}
    +
    newton(basis::PlaneWaveBasis{T}, ψ0;
    +       tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),
    +       is_converged=ScfConvergenceDensity(tol))

    Newton algorithm. Be careful that the starting point needs to be not too far from the solution.

    source
    DFTK.next_compatible_fft_sizeMethod
    next_compatible_fft_size(
    +    size::Int64;
    +    smallprimes,
    +    factors
    +) -> Int64
    +

    Find the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.

    source
    DFTK.next_densityFunction
    next_density(
    +    ham::Hamiltonian
    +) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Float64}
    +next_density(
    +    ham::Hamiltonian,
    +    nbandsalg::DFTK.NbandsAlgorithm
    +) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}
    +next_density(
    +    ham::Hamiltonian,
    +    nbandsalg::DFTK.NbandsAlgorithm,
    +    fermialg::AbstractFermiAlgorithm;
    +    eigensolver,
    +    ψ,
    +    eigenvalues,
    +    occupation,
    +    kwargs...
    +) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}
    +

    Obtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.

    source
    DFTK.norm_cplxMethod
    norm_cplx(x) -> Any
    +

    Complex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.

    source
    DFTK.overlap_Mmn_k_kpbMethod
    overlap_Mmn_k_kpb(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    ik,
    +    ikpb,
    +    G_shift,
    +    n_bands
    +) -> Any
    +

    Computes the matrix $[M^{k,b}]_{m,n} = \langle u_{m,k} | u_{n,k+b} \rangle$ for given k, kpb = $k+b$.

    G_shift is the "shifting" vector, correction due to the periodicity conditions imposed on $k \to ψ_k$. It is non zero if kpb is taken in another unit cell of the reciprocal lattice. We use here that: $u_{n(k + G_{\rm shift})}(r) = e^{-i*\langle G_{\rm shift},r \rangle} u_{nk}$.

    source
    DFTK.phonon_modesMethod
    phonon_modes(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    dynmat
    +) -> NamedTuple{(:frequencies, :vectors), _A} where _A<:Tuple{Any, Any}
    +

    Solve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).

    source
    DFTK.plot_bandstructureFunction

    Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u"eV" (electron volts).

    source
    DFTK.plot_dosFunction

    Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.

    source
    DFTK.psp_local_polynomialFunction
    psp_local_polynomial(T, psp::PspHgh) -> Any
    +psp_local_polynomial(T, psp::PspHgh, t) -> Any
    +

    The local potential of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) / (t^2 exp(t^2 / 2))$ where $t = r_\text{loc} q$ and Q is a polynomial of at most degree 8. This function returns Q.

    source
    DFTK.psp_projector_polynomialFunction
    psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any
    +psp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any
    +

    The nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) exp(-t^2 / 2)$ where $t = r_l q$ and Q is a polynomial. This function returns Q.

    source
    DFTK.qcut_psp_localMethod
    qcut_psp_local(psp::PspHgh{T}) -> Any
    +

    Estimate an upper bound for the argument q after which abs(eval_psp_local_fourier(psp, q)) is a strictly decreasing function.

    source
    DFTK.qcut_psp_projectorMethod
    qcut_psp_projector(psp::PspHgh{T}, i, l) -> Any
    +

    Estimate an upper bound for the argument q after which eval_psp_projector_fourier(psp, q) is a strictly decreasing function.

    source
    DFTK.r_vectorsMethod
    r_vectors(
    +    basis::PlaneWaveBasis
    +) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real
    +
    r_vectors(basis::PlaneWaveBasis)

    The list of $r$ vectors, in reduced coordinates. By convention, this is in [0,1)^3.

    source
    DFTK.r_vectors_cartMethod
    r_vectors_cart(basis::PlaneWaveBasis) -> Any
    +
    r_vectors_cart(basis::PlaneWaveBasis)

    The list of $r$ vectors, in cartesian coordinates.

    source
    DFTK.radial_hydrogenicMethod
    radial_hydrogenic(
    +    r::AbstractArray{T<:Real, 1},
    +    n::Integer
    +) -> Any
    +radial_hydrogenic(
    +    r::AbstractArray{T<:Real, 1},
    +    n::Integer,
    +    α::Real
    +) -> Any
    +

    Radial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.

    Arguments

    • r: radial grid
    • n: principal quantum number
    • α: diffusivity, $\frac{Z}/{a}$ where $Z$ is the atomic number and $a$ is the Bohr radius.
    source
    DFTK.random_densityMethod
    random_density(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    n_electrons::Integer
    +) -> Any
    +

    Build a random charge density normalized to the provided number of electrons.

    source
    DFTK.read_w90_nnkpMethod
    read_w90_nnkp(
    +    fileprefix::String
    +) -> NamedTuple{(:nntot, :nnkpts), Tuple{Int64, Vector{NamedTuple{(:ik, :ikpb, :G_shift), Tuple{Int64, Int64, Vector{Int64}}}}}}
    +

    Read the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. "wannier90.x -pp prefix") Returns:

    1. the array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).
    2. the number 'nntot' of neighbors per k point.

    TODO: add the possibility to exclude bands

    source
    DFTK.reducible_kcoordsMethod
    reducible_kcoords(
    +    kgrid::MonkhorstPack
    +) -> NamedTuple{(:kcoords,), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}}
    +

    Construct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid

    source
    DFTK.run_wannier90Function

    Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.

    Experimental feature

    Currently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.

    source
    DFTK.save_bandsMethod
    save_bands(
    +    filename::AbstractString,
    +    band_data::NamedTuple;
    +    save_ψ
    +)
    +

    Write the computed bands to a file. On all processes, but the master one the filename is ignored. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.

    Changes to data format reserved

    No guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.

    source
    DFTK.save_scfresMethod
    save_scfres(
    +    filename::AbstractString,
    +    scfres::NamedTuple;
    +    save_ψ,
    +    extra_data,
    +    compress,
    +    save_ρ
    +) -> Any
    +

    Save an scfres obtained from self_consistent_field to a file. On all processes but the master one the filename is ignored. The format is determined from the file extension. Currently the following file extensions are recognized and supported:

    • jld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. Note that this file is also a valid HDF5 file, which can thus similarly be read by external non-Julia libraries such as h5py or similar. See Saving SCF results on disk and SCF checkpoints for details.
    • vts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density, optionally bands and some metadata.
    • json: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, some information about the basis, eigenvalues, Fermi level etc.

    Keyword arguments:

    • save_ψ: Save the orbitals as well (may lead to larger files). This is the default for jld2, but false for all other formats, where this is considerably more expensive.
    • save_ρ: Save the density as well (may lead to larger files). This is the default for all but json.
    • extra_data: Additional data to place into the file. The data is just copied like fp["key"] = value, where fp is a JLD2.JLDFile, WriteVTK.vtk_grid and so on.
    • compress: Apply compression to array data. Requires the CodecZlib package to be available.
    Changes to data format reserved

    No guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.

    source
    DFTK.scatter_kpts_blockMethod
    scatter_kpts_block(
    +    basis::PlaneWaveBasis,
    +    data::Union{Nothing, AbstractArray}
    +) -> Any
    +

    Scatter the data of a quantity depending on k-Points from the master process to the child processes and return it as a Vector{Array}, where the outer vector is a list over all k-points. On non-master processes nothing may be passed.

    source
    DFTK.scf_anderson_solverFunction
    scf_anderson_solver(
    +
    +) -> DFTK.var"#anderson#693"{DFTK.var"#anderson#692#694"{Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, Int64}}
    +scf_anderson_solver(m; kwargs...) -> DFTK.var"#anderson#693"
    +

    Create a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.

    source
    DFTK.scf_damping_quadratic_modelMethod
    scf_damping_quadratic_model(
    +    info,
    +    info_next;
    +    modeltol
    +) -> NamedTuple{(:α, :relerror), _A} where _A<:Tuple{Any, Any}
    +

    Use the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.

    source
    DFTK.scf_damping_solverFunction
    scf_damping_solver(
    +
    +) -> DFTK.var"#fp_solver#689"{DFTK.var"#fp_solver#688#690"}
    +scf_damping_solver(
    +    β
    +) -> DFTK.var"#fp_solver#689"{DFTK.var"#fp_solver#688#690"}
    +

    Create a damped SCF solver updating the density as x = β * x_new + (1 - β) * x

    source
    DFTK.scfres_to_dictMethod
    scfres_to_dict(
    +    scfres::NamedTuple;
    +    kwargs...
    +) -> Dict{String, Any}
    +

    Convert an scfres to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis as well as the band_data_to_dict functions, which are called by this function and their outputs merged. Only the master process returns meaningful data.

    Some details on the conventions for the returned data:

    • ρ: (fftsize[1], fftsize[2], fftsize[3], nspin) array of density on real-space grid.
    • energies: Dictionary / subdirectory containing the energy terms
    • converged: Has the SCF reached convergence
    • norm_Δρ: Most recent change in ρ during an SCF step
    • occupation_threshold: Threshold below which orbitals are considered unoccupied
    • nbandsconverge: Number of bands that have been fully converged numerically.
    • n_iter: Number of iterations.
    source
    DFTK.select_eigenpairs_all_kblocksMethod
    select_eigenpairs_all_kblocks(eigres, range) -> Any
    +

    Function to select a subset of eigenpairs on each $k$-Point. Works on the Tuple returned by diagonalize_all_kblocks.

    source
    DFTK.self_consistent_fieldMethod
    self_consistent_field(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real;
    +    ρ,
    +    ψ,
    +    tol,
    +    is_converged,
    +    maxiter,
    +    mixing,
    +    damping,
    +    solver,
    +    eigensolver,
    +    diagtolalg,
    +    nbandsalg,
    +    fermialg,
    +    callback,
    +    compute_consistent_energies,
    +    response
    +) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :runtime_ns), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}
    +
    self_consistent_field(basis; [tol, mixing, damping, ρ, ψ])

    Solve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where $ρ_\text{next} = α P^{-1} (ρ_\text{out} - ρ_\text{in})$.

    Overview of parameters:

    • ρ: Initial density
    • ψ: Initial orbitals
    • tol: Tolerance for the density change ($\|ρ_\text{out} - ρ_\text{in}\|$) to flag convergence. Default is 1e-6.
    • is_converged: Convergence control callback. Typical objects passed here are ScfConvergenceDensity(tol) (the default), ScfConvergenceEnergy(tol) or ScfConvergenceForce(tol).
    • maxiter: Maximal number of SCF iterations
    • mixing: Mixing method, which determines the preconditioner $P^{-1}$ in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()
    • damping: Damping parameter $α$ in the above equation. Default is 0.8.
    • nbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.
    • callback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.
    source
    DFTK.simpsonFunction
    simpson(x, y)

    Integrate y(x) over x using Simpson's method quadrature.

    source
    DFTK.solve_ΩplusKMethod
    solve_ΩplusK(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    rhs,
    +    occupation;
    +    callback,
    +    tol
    +) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), _A} where _A<:Tuple{Any, Bool, Any, Any, Int64}
    +
    solve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;
    +             tol=1e-10, verbose=false) where {T}

    Return δψ where (Ω+K) δψ = rhs

    source
    DFTK.solve_ΩplusK_splitMethod
    solve_ΩplusK_split(
    +    ham::Hamiltonian,
    +    ρ::AbstractArray{T},
    +    ψ,
    +    occupation,
    +    εF,
    +    eigenvalues,
    +    rhs;
    +    tol,
    +    tol_sternheimer,
    +    verbose,
    +    occupation_threshold,
    +    q,
    +    kwargs...
    +)
    +

    Solve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).

    source
    DFTK.spglib_standardize_cellMethod
    spglib_standardize_cell(
    +    lattice::AbstractArray{T},
    +    atom_groups,
    +    positions
    +) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
    +spglib_standardize_cell(
    +    lattice::AbstractArray{T},
    +    atom_groups,
    +    positions,
    +    magnetic_moments;
    +    correct_symmetry,
    +    primitive,
    +    tol_symmetry
    +) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
    +

    Returns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.

    source
    DFTK.sphericalbesselj_fastMethod
    sphericalbesselj_fast(l::Integer, x) -> Any
    +
    sphericalbesselj_fast(l::Integer, x::Number)

    Returns the spherical Bessel function of the first kind jl(x). Consistent with https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.

    source
    DFTK.spin_componentsMethod
    spin_components(
    +    spin_polarization::Symbol
    +) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}
    +

    Explicit spin components of the KS orbitals and the density

    source
    DFTK.split_evenlyMethod
    split_evenly(itr, N) -> Any
    +

    Split an iterable evenly into N chunks, which will be returned.

    source
    DFTK.standardize_atomsFunction
    standardize_atoms(
    +    lattice,
    +    atoms,
    +    positions
    +) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
    +standardize_atoms(
    +    lattice,
    +    atoms,
    +    positions,
    +    magnetic_moments;
    +    kwargs...
    +) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}
    +

    Apply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.

    source
    DFTK.symmetries_preserving_kgridMethod
    symmetries_preserving_kgrid(symmetries, kcoords) -> Any
    +

    Filter out the symmetry operations that don't respect the symmetries of the discrete BZ grid

    source
    DFTK.symmetries_preserving_rgridMethod
    symmetries_preserving_rgrid(symmetries, fft_size) -> Any
    +

    Filter out the symmetry operations that don't respect the symmetries of the discrete real-space grid

    source
    DFTK.symmetrize_forcesMethod
    symmetrize_forces(model::Model, forces; symmetries)
    +

    Symmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i]

    source
    DFTK.symmetrize_stressesMethod
    symmetrize_stresses(model::Model, stresses; symmetries)
    +

    Symmetrize the stress tensor, given as a Matrix in cartesian coordinates

    source
    DFTK.symmetrize_ρMethod
    symmetrize_ρ(
    +    basis,
    +    ρ::AbstractArray{T};
    +    symmetries,
    +    do_lowpass
    +) -> Any
    +

    Symmetrize a density by applying all the basis (by default) symmetries and forming the average.

    source
    DFTK.symmetry_operationsFunction
    symmetry_operations(
    +    lattice,
    +    atoms,
    +    positions
    +) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
    +symmetry_operations(
    +    lattice,
    +    atoms,
    +    positions,
    +    magnetic_moments;
    +    tol_symmetry,
    +    check_symmetry
    +) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
    +

    Return the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.

    source
    DFTK.symmetry_operationsMethod
    symmetry_operations(
    +    hall_number::Integer
    +) -> Vector{SymOp{Float64}}
    +

    Return the Symmetry operations given a hall_number.

    This function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.

    The definition of hall_number is found at Space group type.

    source
    DFTK.synchronize_deviceMethod
    synchronize_device(_::DFTK.AbstractArchitecture)
    +

    Synchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).

    source
    DFTK.to_cpuMethod
    to_cpu(x::AbstractArray) -> Array
    +

    Transfer an array from a device (typically a GPU) to the CPU.

    source
    DFTK.to_deviceMethod
    to_device(_::DFTK.CPU, x) -> Any
    +

    Transfer an array to a particular device (typically a GPU)

    source
    DFTK.todictMethod
    todict(energies::Energies) -> Dict
    +

    Convert an Energies struct to a dictionary representation

    source
    DFTK.todictMethod
    todict(model::Model) -> Dict{String, Any}
    +

    Convert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).

    Some details on the conventions for the returned data:

    • lattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension
    • atomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.
    • atomic_symbols: Atomic symbols if known.
    • terms: Some rough information on the terms used for the computation.
    • n_electrons: Number of electrons, may be missing if εF is fixed instead
    • εF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.
    source
    DFTK.todictMethod
    todict(basis::PlaneWaveBasis) -> Dict{String, Any}
    +

    Convert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.

    Some details on the conventions for the returned data:

    • dvol: Volume element for real-space integration
    • variational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.
    • kweights: Weights for the k-points, summing to 1.0
    source
    DFTK.total_local_potentialMethod
    total_local_potential(ham::Hamiltonian) -> Any
    +

    Get the total local potential of the given Hamiltonian, in real space in the spin components.

    source
    DFTK.transfer_blochwaveMethod
    transfer_blochwave(
    +    ψ_in,
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real
    +) -> Any
    +

    Transfer Bloch wave between two basis sets. Limited feature set.

    source
    DFTK.transfer_blochwave_kptMethod
    transfer_blochwave_kpt(
    +    ψk_in,
    +    basis::PlaneWaveBasis,
    +    kpt_in,
    +    kpt_out,
    +    ΔG
    +) -> Any
    +

    Transfer an array ψk_in expanded on kpt_in, and produce $ψ(r) e^{i ΔG·r}$ expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.

    source
    DFTK.transfer_blochwave_kptMethod
    transfer_blochwave_kpt(
    +    ψk_in,
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt_in::Kpoint,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt_out::Kpoint
    +) -> Any
    +

    Transfer an array ψk defined on basisin $k$-point kptin to basisout $k$-point kptout.

    source
    DFTK.transfer_densityMethod
    transfer_density(
    +    ρ_in,
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real
    +) -> Any
    +

    Transfer density (in real space) between two basis sets.

    This function is fast by transferring only the Fourier coefficients from the small basis to the big basis.

    Note that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity $c_G = c_{-G}^\ast$ does not fully hold).

    Note further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.

    source
    DFTK.transfer_mappingMethod
    transfer_mapping(
    +    basis_in::PlaneWaveBasis,
    +    basis_out::PlaneWaveBasis
    +) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}
    +

    Compute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).

    source
    DFTK.transfer_mappingMethod
    transfer_mapping(
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt_in::Kpoint,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt_out::Kpoint
    +) -> Tuple{Any, Any}
    +

    Compute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).

    source
    DFTK.trapezoidalFunction
    trapezoidal(x, y)

    Integrate y(x) over x using trapezoidal method quadrature.

    source
    DFTK.unfold_bzMethod
    unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis
    +

    " Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).

    source
    DFTK.versioninfoFunction
    versioninfo()
    +versioninfo(io::IO)
    +
    DFTK.versioninfo([io::IO=stdout])

    Summary of version and configuration of DFTK and its key dependencies.

    source
    DFTK.weighted_ksumMethod
    weighted_ksum(basis::PlaneWaveBasis, array) -> Any
    +

    Sum an array over kpoints, taking weights into account

    source
    DFTK.write_w90_eigMethod
    write_w90_eig(fileprefix::String, eigenvalues; n_bands)
    +

    Write the eigenvalues in a format readable by Wannier90.

    source
    DFTK.write_w90_winMethod
    write_w90_win(
    +    fileprefix::String,
    +    basis::PlaneWaveBasis;
    +    bands_plot,
    +    wannier_plot,
    +    kwargs...
    +)
    +

    Write a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.

    source
    DFTK.write_wannier90_filesMethod
    write_wannier90_files(
    +    preprocess_call,
    +    scfres;
    +    n_bands,
    +    n_wannier,
    +    projections,
    +    fileprefix,
    +    wannier_plot,
    +    kwargs...
    +)
    +

    Shared file writing code for Wannier.jl and Wannier90.

    source
    DFTK.ylm_realMethod
    ylm_real(
    +    l::Integer,
    +    m::Integer,
    +    rvec::AbstractArray{T, 1}
    +) -> Any
    +

    Returns the (l,m) real spherical harmonic Ylm(r). Consistent with https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics

    source
    DFTK.zeros_likeFunction
    zeros_like(X::AbstractArray) -> Any
    +zeros_like(
    +    X::AbstractArray,
    +    T::Type,
    +    dims::Integer...
    +) -> Any
    +

    Create an array of same "array type" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.

    source
    DFTK.@timingMacro

    Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.

    source
    DFTK.Smearing.entropyMethod

    Entropy. Note that this is a function of the energy x, not of occupation(x). This function satisfies s' = x f' (see https://www.vasp.at/vasp-workshop/k-points.pdf p. 12 and https://arxiv.org/pdf/1805.07144.pdf p. 18.

    source
    DFTK.Smearing.occupationFunction
    occupation(S::SmearingFunction, x)

    Occupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.

    source
    diff --git a/v0.6.16/assets/0_pregenerate.jl b/v0.6.16/assets/0_pregenerate.jl new file mode 100644 index 0000000000..082d73dda8 --- /dev/null +++ b/v0.6.16/assets/0_pregenerate.jl @@ -0,0 +1,76 @@ +using MKL +using DFTK +using LinearAlgebra +setup_threading(; n_blas=2) + +let + include("../../../../examples/convergence_study.jl") + + result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol) + nkpt_conv = result.nkpt_conv + p = plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log, + xlabel="k-grid", ylabel="energy absolute error", label="") + savefig(p, "convergence_study_kgrid.png") + + result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol) + p = plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log, + xlabel="Ecut", ylabel="energy absolute error", label="") + savefig(p, "convergence_study_ecut.png") +end + +let + include("../../../../examples/pseudopotentials.jl") + function run_scf(Ecut, psp) + println("Ecut = $Ecut") + println("----------------------------------------------------") + a = 5.0 + lattice = a * Matrix(I, 3, 3) + atoms = [ElementPsp(:Si; psp)] + positions = [zeros(3)] + + model = model_LDA(lattice, atoms, positions; temperature=1e-2) + basis = PlaneWaveBasis(model; Ecut, kgrid=[8, 8, 8]) + self_consistent_field(basis; tol=1e-8) + end + + function converge_Ecut(Ecuts, psp, tol) + energy_ref = run_scf(Ecuts[end], psp).energies.total + energies = [] + for Ecut in Ecuts + energy = run_scf(Ecut, psp).energies.total + push!(energies, energy) + if abs(energy - energy_ref) < tol + break + end + end + n_energies = length(energies) + errors = abs.(energies .- energy_ref) + iconv = findfirst(errors .< tol) + (; Ecuts=Ecuts[begin:n_energies], errors, + Ecut_conv=Ecuts[iconv], error_conv=errors[iconv]) + end + + n_atoms = 1 + Ecuts = 4:2:140 + tol_mev_at = 1.0u"meV" / n_atoms + tol = austrip(tol_mev_at) + + conv_upf = converge_Ecut(Ecuts, psp_upf, tol) + println("UPF: $(conv_upf.Ecut_conv)") + + conv_hgh = converge_Ecut(Ecuts, psp_hgh, tol) + println("HGH: $(conv_hgh.Ecut_conv)") + + plt = plot(; yaxis=:log10, xlabel="Ecut [Eh]", ylabel="Error [Eh]") + plot!(plt, conv_hgh.Ecuts, conv_hgh.errors, label="HGH", + markers=true, linewidth=3) + plot!(plt, conv_upf.Ecuts, conv_upf.errors, label="PseudoDojo NC SR LDA UPF", + markers=true, linewidth=3) + hline!(plt, [tol], label="tol = $(round(typeof(1u"meV"), tol_mev_at, digits=3)) / atom", + color=:grey, linestyle=:dash) + scatter!(plt, [conv_hgh.Ecut_conv, conv_upf.Ecut_conv], + [conv_hgh.error_conv, conv_upf.error_conv], + color=:grey, label="", markers=:star, markersize=7) + yticks!(plt, [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8]) + savefig(plt, "si_pseudos_ecut_convergence.png") +end diff --git a/v0.6.16/assets/convergence_study_ecut.png b/v0.6.16/assets/convergence_study_ecut.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2b01bb0bdcd648f34b05dfc9d0af63ec2271b2 GIT binary patch literal 87469 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�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

    w((=JV7!N`4{r3(@{N`zot*lSyzWze z%a8KZ_&g3PUd_qn_d-%r9Sz`W?Xx@-^Xw(J;fp(lS?`xO3(2C7>ZxGcYc=1Tp~C6F z(|Feg%df;M{BnBSLe4fVivD+tmi#uMrZNAHFPk00F6Z0DhRxmmU9cZ4j`Tb~zU#w_$d9RS9F4|GJS7}*rCN2(J)qgNF_RD8oekoCh z3LQpOU5iS}%x=4>uEo7nJ71J#;U<6o2925uka2G9=O-#-(gLz_$?GJ@OE9Rt-p`>U zsZCQsgk4SN$_Ffrh0(a}*tEe>jR zF|LQ8tqQy4=~@rmi+g@>`5BdN5w?oyiqIE!I;k$)&+zc8ggBK1O($3F!JbL0=-I{B z%8IeJ%%<(<4!^7VUSnA0c1~Up(qlM-!T}8btNnYs;6~}brQ?t!u>MH-mn|;y3s2JH zqH7O+t3EwCmu~m&)uOZn#l|~9j|0CI1#-{P0x*hW0ApF0O9FYL{EU%!q~zYamolKz z(XiBEL%Qpj{ie>kQN_NK=fp88F!REzwd-69k&AwERQ=%eI&EL?Km#udLkYak&R$?VDRM~3YM6}y ztqfGZUYMJ*kPmtNb%3yxl+Wrl&3L&!Z>v2h@eO(iv<05)>98z2y^$0&VbvsH(+ykU zSxUxzai8Z~B`2G?)lO_D?;p)~{`*Rrd@M9a6{#c`!sg6*PHg)3O~S8p{d!=){HSj+ zhKH)I>PZ+vg8}fVM!vZ?)r^a82zN1Wi$zU4ZmAQM-)jzaCD!*re_-{lRe|N-igp0^RIcl5E&8nZPJV}U{ zGtB?Tz3K0R*Xwr5J0dL1IlE@R$=XZAqIA4f@RwK7z^Mb|2Ri!$ENN6BC459od8UJ2 zFC1XN@6`=VY+>2lyqwCCe!hD5jsTMk3cJHY2hgGWH4@QZgwuef8ZYb)-~kY zbvkDE?QEnR^R(oZ)C@Oa4Y>u=WM`+axud5ST*ECMaWbIjyn%wkUg;^B&q{h8j*2_- zfwAVyS~_V%Dc8_;C0@_NZ&N%c?zVC1y(`bt%p6~H?gSfyRGgW-kVxlo3D2U#fN!#RKyQim2m83M9TW0mvJHLrv`&^YsI&a%$~dErlv(s+-?EWkp{`5{RKI8 z{?U)Bjn$jIxS2ROI2hqt0y|@e!6&)wv2k&G{N9>R9a}3XgE>^_reD6CC-<%^x7!xQ zX)q5?ojwgw2(*CR7D-7=OiXB)u7M{R64o`)h{EpxB0C+O_1!BUa_On522(c~fw}U5 zAeBSa01p37yH9)ynp=t7RP*5ARnql{!C~tDuMG@BJJtUZI=oIJMcqO#cp0QG&?RWN z4ZWW{>B?S3>1WiPFuJg3&xwu)Af~7lzrUxdqnzAJ-q3rKk$@4sNA!X)HEX18M)v9O zQ1B1RFSM5pYW%l`W{yVcMKO~jeZ*7P@5_tKJM?ZDyhw9?bB~fQ_aaN6WF-0Ew@K;^ z`>|@1nt!pUXf-2^BN_RWK0D=Zc-B4nrM7m+mA-Qi6v=fmQiNr@B|q0dMSIYEl9|)R z#x8(nv|Vo8%7)1*H0ZL5$rF>lF1a^`G9@l<%! zP$>C|4)N+(A1D@(7f|~f>D+5~I0wBch zB|o|LDxKh9C)E_ZJGx7M-d!9SE9OOx3{F_%-1l@>LD59(6_O*b^mTs@kwibei`w)uV@$91fPpx{P%(m7BLv4%F`SV z`xbawhKBPb`5nj#DXObiclF2Cww!5b(7qI+oJPJItI9K624Nbqzqm&Y)i`ho|JJD9 z(anz3MXB`j-=4DyblqtTI!JzXvm3`BDEg(`x_qvMdvP~@i(K!uF*l$Yn8&V@6N>sy z>9=#=^10L91VD4&Ma{m@KJ>e_e1Pvxa*elp=q+#Ko)qRQ!#|f^-L8MHZWndpc(Ud3 zN`VJvy43GtYrl}6MWvT|Sf7JWV~q7Mj2h^d?>1@^vF$WF%((LpRunQ`?HPZg?=HX| zbUZ1^swJ}r-4OIaFfIoKZ*yo((4*GY*|oG-e}2t2o(b+9O{I&>>}tr_Xsf3Ygpe9w$|#FZLG`>`Vf1A~er z>AtE$Oi;o&4wy7O)nx1c`gI2im)o~T(+OclFED{L#S$yitHZZM$NKA!b?aW%nt z!1JJD3*zT6XiOp&L{=0VQWc(F>w%-30@0Fn8tl*SU;15rPcGiZ&7bty#_v~f)Ne_8 zF`RKcnTp2PH^dUEyKR){09qGM$Ls%X;&_er*R~>iOp&9}v5_gd+!)#uq`ErB=o3_* zj=#FaDEq*HL4#69XNi79iV#aL{}iugAQW>>_@wr4Hzg|ZBbv8Tb&E93$NL+rvV;G| ziqOX?3CaD|6F+`x96#QS1t&{yL z5WePuLj!WyowG3e1%q*4)oZ1t`w5~I)7@VG(Jb#_5GTdGqoxfzuP0Od5)Tax#p~o6 zI(@3U%ZA-rMUL>ZbGs}!x>=1rzY&>ff&fe1NJ{F@{n zm1Kr4EEbihs8_Q23hn)@tQBx^J#pew<4w|Go9R&_RaFe#($-nuUR&QL`{H8ihfVWL znj*i{()Lok^L)sia_Z(r&94Dx=wFU}QAns4n)wl<>5BI)m%3@`Im(S(RMxUT)zy-a z^xh}yTHN?y^oHY7uW{|H;=Xbhu=266yQVnUW9mOxiH%7EWj4!D{ok!QFR_Nr-F#qY zB#T>}iAB+pZ}-RG@m()m1Y7mGFN;qn6>~5vqm7TGUa^zxDJ4FZ|^Y zci+-2md*Wrqw&sD>)~UL>0)a&)-S}&`L|dIgCq^k3YJr{P#qrTI{M2|8YuGQ6Ou}T z+3fE>H987WuSs)S2ihS`kZBj}avLt1`Ve+pS{&mdCsG%7AhJMaD+sKwQ!Aio-CmEe>A)r z8u@VE>Q>pMDH9|G;pG7Q^Q2C?+plqb_y`gbvVrDdNUpjdXoXe^gOP|4(HA#oF3l4& z9fT965h}vS-y1!Mv34lSf}eL`@Ev${U9Iz?(oBMaa|l$=G%_w)Sq(w7wVj@RXmF5j z`}R>#lZ=gwAP#^F(sE}>&sS9+TA$5tI^L$-f5(BzZ{aSU2+k|Qrv{`4U7%zP z0*6*<`zG!yqlT%9FxP;yhOVTS1#1q5cVZxv?Isc1HDOlpKS4y5_v-d^U# zk`+a|>Hhcbbwc@0!Bwc=m9WH`@p5$;;Y~jOq=I7~yR=cDmR2w{1Ip*#k)QpG_OH9W!oSXMm5<-q-LFZygnw>* zH@ok#@05toS;{NLcSgr2|Lgs>M|QO0>74VB!@!*fKG7^bjTX(t>m{Ylv2`^Ma&u>b z*wK{V0nx8dvT_9hwrt$_@5XOdv-rjP( zOo=1c|K$IK4_wrvOiGzzNo$jImUtu;Y`fiX#J z!=6;NkJ@@(eJX5d|Ih!!i6qyIQ2%{T_m`RUp)Y6Zhm)yI2nR`)Bv6xqxm^eXf9JUB z(&{Y@y;f*wc)BBK{$~0^`N|M3|Ky{aLodBb8;^rU1^6mC;SXV+KKLPI3y$A=oJ+)a z68+CkFHXHfj zh^KRyVUT{70}vRML~Sb+CpiMNev+xS^)KU=ep=Mjw?OvN^T%^Vxq8P1GImb^^02Mp zTZD2rqvNE2fR_2{wQKovIF^3;a!#UXPc2JwZP(SR?|NSag=iS@*rTHMrv^NDaIqjE z?t0H(LSm_yZm~{+hR95lZs3@dt@P@cIMoC>x>Q>nBW*&&Np#$*XhQ8>(-N#C`8#WQ z*JbB7nvAC(8f#kZ|CmSWh^8hMR09nveA%^w=!60gH%I=hYMuB{^(R#s_Btc~=ORGO zHTMI@^$p0z13B)qPE`vNuraogG+Mg!Ulx|hEK_P3$YL5#B7oOK{`m`Ag~sn28O%VH zr7@7>Hf@(m%pk*_=8xh2d&`9nt&#dPaBvSs^}oN^zOl^26wUZ7n3S2r+}CRFu5Al(YxgUp4h{BS9*fsEpeCdRn&9oW31wzfkdnrfnhgdVp065$cqtd|Pj?fGpIAWjze2hgF$>0Q2{b$*yaSrODJV*@a z#7Y3p!TjPM6Eg@9x#rD78Sm&{*fK0Vfo_FjmpvUCigv8SXfy0?=Nl4CLO*X6!Z;w z7yMoNPmy-zxlLy#B?0mh@mI^`af9}QhhgjwBAMEDRla@sz-GMlXr!*y@L^-sEpu%B z*}t-oei1G!A`6!hPpf>K4lUCzyhgdorPp>oV4*luLDc$gnm;qKq3)aXkvVxFCZwWX zq`cr=Y}@J$8+QeK`t%9j{Orq^ z+q*Y%yxsWhun_aPDRrY7`ApliyTj49?@*0$@u5 zn{@uz6TALh(MuTPFflXV^%nPMnXITiD1Hb8B2345?yQqWu6704W7nbk?h)Q#s{Au> zAUn_-s)X1=asjLI1#m9R7nH>hxfpJ^Z6YEg4osVKsfK>GvF9TB!mjWdyxl}e*(GY) zn0w=N)}BKiVhl=;bM(pOq{>v_R9umdcl&(a@3kQ|R9&JklS{lgFdORFv3ifjm;XxV zRyr`q!%Ajg$Q2JZi+avNNh~*6+3Yhq|C$6rL}G0Q!#eNs?=^2M4u3`hW-)zA99{Ws zd-j-?^lOtDAuKh>jxZJt<9YdlZM;7@KDa#Rc{-Tl-_P$V9*!@`ja7xmIAerBEM{PERXf{%^WqcFle&|OYz)}WNHH><9S@VqUqSXL9UR%c zDf+v4?nchXpag|kAK8ue(08vo?OV&0LzZ5`1s8_@lmW6&?y{!uz7#fU*tU}L%C`Vw zzQbvbCoBh65>y{BbsS`L{>LBnL;y>|I7RRB=7UCd(k-Jm zcfUxPKN-*B!=B`{ADQ%0gdufr!cn8(<~9eK!=>u53BYdY zKb8BYnxM6Ghg@zvs?M~%x3}Yv@r$NKAV*|K4VdlJKQJ)RT1iK)7XP9`t|2ct@_L87 zAoxba*j-MYd>$Os_fj4n9N=^Z&lnhbAIw$(M0bVsn=I2TFhB%0x+h_CgQErp5jq7^ ziD$ukBSz5UzYs)pw}j~bmK%Ge1~+fqDE##w1->zdW?LGI6wZLEt|IYN@>3B68yfX? zCr9cJZ2lmu(n z(w4Pb_M*wK6?S#CD*jy&we6(75U0B5)`fs5h?+Vt>C| zBGds2L8Nha<1X(=upjX~Ax!rc^p`IUX&fU*B)PBTl?6dr$0V03{f-ZLb%RFzy4x zj{)t3FT`bH4$sHVMI>#`j+~+|$qg(*Ny`9>uX9bOCC3 z7>n6gD8m!i)bIWK_lT4)W7n3dBK6Lew6Z!p?0Gp8|EbJXIl1rZ`!9zDBxLJfJXETS zD%BXAS_OJvKDu=E;w&^}7(vt9&$hH+y&f2_3i%A;2X+PE9p~q7Tl()o>~dOXxX6pD z`>FZ~gxVess6C4(S&c77LQcv$C>qIJt;26e#-A zymClOFn0^^0ePen9B5{DZa5)#>ePQY(PWvF;be&c#qrGpIy#iyf+&;1s{&}ftgHpGsK&8P4p-V&M+y*A$m3FXKMzFb4=0%=^ed3I_ab@sm5k}RU#4$@DHljr5UkZu zW{5_SoOTvV1zreKP(9Sr!}7VmF0KkjV_?I6xxb4PbP9~#L3tn>(VZ=VjeG2=| zLv4bM{2i4Hlt{DBz=o3^rvd;>u32N{)t;4;FyhQY0ZGFHZnAON6j$;7VCw#Y#h`ey z)g0H7EAK8kZLn6m9}+b@#pprjXSumk;nu~b+@Tg*g98F;QA9AmzIyd)H{AV)D~h6& z1hEa6JKOe6vMDAH5*`@7V{qBrHFC@of+;yy$5Po2SdH?z*Q0Ie4jXtrIx|$75Vf1u zUV*L8h<%ZUe>B-@|j{ zD{5-?VJ>TS#Z#A}1$c3&t2UmTSQVEAUDUwN0z)IC^8<4g%ulFB*t=2NaQvQ3s@!Sp z``;UA7(=0Co<6#Ne-!%DK-yTX@Q}qB&F~;Rd=`aal&L(xQf_*ysOpINRmeGetYae1 z;|5TfD7(5e`wp0FquJ2hLv^K-@ln&5c8rO z9L6zJ8O22k^`H$Wu9xX!%%H!oZ$qC0_6it^P4x2e@}B+A5@1V!Fk~>;P6$0P+D%g{ zpkvK;c)i(_C7O9J-se4ExCXjFk1_sjxr@vU?1W1 z(C0wNGCf~<>GbsWicB;pw=y0fB^=m&Q!7y^t`djs544vOZGc+&4Zav2HUB4-9>)=Fh?CiAc>*mI$l<4g*vqjr?%s8cE;4!X}}Z zHSqv}^`5V9mS8as0QfAKDf>VfiA>J<$HxP0=KVliRjRVu+dVg#dhb?$#1Zm3PxXQs;?fi zix#N@(B>f0uj1JudzsH(?u0EaG2Hpf+>Vbtpv;$DTf@t5!_HZ{Q(gZ2&4hv4n0FAk zhJ=Tkr@jIVu{xqH{R^(>+9prnPpJYo?SXncIoe%S5x{jsiT*aiQ2S#p63b2CgcxiQ z3@plOI)LU7B20+9g*k-}r*t3wJ-= z0#~9bzcE#73J;{&@vOW&EO+CZo}%>1k$79+uAg5clPDCggj6cTbEU+2Dd_UeFNJIj zI`*@E-L6@beql*yX3*S?7lO#BVZKk;?Ner6W)wIF=3164KHQ*r(5g#;UvKK^xibJ8 zLnpUnMK>Ga4Fiv7^a@iPKMqU)KxMz*jzl5uh19C{|M2QL>O~NMJq&JRep|Xm#wm08 zM@K%t&3?-tIRty)#@1b2y0D4Oc;&O^C&&K%`UppwTB?mD3o}*O6QnKKU=aY-e-r4y;glJzucm4149Qh@fC0u%c$c z$0-qoV%V2znu3Vw-RDruCaQXJ^^l*`*1Dg@hP~N;-5L4q1aLkjD3(c?8kPG)kNORb1mh6KScd zZG;DT>lwCVJk-}(G<(ebP@2+Oh-)t&9sGs0sj+r-yIxtYd70jAFFUYXB=0W3*3tB( zSd;Ae;*~=siylR~dM5keHi{&~#PaZp?#HO+^8-jzK0_vyoL=1DZ%1G$AMS2&z(OYd zwAQ_T`_@d$-uo=tQI@{;2;b&@I3hp25H2m_SX}*yf7N3q0RdM~xikxa0r;FwT>cf+ z^js$8a8OTTtqDhy)mks}RGk7f^B)r~RULL$?Tj%-5M;sY-VP9V0yRqr4xj)BfZW`g zQ?iodAqmW_UhDTZd`U^TN+SJG3_^Vbjsp4l45eS6vkO&{2GtoU5$;V}v-%v*`0qV= z(XK9aoJ<}^+^ zIO^s%5$Zy}+>e~)utI{S5=SmD-;q!moQDXaz)c-!Qe&Q2e~`=72WQWn+au(X!vrSg%Mb%#B;H`Tfd-*BIxw$7#n8<^qlrnRzNi&bp4#@7$+Qe;Ex=fc0jWC zktQh#(Hur}U7c@MPEMgql$gZEfbJ{C^giz(RJM31*>jf>Zjs_~X*}0Q&_=ZGM91#? zC(Wx5xI<-djx=I`;L*c}hY;GI0JPz75`W#+HVeUj&QA`D3)6GE0?NzJ(tgzvUX*w} zD(*FlJ4Ua*z7@F8$KPKM-744zWC^S%Y6rN#y@pbTh)KW-t4 zkMB=ibEP?EEQ5RYE(9wxr+#rD=qEd|Fmb>8u&`?vNNV_`=q{ZpNkD{IjEUe70Y6~` z#>{9q5O@lrXreOdWWUm4KMvfg4<9@L4YGnq0Yz?h+A-pMHwOl5-yObFjsh|JtTepOPLAXlh?CxBer}cXacYeYx8GX|BII1CI zw6^Z<bN+hXtBv1fJkjXhB@`+;J!UOw zBa>C05#3QBSbYLDZfTW_8ieKC7S+i&l1zqt%2O(Mlp`#I5r_6TqYj+Wi+Jy;ruX~(*?+j?{iEU zu4@+qV8Akxz#IU)$&)_OR0HGDo@;D2kfwN0Uac*4WS*GzwWI`=mgH=i+P^amG!JUt46c&?6or zA7NhudbT$vSP^G~cBa@2tOD>C0C^E3j{z;hSGTH)9fu&&9kix9pI^9c^t2Ro8H5+B z-2SVhAY)ne0|15zUde140$xIgKV<^c*^e}QMNOP}n~mT+CZ%(*n*|3U78SqkmmA)Y z!EXHGs9%t0gWMf!*eo-77JJSFrXMx zUzI1NrUo9xEBvBdLb!l)nvtYu1{DH^J9Q}|slA$LwY$d>Xbg<2d#=%#_EzQi8lmFC zd9w{s`_;2PqSHmye@Yc=r`qi`3vlxU)7rf)>i+$0sTX)?(zRb+jOj)E zcT@snxwAl^ct6F%K{TwO%ukkjurMAV_dp4yIdqnG^OE z*y-B?fX{P)&=_fB5pc9umZl=zmIz;kQRD&$pIBsvnjO=L5GvU zC;ELjUk$f<;0tyPB`P2)y!dnsb&P*hpCK8^Q(6w0$bMebDR>RWZxexDMqQ1a*f@rfrTxgA^(t7KvSxuY)6<$u#b+6 zxuO|+SYB3G^fqd$+-sUDtErBv(q=iX2v{M0-a+(!?;Cf!#T~nEiLKrJva2T9emKH) zDAZ8j*uy>~FYkou@j4p46|du%9lmgqm?Towq+_ncUZpr*=r*my=6dDIozH}_5!IVd zAKT99tynDvtPM{JYZD65WH2pvY^S3u0$R6KfZ3+Jn_J-l_A*nhrpKY7eXyHUCx(3Y zJ&0d0-C~jma0hxdC^Hn-q7+y#r|~6j_h3$X(OgK@t{wU_S;y$IHB;vyA~=s%4-mq> z{@RC*&_hs12UR)_+HQTs)F)sG^FSjbqoP^g#`vPPO^b^clu*3tPaVUi257u%G`Q;p z26^4QdGq%O6OQwmO|*UNUYP3#r->MsO}qUiV<>OS4Iq_RymJ#_qv(}RR>{gA=kHV9 zKNes2N@cH*ivxr#Ultw^g$AI|W0T6^_&}byF+}sEWJpyS0kz*`mXvtL%u?*G2k{3( z<`pP`#yCXY7QF#}dVNhQF3EX6uRed)I@wRHtxcDC_U{+vIK<36aQ@&a7w2EU ze%;S0T-QnQWoYlU{fR0`&Sxdoq%JOA+kb+epC&;|RQlMlW3)(WG@8b!MYr7m$?5Kz zKF(G5w|1`da-sD7?+_HJXP=p%6hs&k68FMc?GENcht8Jp%7^o& z*6OVFjgO9I0AB*&@yi7`wH8>`B%Of;2Hu#)sIU0D2DbZ~w{-piLoS`;OV3k4bqY{4isN%m2H+>K!8k*0p(!c&zi;JMUY zfmzX@Q*5pmu35xo{A_O#>TCByLYP9XP93pgAy&@<8kid{Dkrpc{Cra{yHp zAZp4g6l5;E=81w4wq_@Q5n=-CPypDa>8NnP*OMplCK7cIxTxZ-Me*DKET6-n@MaF}rt9en@mZ7i_hV zNpZjzc=rjqbtX#C6*x@rk;0uma)fgKNp z`*6?#53{C@RI%-$TFoN*;#c>Gc&SI>b!mTCJ{G6No{Kfiu8i0EA9r>v_h40H`+EnCxx zRs=+(ADw6z-MJkS5(4$lc|U%nNDwnf=&b5_y;B%%71Q7ieby^X=%9>Yb5Cl?Hdh}U zalk^t7|JIay6_b`{Z5w@|1;r<2Tl(yF|n&3&aktw@mhCsRG)hB{5eQ^vd1R3Tzpeh~Gv^^WNR>Qtz=$o5046Klspj`DLD+`f<@LI)WaK^M(iE7D! zt}_5qXQg@2h=vij9kPqJ9`vOJD2%iq;i`WBo+xGZ_BJD%wDlHORIJ6m2@eW#`261* z+dI@^+XRJ#@F7X|DVRd_21!bsq9Ya$-bgvW4hRppH5_H16jg3ueZtyA6Lafd7B8B7nVHoaEjE$F} zt)>=l@9Kq221HQRXDaX&bsMie13S~49BjHAP8OE4($aVD-Se0kf2MMhf#D)9qq@Ph z+Z}WzlMAhF-}<_gHK=y)P8@TCcIs^w*l<(kFv~%Z9HC0s!l#wMRn-af%`$n~E*BLe+wP#65{U8dq zQe-ykTUo)d6plbY%2Zsk=+Tovn~09bL}BnY{t_x>5f2{xSEp&>j$&Q^=g&_QPJyeA z*-M@%!od8`cz{|V{ahdu4%e1XpME?eg!wQ?MA7m`msBy)%j@gI+1NZ?{}5mVB}0J6 z+E4VW-WnJi=b++?1aaW}NcDgJ5$6LcNOgHnX#@oY*KVax@l2ip*#oT)CI*I6G@k3S zxB*FV>tUF$F$j3`24mfDh&DnS`F(iz$JiNo+#{cRJr8>4977(utHQ$Qx} z42873ytTqSrL@M(4@vAzkByC%E1kY8K_|3!AUyoFxhUFJ%jq~=KR;q&Fa0m zKR~fY?uc4yVq^c@+}!A>oq&J<64Vu|)?z>js@P>`amb})W^yw!GIDYbB0t3Q2o4Tz zYHC8U^4It{QSL#AplN7D9DCjO3VE87lM})@isoqR%#0W2gDDxb;4rB=OHE>deec9IVQx(?`e0Ev^;gr%I{*d_WYn847$zUo`Ux-uMw6 znZLFZr2p-$JR2u|rGThC&5WBO^Tn~8ot<4&rP4Gu(uzh zp$54R9bKjnnCfjRbTl(da_DMRp9fq3Ku&iL{ty_Ql*G2m8q4wH%+gZ3)ry!2G9b<- zbNzX=LsWsAw-Azzk6)G++jWlfnUG;*zCDKm8G_8qygZ=5py1$Vjr|P`4LHUh1_klh zPvMZnWSoQRPdPc|@O;(Xwt6I1PAV?*qzm4h{)0cCM(8Al+fD9GN(!Y<*9BPk+ht%u5){^Figtn-@_dTvDIZy~Ffh4EwecoanPQj=aoEDSu|%;I%vjO825f{w ztOB#2+xM=d}WS+MO8Jsy92+ax#!QLi;~-T^S{ncU4Dxna#N0`_1`_8 zyxQz9VE%ppiVxAhW+*cd&f*lw%EG>Vn`>%h#2Ac`c$;6wBFJMF*hnr`fY*{Z@8hM{ z-jqt`an_^!F=E-;+A7rpU*OY+F(=~kM1SysFB@BHf<6#@a4fp%goK2$w?dx0sSs2cQMEsx@R47&a7U!9EJnVeTvvBN zOsotAQ^>Van5$F3SM>8E5CaaA!81DA+92IB(t&SCa4Gn66FlLl0Na103aiBwSg39Z z+QP;XhOd1`0RMjN#zPSmrg9N}Pw+2?DPdQO@d1*&qhH=o3`PbV0^1zic_8{mVZvz_ zjSYgSjoakshrj12k};4{ppX_uHThF0;2)BqCaYh7hdA7uh3nCpAauzPo+Cc9u(A@9 zBM71h7zB4}`yqw_poN|70X1EWxxt$4ciD;UPtaL~zkdGw`R7lx@0bSz*KOJRv4waQ zC;z+(QTE!{vc&!C(OCyphCXYv+4D4gm2Ec=DzU7)?n?qQpfPv-`t`UgBQw`)kpS=8 z_XM%1&pIbI_BG1J_X#;(mhe)X-c*NQ#NaE`)pwtWL+K7vZ~z+zQolp_1pizifnr?% z27oL0yjzJ6<5xA86s4s|h5L~j0A~S9Sb+ukI1E37CKwnsNsnLl0|SCz24D>USrCp8&aS=Ho5yln()WS|(QfUI^D)%O!NQA*Evp0gtSVXfhIU~G2n+DgE&FJHd& z_VQs~ySe#*vpd1P`uIN(!ja&m2`?nC|1ZJ9|9~~qB3CTeI0u;ISm6!jSQqt1RpdNK7k(NffN4go2l9q1f&<)ZJ z@3Z0juJ?Vv@89pg?>Zb|X7*ld?X{k~pZgh4IT`UQ7s)Q7P^c>}o{K1;Q0LC0P^W*K zKMC*XdUz_qud}Zu#YIqu$bYfr$$==;9n=evCrXZy^FvN$N_P7~e>a=TF=jazslBLU z?@%-Tn{~}|vUNd&fhmOVj*`NL@^<)53tD3X^_=nd3`wsIy)-PorKa9_$`tqhzSnQ2 z9DLaJzSV^`(h!%a;V_q}?Y+539vi_`vB|;DWsAF!4%C75r(qc=VYU~OrN|#Bk6Aj> zGsquaUv!C)-weF(<&od9)91xbz;BN@n*V=YAY)u{DR#1WZ>3Q+<0T=X(BXFLTn{#8 z$vQ=F0=;z5o@!#+lckk!qFnXq3X!Ksh3R*$Mtyc2*JaV661&1a!wA=&r_6=c6AiY! zL$OajxRN|&R#j0cfH!v5=R$*m#!GLS6dN>#nCCWg+0At~JKXKGPFKlfx_{ra_s6S> zOW(O9_1VK*dxWoa#EE);yhI{a{r=3QaBj1Y?jw6xQ<>9h!GHyy)eU9y<(RNsT#;P-Hcjtom#G=YSm}oX1M~_dXPP1m1vezQL)FnZLTj26xvL+^k_K@ z1<*=TQ(v!FVzN8j-=wmtCWOt{8Cr5LbX*>FRYe|1_{ts9#6NC3Gs!gKU*`XOe};44 zk9HjOl%gX_w2K$VJwEg=nk=7oP<}MPLp|&~m$}+1goA_J-`zwXY)`FfaUyFy)65~p z_=Z4e@2>-Hcc?2}6+2+rCwP^d^m8QPmGDfLi2)K3JXKvfLG5@O+guo2ARGDEYP8x@ z=wR6oy;+K%NH;^qxfuCH{$l?PRn2VY_1WhkB87Uddp}rB%vp_Z>mi;6^AYwi85=$-rh+-!w> zphPiprF5$%=y^znR_R7kghg63FLG0g)#-TREMz5wgace&r_P$y7&kk3W{HbdPq)Q` z^lNY?BG<{~UJzrHlMH!KJeO5UO?{P@xxhTnj((H!HX#*yZ}|g(;L9_|7mgtp7Q$|= zOf=F^U*$7OmtC|L$(to5j2H85u+xIUP@QLCsq%Dzw>S)?L`0H@+maepVq%_Ge>W1Z z4wMz-G40OKR6Pe53j5NNCSDU*t|pp0*{uEHei2+!%eBrC)wc}a>4mj6LF=xN^K z&8^x@y_hkkB9Z;1wy}ROq}&#RB^oQp;{O$bhm2HW;xukgz+j^3#a={tJ+%Glfq9vu zU(eCX9~j?`43t8PTow=zU@=r8DpIy?mUz>7t`Eb&%&b*NhFq}s8D@H<|NAQjLy%Mx zNpinP#Ke4WH3akcU~6n3&p5F3c$_ORPMo3)Poi3`At7O4ozh!R)kQzrnCcy$8^}0Z za^XuSb!le1(j97V8SQNp;(SBtYduxP<3lvctH;?0+fo&i1>JVWD+J-{l&_n^E=vvf zv3q-~t*ctkziX7*n==LX+Ygw-tA)-a>4?UMxH9>8v2B)ntuS@U_h+BA9fs^?a=MlW zx3)G8Er#l2%5GT-krO`qbos@->&gmLFs@noC6=OpVd!Ru8`qj6xN+kFk}F!G(Z#{h zC%Y=#cHu`%M2eDPrn5V0Z!P7wK3I^${UtPx$>bDho!9n!ZtIHHNfD6;FMr&@(~if0 z`1X9g`;5|MKKtd?ld^-&Y3I(6=z<;Zt)71{Tf>_bh;TAx5Ww6_Ce;{1m&IbEiuBlN z{=L6dW3|4G4mUnNWtAA=o&2WPUtqpld5)?&s%rH2=9q_~-hi~=9(CZC9!hVV4#|BX zKa5SQKwZs6>OV=-AG-enzX=!PN_C^S3sBe~$5Vd$; zviH3p2x~)ee$owkztItMVEgNz z3+E_ok%rS&nM#xm>(i z8#cqQauvoAzH4(|;0$w^)K#!;KRr%hD|Tj69H&U+;04 z?PR2WJyT|v`sRaS+h!eDi{-J;qvUlV$#I0)j&^&C`I)zkkPR2My5^%0_{d^#OI&ED zjoh+qc|1@y`t7d^y9=%Rl>I?>B;NoQyKVi&Y7aU8)GwwZf;$yWXP{Pw7cJzCDR@6P!{O!mYsAI zmQ>s$P2_r$Z61l|ockc67*?e3^}jy|*)s0YPj^=H8$NX3`M4c^6u`U`XO&=X`yq3A zsUUS`wMs`qS%VE(7x815qwbGD-~t(K4#j?5S<{#er!V5#uHA(>`si+jF6O3U*AB}g z1CBi2wfFKSVI915n`Qy|#xDKU=goIbii>WTLV zRo8ku3wMkZ+YRE7#i!(f24AJ*cMR3CzXgX6vOEay_|u59sOK@@?J7gA`zQ>!I`oX6 zV9w?8t;m05GcXWvbZ6|1`znLB9n!mtrIvn_0<~W#N?+G_t@Pl*|BO_9Udm}?nTmE< z^tr{cqH)jc0zBEDE&*=N=mQdLf@+Ae1~W`ACt0??F;MlHz;d8q;pe+k$<5T%%~TrY@(^{1%LRgakGaQU`qMc?97>_DObGyj~N99RR^5?=ud zUH99chJ;0PE4ZpY0DQ`u{z+4#VEh{#cmr)1cL{gsz8-u@LyA>mVJ$tHRxPj%qa!Wr zR#C9y1*hy0{${w$>Hl`JSU**hPWB47CwnW+q#L?EkrY!x*IlS6Jh6K=t_OSDxScL6 zn7BePLo$(%*@7jM=crIzFJOYsc+pY5Qp0`chc9p7_6uWbV7Wi6yl*m-vFZvB6qtV| zpsMh9Z@qf1?&rW*k4+q2xy>~cgArlpMc;Q{>nR$|pXPfo%iZ^PVa9gHlRkPHk3%QR zL@kzY4$tm9`)PPyEH&S~k3%hd|I$GOI$3Bv5>bTSZ!vr0^vK!wWbMx`gxHabVV|&# z1{Y1w^e!bZ3>nfG70iX!*iIQsy}d8jGAraRkOy$%U01;y^(@TiSVlf(-(_`Dz27Jnu&3y4Uw4jCmQ?c7V_L8QMOx2G*-$aLGZrMzL+3tN;^# z_^_W!uA=ZwTU_a4NqUZH_h}+Jsa{iTxs1^M+8h>lP&^eqz>E(+T z^`LCq;Pwtn=CWKi`i#H~MlX471sM4#?Cx9k1juuAtmZbw;+D$SaFg@|Z)RQ~!837b zU#=12Ep-YNleKSem1|~ct8-r!6re0ma<%MCkr!~;XqwphIJGtAr&D0o_eoYUio-~T za&E*FZ0Ig$1`)|Z`H>N8VUI>Ek5@goj`o?u!Iw@y8QWsjz6ix`{`)*@mt+S*-Tb#B zziwl7bji3aG%s@`nXptch`ySRt}nQfyYY|U>Wj&GKLKON`8?u~b=t@m21U5JWYNc-JvsZk10rpi4Dhv@R} zyK@crL2%Y4j9&-A9X)9273eE|(Vf)Bc!?eDhP{Tqi5%zpmc+@T%G2Ao=bV-D%ycSv zTsG#xt(T<Mdr zcBb8vh(5%UfKt=Im|YoC3&NQmmSXhA%xZ3kp#@r;9Wn=Dwvv%gn*%jH%u%_CWpWNWpf*0n$ARWyrnN7<#?Wx$FjA#|u z9K8Ga_6mNf7+y7UxA3nvnHOd@JPKoi45(<$Ja9T!Z#4A*$F$HEHHV4ePMyn4!dXBD zew5`u;>d4!-}a4*M+N(`uv{GbCfiim?T_=hC>2T{v1h$_ zZi7~J`x6h*o|tUCx&sH+9f(>XauA@t?pgiwopL0d;+fOJ#8K%kA!ehSBC6%#J7sY~ zY+(Ch#rjzBjR`hf_4*qL2^$5yLzjF{ z$!3-icuVop`KjR?s{TGX=bn3!C~b&bbzE@A+HGg84@3gePG!OO#*m`V5io0&tbqYw z#8WR-a>=a?MY-UxYq?<@hODIhLAwnT0Z+O%e(_d_%+81awiGID3TGb3U~QzG9V zOg`x<&e%;#YDFBvhlgqNVcjscobG>liEHs;Qw%7~P4{b9fr4cM=I7Gkk9cMh0vif@ zgp}4kf{|G7Ql+8xe;x_a?sWf41EG&Xg1zxK(m}?#O|&u-OH9awj0+5z;#<*Pwmll7 zx7}lOWukVR&0pIgVp6qV=~6G+PnV3(UaMoSuwp&)3kBa~COZ>Eamyw8F#%$BIg}Ke zD$bMFrH@Ri_r}5ilE=^4cV}Qo7Ju&>1!aDjve3X43ch{t77Xe<*e;O_&El0We2cwr z=iC3S{IIG{7EDc==xB~J-*d!fgbFhe3B{xx*+S}-;DnVKdH;I5sy~gJwK>}p5xeub zvS0;m%G`r_HV17QxyAe_-5^2^_0uxxO6vmDA*QD!g&3^s!uxVbE;hG=hf7I1k=Ud0 zURyP>)y;#Kn6sa3{lXp7uzZf6!*GAnX(}potR}skF*&k5;YA?k8;{K-hLEN~2b7Rw zuCw0#A=4S`Bm5a*LC!QHl6fubN^kO*Co!H|+nt?y;>A+1feaVx^{xN?`A%rJueEzY zmXat67o6KA6iJwSs9e#9r2PB4Q)UxsssLbg$O`Rm;tt(J9%vS^B1+e16jRr+K1{pRTJb(m-lxEn-r;xcILmO zOs2sC?mRqu^|s^oL?~9foR@mE>zv-mxwbNMix79`&Yfn6H%i_2cZ$^tN+Mwz2tnK? zh5Se!k78(eZKr?q5M}qK6 zueKT)3z1+!?p^`jeHVt!9C(q;CB<>yV5ZD*CTpcxgqrQmpV+|%8os=CvqFD z^y{Szqgr6&IQ7&h+D%{Km{PkrMx92i_`t zyKi35mo!?Fy?#3W8m%X3w&hAfGS@*u8;0~iVdq;^VB%2{;B^%CXKEDAbR=U3Vs@RS zw&eFFMj!v%IW6$G-?lGKxjV}zbkVaueyluIhmReAg~)CVX+ZXd9PnBdZry4|<|9?Y zmPI3<(jIt8_^%0zRC|`vmKOfrxzna5$w6e8oPKN$;vuoHC|xMfaWd}8`Nq#HHc!;! zdS5%5)W9?+n*T7WXzEu{td`3Q^x| z-CtR^Wzu$I&En%_nYr$#L()iM?x?^X#t)f1rTf;1IF(yog1+J*>fy^CO&jTLvBQIX zhdzVQy_?Tu&WpW@qH&OL&9#F#U=#P-$LTo#sCivS;jmZp(0%z}cL@NqZ15qT)vAZ} zWwzSkw;+i%|O){rz=mRqJZ;$gTLliRqj7dH%ID=rjDI!^3PhxmYizv38yi9y;ZU zgrubGZZb^&*R+bmz|`lIxSI!Pvq*M7ctz@pULjj11! zBn0Z%&h)x{-RGC8W*3cGz`Fa+*1AvUUU1h-1STa8ID3WcGTEay{dvZUNm94KpOrhW zbMg0syr%;+0T3Q3pZ$DNRY!PYUY>2?kUcp()}@DKe{u{OT|=L>6a`aOyv8PZo>&Mh z#N{rx{4p>c3%`|Wx`FkV^@L!-Lvv=hd>6b~R?#R_D~cz+f2QmQq??P3w~)cKjfv!t-|)Io`rq}wzqy6p|xpBnrzL1NBO@AS0#g4b?YW`U-jCy zhG8OJGr-&)841Pdp-as5de?lcj71ImMTt(VEDqUnRP0$IpI^0FKOA1HmH?K(LBHQ{ z^2phsID_GitYt2%SA`iJQyhds5djALNFInfBg=YGEvkpMSP_oT&ppU#hv>gs0(6OU z`U~!{^cgAk{QeuNaFoz{gg&r!D_PFF(_hk9X7=u!YzGiF&Y*$ZN8cL`VFwJC}G+QVz0dC z@$6Q%0~u}8M(LxUdX7<%PSW@Cy$ZN_`GBTj&YihisUOqRvyTu^rtgTO@@>mk8x7j1 zzp!Lh#$h`XzO}yA`Fo#>GYLsl8YloRNKAZvD{Wx5tE8l2{Ng{EZw)rbt9fQP)hxns z2kUEoCHEXmet3TNhfR>{{35W?3)%_6g>hew!FJZiI2DDs{Km|+ADs5)L64IayVDJo znX)1$j}j~WbpYnpAf{|}xItWsX!TsrL%cGAKKAm4y2g(e6t*`ua=EWf7PdpSHyD46 zCUGtPc}Ad>_eQ=Voxv8wN+aK-Yh%DNX6dO(G8AiiGBvo7L3D`=Waf6Pv_r?SNtR_C zc@HQ;%L6J_Bl_DQKj{a&?8rl}ShXF|%7gqDXfsL*RQDMl$KY_zhJMqD##5x|c4wRcP;(;R^lnQC$p$cjL5; zHTQg_wFLirFAUzBjuZ%>C}`||v@@6-_JZmS8B)h%kb5tm63bg(1TkDztaoxk`;pi2 zcz=)dqZgl3;W&4=kvZA^W?WN@(SMEtRqz!?V+q6DFEOH!r6LTKlExAq0b#_Hl?+M^ zZ01De>Tr{rrP}1A+Ohb)ry>2=P+}b@9j_`S$^0M87<#J86sr``?b8hp`ezh9ttfnw{5L zb33psokw?kMI#^34OGjPhUoK!w*Wrin~dO=zlACp#(RI12k><^I@`9N3o{aIJHEpR z?#MoyXjLz$79mD6dK{vnw&BDF$vYYQ+)G6Y;twN3owlAG8;5N;mBI8tAHrRW*-^3s zYbNHSL;Otz`;M5@p>Tua!y2+_?@~h`TNL?qpQpjk=|)!;BT6dVxoFG9j;E%Ft!JuR z2;fgq2J_$$YGC0eiDadyuT=2KQ`ODEPRE@_?H8F0{~gvA7^bv8-}&xUlqC(`?>+ePlS! zi+v~4Y!gtU-%Z@u?P*_CQ8_+fr&CPjPTxuMT4B9M+or(1_w?ue%v$O55`L#9C zV}(fbgok<2QDSwVP22Y+iDP*+_5b*wRknoAAtiKu`qWZ#%%Re;MA}{RdAe>aM@E9C zG3|IGav9zC-yC;f4$dMQ>q0S4Gx3VZGR85~086ikH@MASn-$@ILY| zY2RS-fla=9rJSIRyn6DJ!w&!1a&_2Ai+T~C>55dzrGV6#{9|oQgLCKKiqQ%9bX`MW|_2ku&lL}W&xbu%Q^pK$??>$mv_Azpb-tYTv}UDj#p%;svq0 ztt@lV8LHvy)6-!yJdNyKFOP~F^02AV3vhA?Hr@BFqv z?uGWA_3Q@%p|XRWxfti!R4K9NM_$w_ahnCT)ox4?*wgYHmpzVq+A2ji?D%??L$ANt zks(S#v>J+7Y!Ht_GF1+toD;)Qu<)sa?c$jP1nl3MRW5#Q#qX}A*-i^lZ<2sqw3k?Q zhFY%s-Wb(VUWd%7b5{XIRHrmSjxnYFbiCZlic-@Rj}XtJ+Tp^pv0p=@(UC=ooSAgL@oFkxQdtD8s&JKw7 z_-`WSMUG|~c3tr>o^ej0&Dl4;m0)z`)^bN(+^$1UV%*$9kC}azc>u%&K(|YwGR(_7YuQ}AUG-U%8VVCSK2$;#UPxsTmBNW^mjwV< z2xdl2Sbo-gD2&hk%hhw@)i5J_m{c$^Vw~kPz~FcQgFMv9ict#QV}^>g_8^AkzOE9LX7dt=PTZ#C9&kwB_3`8nepb|727$Ae>d&2|QoTGC63xR~F$Ql_jtsPTQ!>dy?YU)5e=#b`~ z_`wC&d8muAUi>)v5WOwQ6zqk0Je}u-Z8uAv-fPBejcvIMzkGcfi6Vd2g5i^!hx}l! zU^qfyS-GLR`ZEXhXs)4)eQ{w%W4Qs1_KWgTsi%m*{=I<+^=B>NzMO2Xx}X)i4M zdd1dW2L@vqO-^X}pk8xBqNGZ|z>SirbRu&tfRiWnNMdV27r#HhcO3-a3&wGEW^2p$ zVivoTt%%5+OxyCGb!;NX@)~_u?xBDGt6%-@vI&bW56gL#x1EuFF=0jaEw_a?9kOsj z!o!q5(+PeD6ifV6gv-r${h#k`E_bCCEtT8i=oR>+Ub?j8rX~y3Ck*K$;zdl0+)O7O z9_hMLPe|B`r%Vrp!uPk!-Q!E7@J$oZAj7Hg!?$`$3{`7)eisXp0xJ(~Sh^ zttt#ASaPgJ$Z{wwJ*39lK~&_nBT@{xBpY7JZ?iu)^Nc=t!O5}@qpGmv%5wMU-uKA8 zkZ|Mzb|AW!yl>MeAS9^5?2Vb`OgS0DXY*n*N41?|iE+*f-M6G8*{Y-V?kF}fxeUvV zgu=O)i0fmT#jPi<{5Grf8GHP6eqTPLDG2TCg&y0_s)xzOl-yYzLnqpo*_h+S8)|V; z2d~Wy5ZwAG9%Fb6+z?CP--uLmpuKc#y-jy(gIs9xv;VPPG-VqRw|Z6j?XC8M{d?54 zT7vWMXe27|cl%=V6gU&um#YVxW?B=}WnK;()^~oOO6W@htD%w!WYIr$o&_-b@~!;`~7cCqcHute}ns2#N@NEjwz^Kf3i6O z($4|TH-GNn^W_?uwaXp{O8_uRjsGau2&5$wpgS?E=cPb(0XSJ95!{yA`#bA}0~V6> z6;EprR26_OO$Q-br7M*T8q%!l&48&Oyb_bnlyj7hu^Aa=`*Trz4wL}77$-+{7g>!l zs~JrOG(qg;(9%*?{)k(3KU(^FvYk|PH(OtcyG-{7yVLPX1eFY3VyqJDP`fby@1-zn zg9?$)WFtTvk02d~(#itv@Zj0!s|!P=4%G7g(aous*vIfPcmeu-V-~SidLk>`#%l09 z^o6n(Q|MpyXJAYyGUNkxDga}WAHU?h=9ANPIzImy6Ok-B^46jK4t8nEaBZ)E*2*yg zxxH>FU{EYllopC&l<(!!e076np_JYK-^+I+l5z_1Ji*|X4l~xh}MJRPnw0d1S?zs@)tx{LMlvIa{ zazE&hunTyoMpTFktk{oQleuyoKg4O}TsL09%tZb*3#cw|D(=caghY*dl@h4_RKWh-f-vtunoS1kwZ zT{N3S{<4pJ+Gi-|UD=Bu`kf}(QQajVDaf1Hl3N#abvDRMNj()GpTMyUsTbAZ{d}nZ zQtoc%EL$drhMJF?$GC0uL2aDRcKR*AzX+9O#+FxNuJ(Yw&H?KaLNO{NkN|~EQ-Hi; z+;@y|Lx^Q%60QTetb5ZI&W9f1hzTAR!j1r5iA}Bkmb6Z0NmQ3F9bKd`ni3U|SP!hf znIEsJ76DjBxMeQls|8lQKOe6(z3F79rVjMvj>go->(y5I%LL;R!Cyg@oqwZO&qnUr z$0v0lTkyZw|Ks=1zqGoNUDAdXL%f`^lJx;-snHP$R+zV(+v|OXSt>x#XUmr?;?>fA+ogw!Y^g$02w+>&ALG#*7HYv&q ztjGHauAmL!F@J`1_?$A!hr9|TmVi=zXShDGheFQ!ZF<8O;~huQ$(@<>TD-HONcH09 znqX|*k8|+@Y&tJQxjW6KwqhDzkIz4LGZT5BQ7{jwI#wS+v4rJ;lX#<0@k2EvWr%F$ zyC>p$xgp<@xR;=~j2;K@-5kRp88UhDVrcg~eO zlJ@B>9FICkR6IytD`SbE;>7_^OGG4Zk+_tqz>a=Hko%~10t`F7IU$6!#h?H;hL#jQ z-#hpj;CHsO7-v}z`mtW{m#3BrN4UgKa^w_y8wxrgxL8mZMM9N=oR@HGtm6f-cY_0T zw?JvjrZi|*WimOkRA1n^JOiYYqh$BlsN*cE02R(W_|a}Y`jvxb6e6SuJ_n1BvqwG+ z(&m(>16`gSd~}EIN;Ap$bdJfd0UtEXGbn7kavYblFql)azRowoAK*=O?@4xNX}PR6 zbE{@)BXhqzFZOQsPnpH#*`U3t>_i(Grt%V_`bA&v^Uq_bsM14_P)4b;D`EjTSPYw9 zE${;iR=N;VkRJ^btCVs{Xm&F5%vHDd>;!9fG8aE9$DoJF2-`;f?M*eU=~)nXOf3kN zVu-IEhzB3t2av^YKNe{s)y)Une}j1WdbG$1<&#ea&U62b=>YnG)(pav^XLa4ZCufq zy@lLWMWi}Hwx+C*sp8Lg8(}t(SEy{7*m#(bBTs2Q9WNXm1$qWJjh_@<^ev4_+7S2a z9h4Z%lMiRR0J;gSL9{AA2exG%DR>`IgCAs@s>$TDS^0*+EI4=z z5cpx{bYwTtO!+wvrp_Gg5aehK=YhIuoom=kO-;F@{9xD2yQN9|+39d?R}!9~wAVixwu!}mULP*8K10aWeIQ1jzod0t{>SGG0f zxZIj;Q@Ax*oQTMGC5nxAjg2zYam%_KBf^M6wqHEFO9)&xIdS=O?l2usDJ(j7>cC|rGrTb z>s{6w*2r$}-X@{7<0|<#C*Nvt%z*p$OKS_Gp=B8Jr|S7j9>3ZF**488HUvl<3UaL@ zpQ$Jbv#pK!w?C7jEu5J8LCHV{q=A_>S|!`f7pqgCl&7i2`-$I32}ybX+QG400}R4E zqB>lKq$A*^Dz-+wJCbFo_#NK@DZGbj2xl<*aZG}byKhfX#5WBQ1+IIfXG}am3>QIk z$OSsH|4U2`y2`uvSRlp{0SJD+4*`yT@yKxc@`D zz7KEFc*!Y=fQY%<%v8!k&W0uGvxx9q1Tjw$__PpQmMr_CyuG=sIR!yXpm@{CbUeHU zBs85|$A3rA!f1Enj}Bj&$me8!p!_;q{gV#tf_mf8op&JUkZZi9jD+ob-0=7A@!zh# zAf*>IIMXWpj_#2g0KIwL2G3KhC%HRcv~9Mgb2N#tIV{=hc}K}|Z(*UW(tagDh`@Tb z8IpmR(8G9|1+Gf_qg__x@yC}hzz%u&ACEZ>O6EV?!?GQ8{5k_(FZ2F9S{Q>0Y*fne zVrpKnUL@u_dXCuh7sO8ZAbWk(vGCHUSG&ISXzx8nK|!|KFKBS29o##sFMzY z#@Y2A9Ua^N$P*+bN+tI^T$!kp(QA6C%`Ivrn?q~jjU1bsLveSGj6Fl}MX_Y5Fze~> zpF=F^1M5Ljz*u#joQR*5b+lf!326}T60+5QF+~>t6}Li;Y|JGw#sKXSw zyNvw$7|e1u_FAxCnx*maht$DW#54-b)G7p^K&07uN)B`NP1shCRiXy_tC?Yk4mV1c z2wV=C7a}K2SqhbJ*u&;~usYitKo=Z_T8w7UX*mq6eY4MMwQm|XX>`>w)@<@RHzMo8 zBWX&kWQ0>OXm@CDXe@jPvM$kcO0MX5tJULkD&Ks*O2JY(pR=+692sq!X3k)i3$bsH z4=Dec!G|^sQd>j+{Xmt07ld5p%IlLR+{fpT)cAxo{Q13uzn_JC$T-u0txU*fF<1nd z%r;Vr-dY|rYWkM#xIAjBUPUZ7KzbyNoc)tKQC!JDL6n7ZWskOIvGoLn0}xCo9F%k` zZF!@fo4FTU5FUmd657e`G@N=cv}>^wKM{so|L-JI&hku?o?%djgTwXpA4yfpD`;;B zZqKvW+fT_PRX$v!&q0Wn2-GWVVBVFoLqo}yhF~o#*ql~U0dN~vf!iM$q|kCo>>Zg2 z2piXx(L5tA4x>~M>n7STy!n%_NSdzX-*7gbKFU@>W)_ulM&?cEVCs|6t-8iZ>|hfg z7A>&9>_v)CPtZ0%Uq(#JjS&@R4^0q4d~yAx%abKH?xCrXX7LpGNLcxr&&ly`$HKD( z%PkHCwFNd`$x_9xw$nr~6T>yQ%qvQlI95W*P-!3dBQ}+1NPr2Dq=R#Z)B}$`+_!{^ zFc6!R&1>LVIVl)M`3<5fyJqf3#%MKKW3><`@U~N4d?CAz5=ktfDBs{$vDPkW6lql} z!?$1ygEmDAls0%H1wLxIk7Hk3wlggv`X@TC^0KY z5*usQma=28I@YIQNqUe>e$)NOVsLv&TfEL~XZxmz8-aDzpF4n1>bQ{Ka{vT*ftBAh zz+SP2xSc-Gy%>pmZUpV>u0bqG#$nh5^=Ecq=K#Oax55Z=L%#VRRZz~f1xndu8E}+s zgd3|b)df?ozBC!L38AFCMWB7l0Qihtcv@!yFFE1k7Zqp zi{%WHr@rehnno=L2vHFhC8=H#h%lX2cGOpJ`FUP!M>?9FsD*6@0L_pK_bEY0nSjEP!bavke> zTB8^@dnk|RMg>bGQo60Rc|WXhto6Ayr&BiSb^q*T(jP!lR>`^N@k>=Ot)j=WHp3GM z%UHzC)~}bJtHV)kBRm1;>F;A-_*gb+!E_2|s`P2hECJh$M90-?e-W60+>qNG?&A-K zM3~43p|Jq+{WU1pKP;J!TYs1Z-lbjgVWz$Sic{3P)hM)lSxH0$`y|3S>kXF{j)K|V z7Xt=wqKF+%gW)9DaC+zgaCd>+(P=g{8Md(e<5WmUh_>5$7m&7f4jbGyhYDY z1N$D<{G1z(dWt@v%~V$e$?t%StMbJg?1)D{*!gLwjmJRelHDcRK-hoNKe3hF zEY`r+ahPdObaesvIFMd8OX>xR^H)RgeZ(+eF#9rIVgssggP*nd@D3QVhXFD?c?4lH zoCOyIjNoQyT?@9{ob56NZmna&%2`kW4xrwwmp;VpSsO^4Od&+J4XBua%sH#ns2cZD zS6FF^AoiIj?GikzmuTYqHjqOs{-C?CLV3iFi{GJ&^Mpw{n0=?A?mY*l{6BjR)N$qm z1;JSea^NKiH=Mb2GXp=oBJO=q2xcV%f79n=jV|g5)uOTjf)1FWd zfOceQ2}~Nxpu|K9^v{RqJ^^l={A{W%?uFsYjE;=_Yo?h-m-W)*~qCBw%|J(}n;>ito}?Lf%V zH$NTdSS2lraI3B%^G|vsF)G5w-Wh7RY;`h4%^iH{z3ZMY zOWC8TaCSz9?921agl%I#DiA8DiU##6oLxiQH&DH_bM#+q zFM=uW1TLsV2yBM!d@n+#K^l`p=*n*xRcyT3=HDsYq*!ZPxoAI!L;`G}X*(aN_G0t$ z@?2d&gb?f*Ty){z=pF81$9T9MVRh`N0-Xb>j7)0Rg|D#NPXEDRS|_UoNNVH!xX@4O zh_FJG=<-L<8Y3ggyN?^AlFfXO-cOCF@`?wbA@s zJ9CK>-lNNNqX8^dLv70=kR@qvx4eWi&_VpXl-|~h5bp-kwC-@a? zx%SFoU+K~oUE{jnSWjR=U_oA@+{Q5Rk9qlvzbV<3go$hVsAH+898m;9%N}=bUpo`b zIC{eWyOhE2B&o2R&jw33OJ<~2_70xQ&OZrHk`A|Z9Yzm1Sqp(j`8PNLKm05`6I?N5 zZYNKkbai!wCbR3;uV+CP0y;H5K3>P`;_PgJuPBG^Lav*q&YeGh-f`>icMQMd-&mzo zg%*}`UsnIEJOwq{rKP3$r(WTZgCJdm;CgS}x)m1M&>3`fqF&l`RAXYprD^Wg^ftw$2DE8Ou@hf+>ahTVrOT!EG#W4f#)o7SQ;)+J$dd9DRaSj zvDGf{6*pNli*zgB^EoW)Yg?}eCGAfviWb{HTJ?&1KJ=yiu4c5e*rSq+Lem@Di4j>Y zHE}=4q1om32VLT;P{yo-(rwi>pI>a}#YRvY+flg?8rFTGxOC}KV^ule1VWB~@1!z# zyv~A7E9fUEf(nKo@Y#XAci)S8rr!E(7~>6QwH*Cbl3{<(Wc{_9#_fmMN=hP^)5`KB zslt9fL1>pK)XN%+Kr1+}$<`Pg&}|_UPj4!7IeT831jH~lh-p%XfQk>*gn zx-U@R`f`h-7LUil=|Zn?4T$g6eb!P3?~_NrQ8=e2j@+LzGi=*8Jt z6Zdc5?q+t+wbrOP;}=y$bCbLac@X?{2cRUTZpqq znnQZHsMstYk-=Or)8Nq1>evJ-Hl-ol%L`NJov{#SUaUd7Zq05t ztaklADxjl&he%gWgR22l^R-E7Q4zEzcTm!vKs}gIe-hRywL3!i%$`EYzlY|som=o7 z+|%*|Bos$^xaxPf#(}JS8vvy@z@J0C^~v_-eAxM8?QHb7yKV(!lu0}p#|yl8E8@NU zhmqE82`I$m7L%epl!^T<2aF@mybQnQ%qdS%*3s^T@RGsba74Us%i#NLeTM?|IN-C4 zibHqE@{dlV0dqUejr)sWs=#5lm|YYz?MgGS5EmC8(7cSgL&D_3n9et&$z0(tD`cSQ zT0foQguncMXEWGV?-qFXJsAUvKt8vUL>d;B%yq z8ZhUjC^Sti{%oNqO^lB78s=l@a{I|fyZrwa+7dbrG#7Qq8z)8&E zUUD<-T@o=LQhD&TNG}x7^JHXYxpmN6e@CF<7x@1IuYR4T4>|XfP4iJsT42`e3zB`) z?{;T@xZSQk{z3vejSupKx7c3)!$a_27->0NX1x33M=iuYq9Vy1>(gzJ-QL1MUp~nE zRBH?#02e|wGG8KknMeVbg51W_Uzbh_=s#1Gw;wOwaCLLLQPa+!l(DzBXO@~=z7wna(cYao<9BUWFJ)1gP4>Xw5#I&b@}`6 zJF)oX%}odUyT7|P{cA%VG{SGr#`&8I*e*1x?MBZN*VorCFE77)_m0e$;=uWwzPNIi z%jV+t)>aUM{I9(Gr&_YSNE-U`Aho86`a({}zaUj{(cO?SbdH z#NC+s1TZmaU-%LPo;WhpnV)MR{glBEK1OdUCbX(N%Nc%k<48f|t`Yj&G&uWg(o3Cy zfM81Hi^2#^zHwg(}nLIM-{9PQ3dV3Ge-S&=w85w7w+Rnk82v{Mn z6^GpA_4K$~he5o{A_W~!ebX-YWgcewWvRRvJ~kpXS0!h>@5Hw~hOh=wKFo7RM@I-i zqqGQ7Q(Hx;_QIT!ORL$&?M4xI1&97;BjkGTlKSpr*KFMj3sjyyea|HeF7Sb0Mw-dX zm%UIb6-j`SCHRDo&)n~z&iGTWn5S_4Zf*bP&n2tb`z{YMixB(}75hAgkyOBS>qi{J z!QqWtw~VnlUi`|+zD{vzJP9PgK&XT?T_gdbbJz|W2M34W1gB#?R;>N6Xyu={iNC<5 z$$c>Q_;V)$GN8OjA~s0NomP{IDQ@4^#JRgg%rUa?^YcRn8u*#qj#u(f9~lvHC_3uO z%1Qv2K++rZ+)!R$O@k?SbpdezKQlK?+ zktq5U0oN07`wfa!$l1f$^gdzWkl#Q%W<^EC1_hPyNLTUu6=R!)b2tM&W~CcWdf4yL z*!Dj$|05gkr7PcbU+@Hbm0kSp{jWEVYN0o~KPxMXRwC&4!g-)x9|9J?I9#62AOSEC zu$VhitKU3XY@MPxXXcZ?kc_08u)nXN!IMsHx}d zCBAiyk~!N4sYho^Y{zvbetouUbz?(DN{ZMYTz_BcJ#k5C=_{8nOFe)7!!3nTF$uUZ z2cA%Nou96E{Cfe!0Iy$Y#(cmA_(@mkd1uEl=)VTc(4O?5FvL`MmeH%+jGYM6) z1@i5r(j!*Zx8uM4;p+fYmDiz!58b5eKpwe#wrY0?r;{iV4ESmPfi+#OQ7cfB@-SPw zyAPqygqe8(@=El=sE zc!r9sOw`b8s11exw6wDyUNrZ|K&kt8B7_U%SOg}VO?$Q zm)kt;L0$+e9%Ku=8HYd@gri7S0*4gJqQy?;J2El?@nuU@MWSq;e*JYt8alcph|K!z zT;LlOzbNjcYn(ot9|-U8bw1giQcQ{y&=4L)6fJB zZBFpLFonhU#BJ>Cd@&e|pC1DCf-4dCCA)F``sn0jNcxi`*%(R^5_)O~l7Ya*og7CO z%%rSdU>2s5e#3uvb16{%`cr=6{#m2_Q=-mN4#J-16Qn!Ve5lSuabOkt(6As|-q4g%bAAthw zhqT?d4HQ|)ZryT%E)f9cdJo!xpz*`)D}Mwy?BwL+2|;K+f`0fPdb1~V1xS4NI@Nky zqYg}77xYb6GH{y3j0i2fIF4mRzh+iW!*{(vd}3ze;^Gov_)r^A#wO@2sP(b3vAM5R zVp|_TJ2W(udHXMv-n|rl+vgAD8u_Ju?=k_Ih|nth^G8lpUTXL2Vt;-kOJ$0UG&GRc z34-ecVB1ER?X5>|?@QlLr<}a5it1b0Nc#yyGk!9|+lB7EGLxg8Xr7(<^56k@*}Hcu zYid3oTK-l|ORKG^xpnzdUfv@lJ!)AK^4)wiUI^)NQPE?N*4vXwKZ{34M}Z)|=3Jh8 z=?P)zw{PFV!y8=G*~S+aqsRF9U9vez_o37TO>QAWxv;n3#!BqwLVU3bKcj@u!_X5P zF9y$*JEsCEr9?2(P>~hQ9COXPwl}u+7k&_c0}!J*j1_%xifSw}i4jY+k@q8PT1d9I zYoq=1>Bo!S*k#=94KIf1rX}M&qi60MWWGs)p%ga{wcNs=CwX_r!6t+;J71X5pAEu|@ zD2`=UO&_K~0+%GFq@;AvJ$?;9H~CbB#7M0(C=IuMO&2beAxDk@p#}k|K%>H28=Gyx z|2{kNdU8s=JA4+P6KSegi%^A&*o1_8iZpeM^pnijn+j1L9md4lBgR^D>pM19eTMP$ zdY!8F%=!_+M+1DlqVb^(4x}&f%hLsDD@^(n5fL#F4H)`GIw}&i4$%SYazVje zy^wBA4jF+|AJe84`(wNIbE(iimLZHI#d?qea_Dbl>X}?<(~};WX^IMJ%Xuv;K7W?Q zuiysX4s!J(cc8|Bwaxc;WrdwnK~a%;Q|iSFr}>*GhQ}qUN_3C1*Nn*HnI0~-$N17B z)j=TEIiHTV*OlQRA|hhme1wgK(wiKsFG2U^42zlgyKK**hb%CS?ls2|(8rUNDHKX6 za+RG$AZioQ@SQlUoJ=Yi-*B8KgrgaNP-PNv`lY%&no-;BRr2u9ykq11N{rRy9C#@X zPDtHNil-o1q%1vyx=2P4l`)gSykL>qiY@Fs=7%c1$+ktI7&zpgt7-F8bjmbcejG)Y7io9T#Ur&d;683F4(;}?)kC)lP;bQa~*m0HFg|IxnlyIJzbG-~V; zXD3tYqx_=(VuJVe(UsHS;f4W!g=FI;+B=Q`ydM|oW$NqKuD#veFjrMo6$=u&g6nxetoO;WO3Vf2ejL9@!BElMBP?yM+oIC%h!xd%4Zve{eU`{{ZgeduRk4p z@`0|rQdG|?`KJH9_N{@g_nN1_BWDuV&Fmcc_T}|!E^A<2?RLpb`PZ*s&sfdGPS&a{ zEiLUYYS?{xo|}M^pHTB&oXB%OV0fc*saTYW(+%2~QQ_U?tW?h;-at4b1=ReuE_4XuJwJn8!S zIyW~reU|lzoT@5CRdY`}LEQrblXo#eZ~XB4Rs&dnXjEz+q@)ai`Zve&s~E5@rA|st0X`&ObieBm`YIBQk)jj7^>fZY+=*l-H_I9s zS+;Wu>O;b20xn_5s&3r4@v-yoEnCnqzUscQ=zi$OR*!p=&o#qh_qB0085M`#e5APT z$0xd}#MGPrt9-UTKnz8}(J+N1VDLBvML>VQzV!<97<|D&+aVF76}%It^N3YFqZcDt z4pBo*O$~~77H=iYGGxU=0@jB}I}1YDbB%AbN7%Pb3iZkdl=bX(cAgNKdVPfe_erFs z`UE}Q*q9hUI&lk=&Sd2g^o0L5r8DK*ov!feUZE@2igjwH#)atz{j zExA`S%fp|V^Es{Fr7mlFopZk<;Nj+4f4ZITND$fK!^tV3ya0k zJwj60|GT(0tg-vRp^bzE*SP7~GhG?~RZJeQS*V`)`SIn`2^aM>gypm$JLr{@lgo=g zK{{JzGMIU4EIN0!as933qmTUA5vl}T3t_FkGFMnokby-Avm$-d_xJDLzvw~K$_x63 zRAbqs*6!KVMZb28c)YIjfDZ#(Tm*;6F&}PBn^+%b}--^Vkz>e||0h+RLGpm&Oj^}4#S!?7sGdGp~mc0*R0M5_K} z7r+~lTb2>LoK|cRZgcOy1a@lx$|+mS=ofgPDQ<+o93))U@-PZYf?$)!QO*Ah~=zl|JWXd%@F(GWxD==G$l84v4 zdoD4`?KCwzdw4@l&D8>{Yk?=PWF0N$LD3c+eT-(}FOt9u`mCggJPnU{ih1>e?UeRo z^Z&asD!Z%sV$cC&K*3N}&Hcg(1MbF*vIrY3(ItYV+B*OH_it=Bx`lTb>FKYdU$D8k zSz~*$V(bSj7jw>Sq<)8^LK=M=V zlts;Gnrl(A5wn$~FTAp9H$F903aS;sZSdO{fVjjahBU=4`5#jMDf7RdH)#!V9k==I zRvB<}@AWOjj|oKeB}_RuJ97f2MGcn;dEfJV2PY>#D4$^Vf}oJCewajJqSn+5Ake^vOTzhCpaU=NUo~031#aDJzUcFk*}E#e^aESNnYPmREjRP`Q|dJYS3O}DC6sZ)kBL$b@1T# zfdM5{?j9b*O9a|gT+Ts?K4#TilOk7SG%=Td6tKZug{$pnx5@#9|2^B2wfoI!$ngNR z&%3zpz>+>VdYq=naF*k?}>dDfB(hN zgxc($J%`kK|D=oZgoWyoWNJ;;-l8zE;H>7abSW1Wsa|Y0^pdQ&?kSSaip^LDMira5 zYM+{48cVtTfh9KCoQE0(b|<_M^a`xrlFe`Kg5GSzr`J;^Qn72bUk&49z2Q$49OVlf zc0&jBCc$?jKAk&v4vv`>OBLG~|-hHUZmoP7EhVxG*@EKYy@Nj^?i)eZ`O-jQ(EU9AC*Dvap`>Q*PJN z_@bC7D<5>BUP9u$ZlL?opr`6lPrZ$X^rV;9WE0kpi`}I^ZT~~tll;%<)NS4XaIBV* z#yir|`^m-xPEpzy704EMN*bU%&bR#97&T5jJ*f)1eo{sA`e!aZi8v|KWZLjz;R|06 zJWEEeE7{i>v#Skld5(RUwIqPns4-xnk?WG|NAOY&I@fn zPujFmfa>GqlHKKu^cWxkU@W49rT|q26G|OYwMMaB zy4R)j{X3Gv78Ny1Pk7VQ6G(`>2Jsn>0Z*)negR0ngS=|em7gsz|BTfZJCU+HLeQ+J zY$7?tw_TBwBO3T2!bc1`OhZF+@L+5TQKu93QmYPvq_fw!?+n%;vsHWceK3FMz_QWN zi(S0x5?I#6mg#(G6F6g*o22z!hZh9UFmQc_PEN}=vA3f@rGOy40ma$-Wpr#TbcrU*>#hFPGM7Rf;!;=d zZ`;GFnu3x0u~b+l$RN4*6b0EWZiN!r>V(=<=iQ=tqn2VyQ`(Hg6{C}~FK~rDefkNw z8wOytset+lss%LIr~w+O&o9RYJ-h(G%q$ZR|J2dJp=6=kl%D>g`?L2+y?v`aI~~ax z=v$8Wx|r9q^NupD-P39+AC%H1JL-2FK2X;5$u)c3 z>A)B>arYIh$Oh1lr(I-|ymSqlHM}e4A(1rT2qae|XRJO4BNqdcxP%0wk5~U9Nh;yH zicmYyXU$u8ty)U^HZDcdl-Ikz8|>yL3rO@7e^cMlW3m=C*D6OHD!iG>)dV2lMXv7q zq2WH~`3n~i5vE2)LVC{KyMO=V6e!v5s|QHY{XlXTB_y65tqYr;@gL6`RV{QG-LW=z z>(1!*P-@mdO#?a3c@75lZHD}2S-KyNa_4+a+F*#Z+N75BA0r`3NdZ94oog%92cu@> zwMQpzeDrNbz_MNe8b~CL%;ccD%fJ<59h&lliMKXA{%H7jr2<+i~R|k5ev^pkA@v-_4M?tg#mX3KO>PI%3}NhX1al0sPdu2 zDmpK5f>D=4(#yog*4FjgLrQvjdg2YDDI;WVdT(l~;Cy(-jl%Fw`WLhXncFhk<%MtY zJoVemKGs8!huX|VRT~DessDKFnx-L>**WpieAX`>`$uJ8-&(u6-Wq^?R3tOl^gELj zZ$OF%oB|8Q5fx3io*}!{)cEfD zx`O!|UGW94;}K7^HW#-;HVaic@-oMJL~I5jztPQ9eK-~zCNj@6;?V2F5~YIoO8_Mu zM~hS=a@H->=9{?casodLPs~-*aoKK8QEyHV-|1>S@v@Z4!YFnD3p-L7;GbBx{JCfz z0@kjoC9{P@F8_DRtwxcNmVEErDAUC2ZNW4z{>;ECyssoL*u>QIu0uTpLgd%g?e%A* z80hK6mPZ+8D!&N<|iMhmt^U*FxW7u?-9$QYzPU)@KFenF#f#d_E=WL-6V%|rNL zYTlPig0mX?G+H%qyL=UWDeIxi7dyxHT|D#Oxa}e+=^ZtSh$Wi%snNvtj%jG zKGygl#oWE4-2T(kw5I>v{Jlnw*ar_Eg4DBuYDDULl=0OQOiXm*ZoR8qpa@T&mS(p; z_dhMb%;S7LUTinZfe)dCn&vA`Q`2K_$)~N*A+M zm?4K{8clv+D@av-Vm6?}0;TNp__6fm z%PQoI$Bq%|CVb)tw3GnzQqV7cXTv$tGCtJFCzw7q3AwWT z%k|NF-&J;^BM8N^*^eD0WfSRy&`8I#y zKbr1~IL$FHl$)W>B~937CWSkSQ7T`|WJ=cIpVwVmiKzyUX4G{Mx|m z8g_iDuIJjmQLgelQ~>$d^zDG94-z*2^z@NJq21cWi6I$wwY`^*tg+mf z;{CISo&5%Z6{#ZXd>w1~VpCOHvop)gq+Mmjkw@E;m$XqUBBE#Pl;8>r2)Jf)lZRUJ zja?)xA(q}=U{Zc*y13BMUi-1Fd0Xlkx1zeX%_M`F2OoEWkU_b!zP=vBKS{skq=I0x z9)H3cDN`LGc=Y{kN44z-m&AW7a_9XmWWHa}h0yj3^neAi3PKb7emG01H}PZWCRSg( z>EH6-tc|vI<09l`m|ict(T;3m!A&BGB&Z%9a&Yf^aFUvGLhQ_q))ScLq3O##{%tNC z>7QifQ%D=Bs75Ex zD+EzQe-*rN{ygn3Ep#h54#xy=KjFQ&JQnuPRT>-U$+x9S zvz?1eiD*4L3DwChO%_6WMMhS>v&H`2>WX(sw%WKYinejvXTOF{kNMiT>dE}}sez&y z#BV!j*12gw$Xs1uG)O8Y-P7m6GotVPwI_r$#P`TgX?hZ4-}M z6puG3tX_GZeEjc(+PT!3@$<>umnAs#%1T_8?l7qk`&2a5YdimD#CyQiQ<86o~t+-TXo18g36sUM`PXN`Rj}mpB(g~Y1u7k z&$oj;)#VU*{z~Fc=x*$nW`-J4h14C#4@-Lm%aRR8f}=l-5)ae%=kT!6&v!?d*xA#S z;$?uDwYWq-aE~$#W3w zLBhE*F%QjKGr6x(=U?bLY2dNVu{Ru=|F`nnO}6z8Dp%g?(@Y=zSD6ndhpMl#$&9`{ zFjEwCijDrxNcdzJlV`BB$-tkU?_U_jayZ^XRSdyJV|CPtuW6dOtU^MX5^=G)?q@%? ziD_p%JRSePHmw6q>WRpLgm57Orh2do@2$+$dO;0Uh*3U+-R2JE0 z_Oe)5YwzhP{xHGKgZ;?6_zMNv-E5}f&uZ2P>SeGtu(YIPCf=!sN=5oo$cfUh zl#mCz9pggCOHUXi`JX;9(_0HN%iGI_mZMPgdUMr%y;i1>1iQ@wSiL-}g z)I*jd1}F1ChOACmy0@C-F0c~~RA+C)tcB#Urn;z>x7g-t+xYuiz=qtBCs%_Cb8i-R zT8nD0SfNBjDxaG;$=!By^$D@QFOofdcNw28T#|@e({iMXb1ew(vqL=&wM;J1 z*@ex%Ws-o)4(L{2DGv5+3sY_y6AD(A;H~>2Nl$;SFaGjJZU6RF$7v1*diS&_XGX=+ zC?zT-MKZx`Rf#wk(d7L>i|42p$<^h_VDB0jQMWl?2oQ)gqiSnuc#*U3moGaCO0P?v zuSPn9EvDf|>gzAQvaI7& zmWVn@_O&KEYVh{czFEmQVCcxh^Nr0hnj~*gkmiubAn)&qCl7?;qx&`wi4^_=(;N92 z;0?NyVI@cDR8q43u?#7nhHwx)Zv!tWw?ubj6jJ)t+e@U~xjuG=y<@DY zD%mcB248TN+h{^*8Jh5`Uj-Q$82I=WaHrrqhkd+bz+~zsX6GJ2|L(~rQU{M76|&#k@v}!=WFs$ z+?*l2xwG_CTbx7n&UEfMzs$e_Vfs+MT8qy5yKoRm+1Y^MhOt9H!63!C0W3md5EB`- ztDLm-?dzC{gHh=4){;0ODCf8OV&bL!N3sAMI^{+s7Wc?s>D7aQ5j6oN#XxxT78MnF zi|H)5u?1?@B~A_YpRT>+TB0X&Z!(n~4^^6dYz5U|G>WH|7g$4Z`WN)>BOv3rljm=17EkGm(sBCtkw=a~I$y5Dt4Pu#W z5Ocu3_@QD5j3R|>O`zyQHb;;39cZZ+=&lmdPA4;`N*17%IJ81Gb52!5Oy-B~ezNHu zLAu`!-f>UQIS;(Zr%QfSKAIT8BQ%*vOecl+0`B)Skk>%VQPZ{#tOoV=U@xG68Ybd= zG_u0!;_$DxrbJU%h0C7J8AvLgw&V;4Pcb_b0+FJtGt?gdmJX0fI~~(9su7>4-QW#! z=Y1}^i;-Pg0#w#w`+y<)A-w>%jRRk24t;2&F`Oi;eA@TOp!9|tvHVGr-m@svVKQ5s z9Psq%FF552r09J-crFW)>xbJF_~+A8qcMv`P^ zeL_Oi9UOjR^aySl={(dNicjwRjPU|LwvUEy5>+S}85x7FD|bw$@l~DFviMUzJb7yx z?u-G3^TaLONj&>cENTp%e1BTOf%h^*+b~2?@B5ab z-1y~dTfPwkyk2%o#}Sd%`?JLv=+MwmT#2$5)4UfwCB(r%*eO5?nty)%D*66PwPDYj z8?Cw%*Qx{q%EeXgcaC=I7;9k0L8iyNf0Nk#I0dDR&>QS0GpgWmu;rqM3~;?USwKPY z%1Q79nQl~Q&Us3Q|-b| z{#6&?R+K?;r%_5Z;1<)9CbRbH1i@$yVyGYL-u+i$EX?msk~z#Sv3S@ z3MdO%n+qhXS32+CyH^H|2jyQAl4WM*nnKA#`{R2Jlc%cMb{}*^iXyVf>t; z%4Yl=h33uzO~&W4 zIA@T|Xbtlh<#n7fh-mBpuzQwlc!-`Ys>6;o(^o{lrsmf9(e;&aWz#vf$PQ7RFW!4( zh~$f$DKFtERsqH{UzP<2h8;d_;HC2j35cW?vN0V!!%utHN`q*fq!MNF*_Y+ROsaY8 z);l(7ubqBdrfKd;#X3TtO3A64)=ch&{o(9eN&phw@|{JO8}&Z3?iKq&(!*l_mU;LlLtx{=PUCfs!@aZTQf$7) zMA@}m5+GO!^6f(P^40I(H-rnea>u`bogb5*iy)q0@L`au+s~gf@8s4piUkcKx2b|M zq4ib5&ZX7T&fQMTCM&=2`^`kSN+1u!>SB>;ya+IdbT!l0(`@P$je7&vltE+Ssq}IS zvqD{+R!Oa|AwN&x17`!OlrRYtPN9CzEnM*Q>pmd3s&iFh@OnwNN$GlGYWSu>1i1!5 zQ$|xA*1ljJ7nPAgp?vP(8H4`4mCoDuIJFR~J({`hTHOO5A4qmoX_dWqOpKziC`%bh zUF}d`96wswZ7L`cnNl;E{UMNhye`r9?oq#Flzt?S`-A&^)smHl5SjKuT|ufi=b}BB zC>Q3xz~t)Ge5U%s=wh$x%k5u4DwLLMHAYy9 zD)m^laTZj>;DJES6O=EhO1*RD!@)J%kFp~o6g(e~eOuX`Ims6{dPHIK^}B4Ixapl+ zrz<02*+*lWwyc!H(?T`l1I4sl{m;#H>ah9f1=gK)$ogh4uZKb!GFV!i*ld8f6|Gsc9K8uE$J(b0kew0{1B{u4k5n^;0Lpm!e2 zFTM5kY~s2|ppG@k6xRp;D4MR`y&)Dl>+&hel1eL0z0;;++tN^YJn`+!3ZQkRBqibT z=g=4~2;S#)Z|ld8>F6*hS|N(MUFMf+YF^FKO`A;YS(cp2 z`8zdxKfw?)U!Gjr3%yuekX5HKerwhuvUzfTr8YtAvlm)UsML?T^IN zpD$-sKE>@moYT6$tm)}Bo3lE&4r#Jd>}`^6raOqPM|+QiLC4+WjD3ZgmKJBGQWUG; zw)Ht}Wmr9z$0JjX+85)o=py*Xe#Q^lZ-$r2O0>YHq~M6X4*<}key3rRg31PsoGLI( zgssC(9(ji<=Y$_O>V=QlUlz%9=Q<7;qE%iBNSAxn0+ z^=fu$BF86&k;eb!cLs_?UZL=*i`w_Y`}dcjl%IGGoDrHaLZSvY5y&uI(#r7=$biKF zYoI@&30px=PtR%_NKRO%8{Z%t$2bL-g?BHtPe^kxhaEw!<1&mEs= zMR#4E_(bLjv9dHVM#dp@z!S&wqU$$=T?_6B!TUDd$7(`B1p{;aI0ao)DQcd=B2fVW z2P6%{PcA|bYw_{%0xm80E#djr#`U{L`ldp&+kMwZ-mm6d0IKvGf?5X27j z0$>FYTr+i7IKk~%?MJ&6TrHDKhEI4w0MyaiddBj536QH6N_TKFIufORu4|eP7(cN778b zAFA^YP>=;MTGj`shE6G|#$9-kJBfjHZz8w zX@T;bGK>4xnJ9SKG}N42nUxs~fBP$?7kUv+fdH|Ww1shLgs)uc)%bxzQ?6yyh`g!|mB zYkOKG?^6R&xPTXNG(wF!n!g|&Zy7sn&$5P*pDh_S#f~*>hmw~Nkdi7`O0*4BnWk3v zr~60^{&so{qvV#`S2MPc3;e-&F{zw8iE5}{9@m1983jIfE}Ab01W;sm7Laj}2BF=W z>3Kk02qK)+FM-gG7Bp@8;m50jYiI1&g==lF*Dhobajqf?N&v|?_l@=81>y{2Wb&!w z2mK9Qv!Jysg$`@j6ZOiecxoIRjaBl zXzr{1zJKb==DgG{uzIBPZ?7EM6O5~~0y4E(2YS^d4zX(n z&DW!hB9Vk!y2RcS<}rUN?3bBIDMc6;R5UL$e=jeeWMmwhU!L4{t2w3$4VY$7fs!g7 z!^4VRm^FS_}9d*jF4K-5es5&MKknpp(5$!X;0XnQx|>GC@S+T=LJ zo*g^73U0@SgoNmLBc59YLq^GK_E|w0lDuM0a)*xb4|N1w!e^{fIpMe?qg)E_&O*s_X>?_JjlI!X4ID|5biviFfbb z!K|nMf7jwq<91@Fql@|r>@yWtKSC*?3WU}RVH}Mznc9UYJZYdyK5(D~${!H_k`fXH zi|M#enfuYv(eR@*TZTGm-g<0>bH~3dy=x(ybs3ft2BV)|L2+B9L{Hpv{`Oco1h`4m z4&c7L$CmJC@f~P2L)ZAL5yRTNtu1R~@A^u()n=?IBoFhMU7c1TvW>IvOO=W9Ymdgt!G-l#qfpVw8g)~ApO_*j^DI*I)Q#z6Gdkk9jn$;iGElUF`gWR2odGQtPk*Z~e=lkv?>a5t@$p$)tRLkmwJ03m)pz|((B(e-@Y%v|&3?_$ z6Zukc#{m6-1i~Dz7{4p=zV=X))6xB`J&g~F=p!qHi0pSYP7`;YxcTn*(txAmo4f`( zcH@QmTAi6OE5|o}r)XE4Sv3XE|9EM&!c=_}M~6R4C;AVW_mP(>&}`8rs3Rcgex7Jr z`i4^$1XXco)Xd^yl%VxV_rHTE_+EaTcD^hpw|Cbrwy`_?g6OnQ zNqO|>QLxSNUw1S#G{(lpz_X^*IdL*e6=g7;Jh=@bzirzNEjkYk4H51im>)EJX3YIL zF_-RJwAjY+{A5T`B@+~>(B!p@ z8!d8s_i~J#?;nEnAS*k&va(XPXurc5^^M_GG%VR+DVD7vu zDS1Lzcm?)in$X1gRAB^y&Qq|eIKTxA2ls6N+w#M_@}GX@&RBTEx1>x@_xCwXF=iNx z+XTq(GiB5uFcJl^0&3q3?ZOsE5rdljvGwS}973a8;K=8x1;jxhQpJ$gkj^HzqdLa^ zN$7sjobBys^r*yD>8PW6O4aIEmc0L{T}Z+lu16~1R=?j2C`owl`Sa%?%2Vm*MP^By zJ02mvyu1uw6C)_t3Cm*`vJJSbp`YYu$*i9bk*fvWfgl+Y{c>9yPdZ-q$oR(h!(^E8q^kOO{kBkV?@Qo;eL1vB9Nx@201<|*)JU!| zjF!jXr6S-bA0d>Bv%%GgG>rM+>ZzHVLEkQ!joo7B?g<JLc}UOQ-Y#oBUcf51Sxo2)WnX&~SO= zHY_FXb|MZo3kr)t)KX!43Ax*th@X#-HAH*Z?qW2OTIerx3kk10{UAhuMrWsQvrv6( zT)*KR(!3=WpT2$6e!Q)=GvA{s2YxTZB63%**lzypX@i@--}Fz3>3ns%dy~ionK?MN z#$pR={Eif5OQuG?MZ|0YP@k>3%FuU7E|u!gLpl5$h!3gm>ACqfk9+0Xhpz29iT{rl zC?xmYwsotZ|E}Fq$QnR9Pp!TIj=oiF1Y1_oy7PqxiX$wzZcxw#-3jMck{Fo4-^!w&4eK#Y8A9N3A$;c`w(eIX1N)9c&}Z% zwpHvnKfgV&NxvKDV~DlAL=1`Qle0q^VRhbTw%R{x6ir)8%&qDi_!fhEBXN$HR428Y zL_mvxma;1u$vVXgIFZf7W&xvhNnYNb78=ZVU%!5>+I*$7f$T3hhU&6f|D38~F>C_S z7IsM8H`gT*jCP7>LA-{V0Lo74zI6z|1pR?#jyVxEnqi}BfC=w+OV1no;0236uo!-X zfx%KIr=;YE#tUIoFrfk4r2XipZ#aJhx-Cmot-cn-xxJW|;o=Ku31Z(|@a$@;+uG02 zzF2cm6L)>czNs*`zhnDEF|ohDAGr=t&9`h$6;eJSZznOcAI(VJwnP>AB$7nWJNl8))D6KX@(s_257BHyctlh!mf^F8 zou8=Mlg{vTa_G^vM&4?m>>(~dQy@+y3XIjvY!dN_&;>?C>Gksl1Oy;P5+>7l_&!~H z@@!XoMoNo-gy0L!Uw2~Ys{g!zAKx19&O`dKGCx5Hy=kWVnkh<7DS#K@Vy;fOBgpZP zI@TiH?Y)Y8_^by1iEgV03#Q&>Y@vU~oZm`|3-)PId=|Y9s3yYHyv+Z?+4G;F6-Te( z(BSLqhj5=>HG$13nN`0|X>nmJNEY8B_2;0wB`RAfDJila?Y5$5vjnh?PN>_m+{E*0 zzQ~;Okp&hg4Q7RRuU<}a^mRsbtKU|knNzI2Ng+JLVSEY zI#W#W9DuXC(UG6A!A)j{;eh0Q8LD9&h}22ZX*AU79Ab)A#y6cJPYEXPNvW10HbxKG zAk)@bdI6yGkZnL55T40n(fb>Yfn#0Si78=EI{l9bFAxr-us7^H^cwnlh&_sw_K8#& zWn-|UC7uNaA~%sKqIHnFb0;e$<<+ZKj5`08XsfBIIXO9@r*&z=pTyB(D++2>KtOvfzdi${WNMCOdV9*aYGM{ZHpg6^W_tH;-$g@u{q_n7l(NmFj&48ewp|IhA%A(%|j zA%{XV45D2Lll>XTKe`+k3t?el5s{L(U3dAd=PesyM9}cyKm4V_DknIz*7)MB z&4bmvYvT2DfH*g9YeE4>xg^;6r3YlnpOHHG@%-~(zDo8NM%AWiXEs6ZC$evo%FErc zb<$P?pJ=G9W$Ctt-HLVfIc&L2!0FT*d+-Cg{MB7qa0X0p8S_uW%e7-|3>X$>f2GQ!F43&!hZ0ZCPK>j zJ_6PP0`P1rzvg`qHVf4E{GcP73EsW3(*6k!>r7P=5m5q4lmy6IaG zDUd^6l$0#gg&NIcaZE|)|HgBAF5TBM5)v@&xjozSeq#Bj>4s@o9_}8kfWq<`rw&!S zENwCWQc?)F5x?)qO#~0IW72rsr=L;DS*~lmcTu?~aBhvoDO*8G0mE|kc<(W)+@2}i zP)7L^X~?lG9EpA{PQDXTuIBloU!(cwS}VJY^R+~@$nfV1d4<yzf(o71Z}EaEs75zbM_zo?gNW9?u;7kLJ)f=E~!}&kkzd z@nhQD%j;M->(bN2l-|!FAGo#p&oPM>e}=&KmX_+RLnb9#l|=}ki)3{}EnmFZA|EZM z`YQ`ln3l**7C)h zANGFwL{)iL+bPn;_1<$SSsx-bfy+W%D*mn_3bSDi#6QuFW~!&C$_uj~B$ou8Tw6;P z0013S2hsvG5kX2J(>ZUNiLNkL7_?11$Il1R*>@~p)g)j8L>xW@*WjSroERaNZ{t>iyu9EMggNoty}MNdm?mg&=G=*K z&z7Bymlb<~i$GpLOF_Y_UqQNvRYAbmVlEBnVK?fUuW&l_3}%s zjgB4)vJ3k}$qyeE#1THg4ZuEihIl5{^!vx#v60o*)V$y|RU_293zLQ5Gge(X?h!c~ zcgD6&4~^O17?Z-0NN0=nFJi9CX6Rd|r#~-&?fyskhMVyROe7DQlp}FA{#=)(#6{C| z7^&xjh_-NIc>Ry!Ej2bZQMR+P{|KQ}tE1T-SDoGRP1?~gwIoZjTl}~f?_3S091OlHqu ziZz{%joeR3neVpdL>8cX!*GVXaD#V8@-+ur{iNRcd#e-CyO%FXfLf3wj&MBt*ouYf z3It0>^G(|82J3ozwF9$p?uXa+W9;na5bk6U7_mZzih`kj&^IrOrNdJ$hq`XQfvPAh zV?ycp*&pjKuew-_AC-LGc%e$I=eF~kU}SF|TQFb=2?;{}yLzo^n|>~Cdz6-TDsUvn zyr;vl1oj?(N-@hv)l`0?GrXbh5A<^!bkMg6dk=bg^X)QcFCG7(qB16OS;7sL$550| z%G+W#at$hRrKGs`{%AOxNkL9ND1bb$q}CdZAt|dH8Dfe_8Qf;d?@J<=FBEiJ0c=JU2ezB1t{*YW3&8YB!%uU-rIaW|p=@&W4W`Aj`Qa zA@N}LclWJ%IfN^FS_Cne>2{3@V(!@<)k;_U^W2`>q>}&oa3e{6pzCE>0f2$qz&7aV zb)*hWlj&UazGPxD4(y~)ogjNH8shbNPM-XL>KH<%PQ6cY(g&;WW=w$X;c;q2VHr^k z%;`@#|4N1;PS3pZcHg^$nwpVJ^(+_BsK-ICgd1IRY>PlG9HV8yOEC+ zSxU?X1!3Nn6!6^vPmR3wDw=h3DdFEZ2Tk8)8JRm}=m4|-Q(k)tsjH8xpZ;?1ao1c` zG<;A%(?F=UyVJLb#jl5gx1JiI-h9r;xi51jwych>u(oXUf!$IH4Pi!KF|WNx3Qe%X z0-tPMQTlZ1aTzsGjo=_MAFQFZ(O7@E7hK=4p^Tx9MLf4N)cXJWZ`VS(eh zKXO8ml?a|GLpSrjV?#f*f{IO9`xx5J=AEkAsH?4&zH%kE%ZzCC(Aia@4QrsYXU_u6 z+AMca!bU_KIeJvLXDH3FH$meNSn?!7rZ)bjO~JD<7cGvkHYnPP-0kqe*Fyz0I$<|;NLi9U>(Q$ z6cAbFSw}vkv!Tthg)>tuYSie}jFo!qr7gm7J9U@qY}NMz`BD<#5hd6q#4XECzT_PJ z?*1l!ov*xua*2VjD*eVv8@JNb)2Jj2Tmc6b^Z{IfN_BN4&q#Tb)$i`2BQ!`uLlag}vYE`gq%mO;|rxl2`f?NI3n#8~wId0G5zLFAfT0 zq6V?4sYWJcmgSZM2WcOfS5}|Xq>ygttu@I-_o3Oq`^Q=C4?!ke%e7c&Oa<-~=~ZLC z#+Z~c@qExUOYEFpl)n2IW%2-%PHL*C3G-sRQtDFix*5KUQ=%UK^iV%c{a^aI_sq*L zYeMsMClApzPi9%Aoro$)cIIHJ?c@|*$f6S(;7m8Ou=rK-g26}bCIf$$>8XP5<(}2) z^3Uo~txx!dakI=(pBqq+RisL&D+#G6^D!POVU#y3SvT4B=F^#Ru`rIzqq{;5E!H3mzxXc1wqJR?_2*f4K4m>?-SX^h zuU_=5E=K1K-Q(C-&X6K$=gzR?h%uYgJD%6wV)(#@_7sIVJ$<3NK@Vk?#iQ`G_S>;3 zDfXaLVah-B`%OyuTxRS-CWBpH*5b3WR(-B$NLCXDal@|36Gcunp3f2u`wH83{ua zE_P>i=2L$>{7gD>64~aVy?e#J-!ltim=F&RI#XUg@SQ1r<*_?s*K(+Vv4C!N zml>ho6TD-9r1E1_R5*j_!JPJyIm5*HS&gdG7MY_AI;m`~^zFL&%=!NmF>#B-s|)Zb zp%jOdhd8GPVQr`LIg0Y|@bI=am6so3@TuIATT#ylG6nYV+qZ`h%m{>rU0q$^S_qs4 zXEX17qMy?XYhhzp3!fr9y^e=p#6T$vh{MFZ8dCSbe$J;op&?`G?MF}wkw?`Zq83-St2DO zg{AD_zNXok8Jt8z91sIYSbN3E#%4}$eI^7d7S9I{3ewfIA*MTup2jAa#&6&68}sR3 zse1N%iVko(7O9-L-+Y8}KJV)gO$0X5dcBvw#JSZ!il>Oa$>?X?MJtx(KGRV5nQ&-< zd>4%>*osDQXv5Ft72QHsj3)+@!gww_wCePWeXmig#V@jt|DF3>lftrh(h-y=HblY@ z@8rq#^=Fonw>o6~%%0^u_!@P1KjDmqZHn-c6Ch4d6M3Xh9tjhgeaEOIUy=C+YyA`Z zYd3E5QRntp`W6@I^|GLQ7oD!057JwC(@`S(%sQ^QQ=M~|O81knl7>^FssvJgoRAX} z6XPB0`#oenK5@>_IA_leC*3!>0YVF=;~E#{i!+|sK%s)uK;WsF+_%1Q`1brZFkd+| zC)S_8cT+{kusw6atu)(_Fgj}z-&h3`qkU>9_y%qU?$DcK1}mJ0Qe2uAWO%zUjy^ne zoXT~>V_}uA((S_$teMnzS^koXpEXzR-FPHz@YXmS&6OWPZsRgs@!L{8WwC3~gfm@uX=+q*c zub{)mu{b?G;U(YcBI&zoV~Q7+q9cX|89Hw4(=xWp!K})#{AD9)2Zd3h|3=l9-xI4z znKKtHvcxy!%+%C^nN#K*RZkvyUhcxOr|8gA@K5vGPX7{hTzP<;`(BE74GPIV4Q%6Q zziq1O91^+o3d@7P>HqY(p_%ZFI*uzalvCc4TT3&?n%B_b{xe#m&OJ&}JPILSZe4Ng zHCE-ED9}>9ct4TmNO@Y*GQ0b^$;)H`C+%xpGi8Rx`O7}$$JiX^uoq#cM?4a_J@CLe zmDqF1H~HgCUWCBcA-7e_#Ll(eRP_CNP5gG3RYp;!q>)Wd&@;)MtLZJVk4}&A)xY(0 zvt*dkySV30C(pzh+h7X|SwIHEPWu}p*RIdE^O$4WTCid(jb`4&8cNjs|IKEv3caHD zk5=H^t@6;d;?j%gxi(j*^CLOgj#A06UY!D( z`ze>|w@aKrGc;4R!wM_H&2^&biqxO0BDw7%%_F^+2j+j+EgnnUWu;!cB=5dt%^>0;?P+#=c{2hO}*pEB_ z)E!Qup;#uMc7B$r??h94!9em&RbDSC+W`5S)a&{8%QzW(j zX#upjbZUYrj4w%9UT!t~EajXrtvi={Kd4jlkeifaGWieAwTYzJB2A9HGhIs_wk_tt zNG>+!j{MXX@m+q>WOF`7bYKf?o;o;$;cmfb6 zk9yVoD7MVy%J7lnRJ>xtxg1k|IE8*+u4Nk}C}aUqiH~*L_BA!p zJ-!504vvUYTvSEfqVO*;2P9fh=vRRJoTuOSn0T!XVUJkzRk_V>t^R)c;ZkGGy&K)$ zXN)#PHq4E8@aiU4Xn|ytkvK8-f_Ax(dC@q&meWVV08BAba|?C=fc-{=xJ?KQa6&bt z3?Lb>+m<;@$7t1It$H|zn!UAI%_=+o|IqaoKv}k1)G+F62d|2t2w0#rNGfT80wN_{ zBHc#Zn%-2nrb5$Hv2xAmgnOY6ZYUi zs%GyV6B#QRvPRCMcAAX__nk>}4M5OVYPD4G!b@}4)zPYV<=5f5qyU`-R>-<2=w zTUuBEes9mvzIk)U7${$AP6Qv2OnJme{AsltwNJ+EKQXR$_6Zw*bj#IR+RtY3tG3K_ zv#b`u=hyQ^?1ichzPXhwi>bGrtz$1U*M&JsOOYv_br{jQ&co2TLc>73_S0s6g81p_ z4ZgfMjAEA$M>*u+sEbm|h5?bmdKC_}@!C6O+xzjiNkrK5O9y7m^)pMCkJNned@+%q z=xX7n%lBfcPl@s)27W)8tKG8 zyS!8E9Hn@B*_XJnvn}2|uta zNK4F|Y;h+&-+vgiR@#wVa%XvSV~+bo!8bDw&r-ugj-@sW!IynvG687gz*j{d4~7+e z_N+Va=Ih7jsr;-tf8`9%+4%N1%eJ1)>tk|NXFR%mOZwPhdmR1c%0KO}TsQ)L!ax%s zCYZ^HGUAewEHm4Mh06fs5%i&tWXIxy>hvr>c)SV^ry?g;Xd3!xiEf>|{K10OVv~*h{zlf&|F-PH_>-7Q@MCDd@*^{ZQ_Haje2Ga`4&r>I!Rb}P5$_KtPD~pg zTwJ{Ix{u|;g$vx=t$JC+SPmh5h}}+fDSOn*&3^T*Os9l{;S&#JfCk*&DEkjJgN$AJAXNU9$@36BhnLfm%#Qw7fTbV zB9dCLkQMKxDXXdVU?dledBBhRNKSB?D}G0+w!9$8y~p?{z9!v!iE7X*RRJn;g`uLT zB~daFNaxl7XA*w9C~m<0D8W{ASx$QzX)~QbWUaVf0rCEg z_D<_1nNV(V7`;Tquwc(*oy zDnz+#rG0;@ozZ#%I7rw%DO0}E~1d; zcv<>_akVNzotb>lwJck}-YG);9MKV^xy!Mp0$S++%tKYO^t^k`F0I~{lyqL3%!Az- zW?$w28kHij%^$tdObii8C-m+{QME}f=`1V6@ERN1yXl*{aKy3rkE$b6U2){hDiZ?Q zz9pzcbKM?mUsiz9>vv%(Se#%i-VhaqDK23o!dpzo$vF@8sd;mJ9k!LA^ckFFmoFk! zqq0MN>YVCC7o$njTx%P#YR)flOxQPYFsIKz*U*%6ypVd!)7e#gWpx5J2uFUsySD() z5b-$`=ruk81*ogR%Oh!n#x04nUB+n@6%~>oJOMR!@5I1px&YagB`LhxJ)&JD zyq+@mK)w9k58H%n&&!d_3A82YbuMSRXH4G83mG-gI^-GNRbH_*&T?&d`hN9GFD;tS zACG!49WQw>@ENoItDqz03s~9AHTcv(pp!AHL0+YogtY6(3YZ@ z7CB!5mGd#V9Bhc8S0Ew@ND2w7u!f4ZpC26#law^let+~!q{P&M+R;U`X44OSeQ7BY z_pYHKNN;0yNHl^aIy2b%&wEhfS_BeMVvmv_DcZK$HD!kUL4 z#vRaDFWLuW`=cCEpievAuP)KDO?Nq32X8334Y+FWl)ulf%xvXJ{*>}@^#>olqrasz z+O`S<_b%eNutRoY6uQ(bB`mn`{W>r{!fg{)6=`Mh*nY$;81UhUf$l)TjxDjIPBPYg zW8n2v$F3tQs~k^u`8s=dLd)EYa$_iZ^V7Dht&hQBs+8{kdXfjbSl^vzNf8qKz#=eJ z7j*@1n#J+9={FR(JR_s}?n_n8DS^iGw&$UB zHk^B0HawwRL^#G`?Z93EG#pRw)J!yZ#EGfzENyB#+uDompMB z)%yzXpVUqp$#`!m+^TMPTd!){Lzbr#CI(RWqmYRFFAV%emKaZ;hycq7oJ*{QE9SKebKw+(126U^xlYM z23OM$rTWG3pOP$B7cQAvoikticRQ#~9|b=dKwyG*H3NVVJn-)>snRttGWpTwaNTT+JzTW!HL+6 z-*D4SY(0I-H*m*nPSq1La(~H>nR7#pIZMeJix+{m#XSLe0rs&g5Lm6PtQ5o% zRAW1hx+`%v50>j#O&zW?=6L^%*?x=y`K@oO+}aHeI2d? z+;}nd-*$HF6GmUK*G_CcP!Nui&kb8_n*X(8s`q}hmpkz4*RAa{k3t_;JLZL1PtcTo z*mCAS`Wr#GoBa>EDvw@_nXIDlpke6#G`hcgVua)1*3s=B=45uCZwxNJFrK{Qcj(4* zj`3Hy3)#F2Y&gW5KK}l>0el|q&j;736^xMuzQ~+K7RDs=ty+-`{;>$r3Vg| z)?V>!Dzus$tdccReJLUyO_eDfYq@&aWky!Z@5bMIGpbek2KA~QiF0*k#sy74AWlJ+GbH78k# zx<#GKX6bAqu3L|kpDfL#7|pZaZC}(xx^CH>Ut3HgEjh|oj1_tOY!S6s{PmfO{4X(5VFA}02ls5Q=oklr&y1H@k z@iYQ<50Gr4k#4Ke38ogXsqcDOaR~{UVDRC%hH);MX~j7O3YryI#lKc-YirTk`h^K-7&Ue5 zH6TY8sQb|5uip=X+IlT#!#YSv^@@0=Jlz`dc8TZXCOj~b42HYK<;%>>A7X1Bk3b%l zoCIxw3K~K+x_Ib>1h96K8C}PtkB=2bzIk(;ii+y^aiyl506z1{_OFxdw_}zB3|Nj@ zHu%Pl=ehVtMVQ-tYW8j+?RGp%E{WDt_as`IJEn(pxzr0;8v0)u>ul~5Z zX$LA8C_PMhFy~=b_R}MN+W$A`9CC7VI2_69v%N>D-j5No~(|mjm2)WobHl+mkf`1igfQd&^E2yl=9rAho+W-f9mndz5`CT#mt;DzjC&`ca1KtF=mMbTb99_sY8huCuib4O{pn>Pk|98DgrG z$IL5t8i%Ta+;*^6(Dg-s_d#}mM-^c{ka-qJA4%M&Sk*igaC zb!BxwAI`%|u$(tSP1e|ly+gv=kW}rzc<^asRKs{Bhxk}~Yt5Z;i94Y~xzl}SdwG32 zr1|7${V%J3IIqe~r}J&b`!?JmNuCeNLXR^lGx89^aF2DW5pseRgtiz+HQ|-@RG`d~ zR2V7kXr*^Yl|jScEg3UrKNno5H>Lzc@8#<4Xg2?;)c1IkYrW2vvSEsh!a;~XEf$7q zc902=WH6P4Lx1A)6!AdQm4}x0i+wokM}FDjYk#auJ{fD3YSt0WJCbh3<}4V)HkBS# z!^O<>kui%;<#ypAnd*}M`XlP!CMf<)D6D;}iJP_rEGW(dy@4^sF>haAwyx`3l7!A` zk<_Y?=fJ@|d+580aLaGgZ&NPR>-|o?o#(te6k|%epd=%UGS|jjU`KuuXAG&%|;*gN*A)yX?X@B1Z_3hylgq zBp+{pFg(5y6!)$DBia1b_tf-y2KHOK=6tt#*=0g)0;6Wny9~I>zPf%!-y0_mQIrYC z(djy7QgI%&?RJ&m{O?iHX83~RR}Og)k9@65@KKvibnXd{{l6rN)2Dx+Ic&Z8C$DV7 z6oOw~*P?hs3=Km|)N?+NNIS=#jgp?tPBGGmQ^R-0U{Z7<<2F4Y{0jFvU3^gyw6qmN_;YLC}O?N+mS{| zaYS8g<>r3R-AvaqjHQ+Blf65qxmYE)Dp`vvk$RBm1|)wnz!G&ocyf6C;)M(PAesUX zAk1iS3fZGkZcI?0;8OVmU>GLIz_e%(HhQzZe0Qx;odKeAb=ZV$b$BH(M%xS(JUdz2 zD}(aGgTSp-W%o8HyDTf3>St;l^r%`mL@sP0lg3&2+M$6(PyOTcsqZdA4bL1PeHUfu z@)2vd;POaS%}f251WO14~`1wsHC9K z0n>q1VSjt4NiJxeFK<~`aFo5ap!>h_9@OMJ&+q&n0(5WW$r!tz9}_pZTHQs1vXkU7 zEJK!OiuKTI0f~YJlu>^E8lPQ4{YpIt~(1V z$-Vp^@1Z>}jASYh=hnafek4ClZ}$J|V}{Ij3GlLD9wL?x0luL92W;{09}vO4&C;ab zeI}T40KGL_8PA;2LOtxG9abm0i@*@<-<8f?FYZ&L~}` z-v)#~Dlx5r|9<|Li6`1BQMZO()5o92xwSpt^2PTu*DU~+QeixkZiewuQT>m$?NGoe z2?=Pl6#kCvln~3H7ev&2UX)XCl>YPrO z)qS3rmw}&6&~9OX?EddmJ8y9@u}+){1g#j{90)9sj=(7tf57PMvFSF2t2ER8emqUU zF^?+XIPC{=SNfc;`l85@=h>goGu6qmL^fDK$0Yx1+3dnG7K$g%IxZ9v?L#XzPiHt; zq})u>(+VqpHZ_Egt%ZvZ5x^__bh;jY+mf+isoV~=1=0B$pBEi(b6!iL2 zPzep-P%ly;$i(7Np^wEID62{J_umm6p>Ex@46CR-S0MLQex>F-3Lo^>pGw@XlM8su ztD@>6kUTAMF`Pqqio$VuPn;qBL*loef;t~5=tu;`ONaLDqr~uLenPNz#gL0jbYsBe z(@P!MTxR|hL8b1a4}axTFJ*q*+6t|eS(z&uz69~?Qw(h)s z^OP%ks9!guBnF>A5jgS?fn qOrAnj~>8&N(fNE^hjQSv#BCXu)dA;&mtqjEkHV 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 { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function () { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'minisearch'], function($, minisearch) { + +// In general, most search related things will have "search" as a prefix. +// To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +let results = []; +let timer = undefined; + +let data = documenterSearchIndex["docs"].map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; +}); + +// list below is the lunr 2.1.3 list minus the intersect with names(Base) +// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) +// ideally we'd just filter the original list but it's not available as a variable +const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", +]); + +let index = new minisearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with search results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + boost: { title: 100 }, + fuzzy: 2, + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + tokenize: (string) => string.split(/[\s\-\.]+/), + }, +}); + +index.addAll(data); + +let filters = [...new Set(data.map((x) => x.category))]; +var modal_filters = make_modal_body_filters(filters); +var filter_results = []; + +$(document).on("keyup", ".documenter-search-input", function (event) { + // Adding a debounce to prevent disruptions from super-speed typing! + debounce(() => update_search(filter_results), 300); +}); + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + $(this).removeClass("search-filter-selected"); + } else { + $(this).addClass("search-filter-selected"); + } + + // Adding a debounce to prevent disruptions from crazy clicking! + debounce(() => get_filters(), 300); +}); + +/** + * A debounce function, takes a function and an optional timeout in milliseconds + * + * @function callback + * @param {number} timeout + */ +function debounce(callback, timeout = 300) { + clearTimeout(timer); + timer = setTimeout(callback, timeout); +} + +/** + * Make/Update the search component + * + * @param {string[]} selected_filters + */ +function update_search(selected_filters = []) { + let initial_search_body = ` +

    Type something to get started!
    + `; + + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + results = index.search(querystring, { + filter: (result) => { + // Filtering results + if (selected_filters.length === 0) { + return result.score >= 1; + } else { + return ( + result.score >= 1 && selected_filters.includes(result.category) + ); + } + }, + }); + + let search_result_container = ``; + let search_divider = `
    `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + results.forEach(function (result) { + if (result.location) { + // Checking for duplication of results for the same page + if (!links.includes(result.location)) { + search_results += make_search_result(result, querystring); + count++; + } + + links.push(result.location); + } + }); + + let result_count = `
    ${count} result(s)
    `; + + search_result_container = ` +
    + ${modal_filters} + ${search_divider} + ${result_count} +
    + ${search_results} +
    +
    + `; + } else { + search_result_container = ` +
    + ${modal_filters} + ${search_divider} +
    0 result(s)
    +
    +
    No result found!
    + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + filter_results = []; + modal_filters = make_modal_body_filters(filters, filter_results); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(initial_search_body); + } +} + +/** + * Make the modal filter html + * + * @param {string[]} filters + * @param {string[]} selected_filters + * @returns string + */ +function make_modal_body_filters(filters, selected_filters = []) { + let str = ``; + + filters.forEach((val) => { + if (selected_filters.includes(val)) { + str += `${val}`; + } else { + str += `${val}`; + } + }); + + let filter_html = ` +
    + Filters: + ${str} +
    + `; + + return filter_html; +} + +/** + * Make the result component given a minisearch result data object and the value of the search input as queryString. + * To view the result object structure, refer: https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ +function make_search_result(result, querystring) { + let search_divider = `
    `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`\\b${querystring}\\b`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`\\b${querystring}\\b`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
    +
    ${result.title}
    +
    ${result.category}
    +
    +

    + ${display_result} +

    +
    + ${display_link} +
    +
    + ${search_divider} + `; + + return result_div; +} + +/** + * Get selected filters, remake the filter html and lastly update the search modal + */ +function get_filters() { + let ele = $(".search-filters .search-filter-selected").get(); + filter_results = ele.map((x) => $(x).text().toLowerCase()); + modal_filters = make_modal_body_filters(filters, filter_results); + update_search(filter_results); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let search_modal_header = ` + +`; + +let initial_search_body = ` +
    Type something to get started!
    +`; + +let search_modal_footer = ` +
    + + Ctrl + + / to search + + esc to close +
    +`; + +$(document.body).append( + ` + + ` +); + +document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); +}); + +document.querySelector(".close-search-modal").addEventListener("click", () => { + closeModal(); +}); + +$(document).on("click", ".search-result-link", function () { + closeModal(); +}); + +document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; +}); + +// Functions to open and close a modal +function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); +} + +function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
    Type something to get started!
    + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); +} + +document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.6.16/assets/favicon.ico b/v0.6.16/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d573d7ac72ecf2e8ed39a4911ebd304ac6b9157 GIT binary patch literal 4286 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,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:whitesmoke;background-color:#33415580;border-radius:0.6rem}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.6.16/assets/themes/documenter-light.css b/v0.6.16/assets/themes/documenter-light.css new file mode 100644 index 0000000000..1262ec5063 --- /dev/null +++ b/v0.6.16/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.6.16/assets/themeswap.js b/v0.6.16/assets/themeswap.js new file mode 100644 index 0000000000..9f5eebe6aa --- /dev/null +++ b/v0.6.16/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.6.16/assets/warner.js b/v0.6.16/assets/warner.js new file mode 100644 index 0000000000..3f6f5d0083 --- /dev/null +++ b/v0.6.16/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.6.16/developer/conventions/index.html b/v0.6.16/developer/conventions/index.html new file mode 100644 index 0000000000..9dee0cb54d --- /dev/null +++ b/v0.6.16/developer/conventions/index.html @@ -0,0 +1,6 @@ + +Notation and conventions · DFTK.jl

    Notation and conventions

    Usage of unicode characters

    DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.

    Symbol conventions

    • Reciprocal-space vectors: $k$ for vectors in the Brillouin zone, $G$ for vectors of the reciprocal lattice, $q$ for general vectors
    • Real-space vectors: $R$ for lattice vectors, $r$ and $x$ are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.
    • $\Omega$ is the unit cell, and $|\Omega|$ (or sometimes just $\Omega$) is its volume.
    • $A$ are the real-space lattice vectors (model.lattice) and $B$ the Brillouin zone lattice vectors (model.recip_lattice).
    • The Bloch waves are

      \[\psi_{nk}(x) = e^{ik\cdot x} u_{nk}(x),\]

      where $n$ is the band index and $k$ the $k$-point. In the code we sometimes use $\psi$ and $u$ interchangeably.
    • $\varepsilon$ are the eigenvalues, $\varepsilon_F$ is the Fermi level.
    • $\rho$ is the density.
    • In the code we use normalized plane waves:

      \[e_G(r) = \frac 1 {\sqrt{\Omega}} e^{i G \cdot r}.\]

    • $Y^l_m$ are the complex spherical harmonics, and $Y_{lm}$ the real ones.
    • $j_l$ are the Bessel functions. In particular, $j_{0}(x) = \frac{\sin x}{x}$.

    Units

    In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:

    using Unitful
    +using UnitfulAtomic
    +austrip(10u"eV")      # 10eV in Hartree
    0.36749322175518595
    using Unitful: Å
    +using UnitfulAtomic
    +auconvert(Å, 1.2)  # 1.2 Bohr in Ångström
    0.6350126530835999 Å
    Differing unit conventions

    Different electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.

    Lattices and lattice vectors

    Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still $3 \times 3$ matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by $A$ and the reciprocal-space lattice vectors by $B = 2\pi A^{-T}$.

    Row-major versus column-major storage order

    Julia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices $A$ before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.

    We use the convention that the unit cell in real space is $[0, 1)^3$ in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is $[-1/2, 1/2)^3$.

    Reduced and cartesian coordinates

    Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as $k$, $G$, $q$ or real-space vectors like $r$ and $R$ (see Symbol conventions). One switches to Cartesian coordinates by

    \[x_\text{cart} = M x_\text{red}\]

    where $M$ is either $A$ / model.lattice (for real-space vectors) or $B$ / model.recip_lattice (for reciprocal-space vectors). A useful relationship is

    \[b_\text{cart} \cdot a_\text{cart}=2\pi b_\text{red} \cdot a_\text{red}\]

    if $a$ and $b$ are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for $G$-vectors) or fractional coordinates (usually for $k$-points).

    Normalization conventions

    The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points and in reciprocal space its coefficients are $\ell^{2}$-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.

    diff --git a/v0.6.16/developer/data_structures/478441a8.svg b/v0.6.16/developer/data_structures/478441a8.svg new file mode 100644 index 0000000000..3b014d4059 --- /dev/null +++ b/v0.6.16/developer/data_structures/478441a8.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/developer/data_structures/4b37fa93.svg b/v0.6.16/developer/data_structures/4b37fa93.svg new file mode 100644 index 0000000000..1c932c6a3a --- /dev/null +++ b/v0.6.16/developer/data_structures/4b37fa93.svg @@ -0,0 +1,5671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/developer/data_structures/index.html b/v0.6.16/developer/data_structures/index.html new file mode 100644 index 0000000000..69a41083d2 --- /dev/null +++ b/v0.6.16/developer/data_structures/index.html @@ -0,0 +1,90 @@ + +Data structures · DFTK.jl

    Data structures

    In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.

    Model datastructure

    The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:

    typeof.(model.term_types)
    7-element Vector{DataType}:
    + Kinetic{BlowupIdentity}
    + AtomicLocal
    + AtomicNonlocal
    + Ewald
    + PspCorrection
    + Hartree
    + Xc

    DFTK computes energies for all terms of the model individually, which are available in scfres.energies:

    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1739292 
    +    AtomicLocal         -2.1467743
    +    AtomicNonlocal      1.5858692 
    +    Ewald               -8.4004648
    +    PspCorrection       -0.2948928
    +    Hartree             0.5586681 
    +    Xc                  -2.4031997
    +
    +    total               -7.926865084245

    For now the following energy terms are available in DFTK:

    • Kinetic energy
    • Local potential energy, either given by analytic potentials or specified by the type of atoms.
    • Nonlocal potential energy, for norm-conserving pseudopotentials
    • Nuclei energies (Ewald or pseudopotential correction)
    • Hartree energy
    • Exchange-correlation energy
    • Power nonlinearities (useful for Gross-Pitaevskii type models)
    • Magnetic field energy
    • Entropy term

    Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.

    By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:

    • model_LDA: LDA model using the Teter parametrisation
    • model_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])
    • model_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).

    PlaneWaveBasis and plane-wave discretisations

    The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the $k$-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:

    PlaneWaveBasis(model; Ecut, kgrid)
    PlaneWaveBasis discretization:
    +    architecture         : DFTK.CPU()
    +    num. mpi processes   : 1
    +    num. julia threads   : 1
    +    num. blas  threads   : 2
    +    num. fft   threads   : 1
    +
    +    Ecut                 : 15.0 Ha
    +    fft_size             : (30, 30, 30), 27000 total points
    +    kgrid                : MonkhorstPack([4, 4, 4])
    +    num.   red. kpoints  : 64
    +    num. irred. kpoints  : 8
    +
    +    Discretized Model(lda_x+lda_c_pw, 3D):
    +        lattice (in Bohr)    : [0         , 5.13      , 5.13      ]
    +                               [5.13      , 0         , 5.13      ]
    +                               [5.13      , 5.13      , 0         ]
    +        unit cell volume     : 270.01 Bohr³
    +    
    +        atoms                : Si₂
    +        atom potentials      : ElementPsp(Si; psp="hgh/lda/si-q4")
    +                               ElementPsp(Si; psp="hgh/lda/si-q4")
    +    
    +        num. electrons       : 8
    +        spin polarization    : none
    +        temperature          : 0 Ha
    +    
    +        terms                : Kinetic()
    +                               AtomicLocal()
    +                               AtomicNonlocal()
    +                               Ewald(nothing)
    +                               PspCorrection()
    +                               Hartree()
    +                               Xc(lda_x, lda_c_pw)

    The PlaneWaveBasis by default uses symmetry to reduce the number of k-points explicitly treated. For details see Crystal symmetries.

    As mentioned, the periodic parts of Bloch waves are expanded in a set of normalized plane waves $e_G$:

    \[\begin{aligned} + \psi_{k}(x) &= e^{i k \cdot x} u_{k}(x)\\ + &= \sum_{G \in \mathcal R^{*}} c_{G} e^{i k \cdot x} e_{G}(x) +\end{aligned}\]

    where $\mathcal R^*$ is the set of reciprocal lattice vectors. The $c_{{G}}$ are $\ell^{2}$-normalized. The summation is truncated to a "spherical", $k$-dependent basis set

    \[ S_{k} = \left\{G \in \mathcal R^{*} \,\middle|\, + \frac 1 2 |k+ G|^{2} \le E_\text{cut}\right\}\]

    where $E_\text{cut}$ is the cutoff energy.

    Densities involve terms like $|\psi_{k}|^{2} = |u_{k}|^{2}$ and therefore products $e_{-{G}} e_{{G}'}$ for ${G}, {G}'$ in $S_{k}$. To represent these we use a "cubic", $k$-independent basis set large enough to contain the set $\{{G}-G' \,|\, G, G' \in S_{k}\}$. We can obtain the coefficients of densities on the $e_{G}$ basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.

    The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points.

    For example let us check the normalization of the first eigenfunction at the first $k$-point in reciprocal space:

    ψtest = scfres.ψ[1][:, 1]
    +sum(abs2.(ψtest))
    1.000000000000002

    We now perform an IFFT to get ψ in real space. The $k$-point has to be passed because ψ is expressed on the $k$-dependent basis. Again the function is normalised:

    ψreal = ifft(basis, basis.kpoints[1], ψtest)
    +sum(abs2.(ψreal)) * basis.dvol
    1.0000000000000018

    The list of $k$ points of the basis can be obtained with basis.kpoints.

    basis.kpoints
    8-element Vector{Kpoint{Float64, Vector{StaticArraysCore.SVector{3, Int64}}}}:
    + KPoint([     0,      0,      0], spin = 1, num. G vectors =   725)
    + KPoint([  0.25,      0,      0], spin = 1, num. G vectors =   754)
    + KPoint([  -0.5,      0,      0], spin = 1, num. G vectors =   754)
    + KPoint([  0.25,   0.25,      0], spin = 1, num. G vectors =   729)
    + KPoint([  -0.5,   0.25,      0], spin = 1, num. G vectors =   748)
    + KPoint([ -0.25,   0.25,      0], spin = 1, num. G vectors =   754)
    + KPoint([  -0.5,   -0.5,      0], spin = 1, num. G vectors =   740)
    + KPoint([ -0.25,   -0.5,   0.25], spin = 1, num. G vectors =   744)

    The $G$ vectors of the "spherical", $k$-dependent grid can be obtained with G_vectors:

    [length(G_vectors(basis, kpoint)) for kpoint in basis.kpoints]
    8-element Vector{Int64}:
    + 725
    + 754
    + 754
    + 729
    + 748
    + 754
    + 740
    + 744
    ik = 1
    +G_vectors(basis, basis.kpoints[ik])[1:4]
    4-element Vector{StaticArraysCore.SVector{3, Int64}}:
    + [0, 0, 0]
    + [1, 0, 0]
    + [2, 0, 0]
    + [3, 0, 0]

    The list of $G$ vectors (Fourier modes) of the "cubic", $k$-independent basis set can be obtained similarly with G_vectors(basis).

    length(G_vectors(basis)), prod(basis.fft_size)
    (27000, 27000)
    collect(G_vectors(basis))[1:4]
    4-element Vector{StaticArraysCore.SVector{3, Int64}}:
    + [0, 0, 0]
    + [1, 0, 0]
    + [2, 0, 0]
    + [3, 0, 0]

    Analogously the list of $r$ vectors (real-space grid) can be obtained with r_vectors(basis):

    length(r_vectors(basis))
    27000
    collect(r_vectors(basis))[1:4]
    4-element Vector{StaticArraysCore.SVector{3, Float64}}:
    + [0.0, 0.0, 0.0]
    + [0.03333333333333333, 0.0, 0.0]
    + [0.06666666666666667, 0.0, 0.0]
    + [0.1, 0.0, 0.0]

    Accessing Bloch waves and densities

    Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the $k$-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).

    rvecs = collect(r_vectors(basis))[:, 1, 1]  # slice along the x axis
    +x = [r[1] for r in rvecs]                   # only keep the x coordinate
    +plot(x, scfres.ρ[:, 1, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
    Example block output
    G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]
    +scatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);
    +        yscale=:log10, ylims=(1e-12, 1), label="", xlabel="Energy", ylabel="|ρ|")
    Example block output

    Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to $\frac 1 2|k+G|^2 ≤ E_{\rm cut}$.

    • 2If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].
    diff --git a/v0.6.16/developer/gpu_computations/index.html b/v0.6.16/developer/gpu_computations/index.html new file mode 100644 index 0000000000..472946a026 --- /dev/null +++ b/v0.6.16/developer/gpu_computations/index.html @@ -0,0 +1,20 @@ + +GPU computations · DFTK.jl

    GPU computations

    Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.

    To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.

    Current implementation

    For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.

    PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())
    +PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))
    GPU API is experimental

    It is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.

    Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.

    Pitfalls

    There are a few things to keep in mind when doing GPU programming in DFTK.

    • Transfers to and from a device can be done simply by converting an array to

    an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.

    cuda_gpu = DFTK.GPU(CuArray)
    +cpu_architecture = DFTK.CPU()
    +A = rand(10)  # A is on the CPU
    +B = DFTK.to_device(cuda_gpu, A)  # B is a copy of A on the CUDA GPU
    +B .+= 1.
    +C = DFTK.to_cpu(B)  # C is a copy of B on the CPU
    +D = DFTK.to_device(cpu_architecture, B)  # Equivalent to the previous line, but
    +                                         # should be avoided as it is less clear

    Note: similar could also be used, but then a reference array (one which already lives on the device) needs to be available at call time. This was done previously, with helper functions to easily build new arrays on a given architecture: see for example zeros_like.

    • Functions which will get executed on the GPU should always have arguments

    which are isbits (immutable and contains no references to other values). When using map, also make sure that every structure used is also isbits. For example, the following map will fail, as model contains strings and arrays which are not isbits.

    function map_lattice(model::Model, Gs::AbstractArray{Vec3})
    +    # model is not isbits
    +    map(Gs) do Gi
    +        model.lattice * Gi
    +    end
    +end

    However, the following map will run on a GPU, as the lattice is a static matrix.

    function map_lattice(model::Model, Gs::AbstractArray{Vec3})
    +    lattice = model.lattice # lattice is isbits
    +    map(Gs) do Gi
    +        model.lattice * Gi
    +    end
    +end
    • List comprehensions should be avoided, as they always return a CPU Array.

    Instead, we should use map which returns an array of the same type as the input one.

    • Sometimes, creating a new array or making a copy can be necessary to achieve good

    performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.

    diff --git a/v0.6.16/developer/setup/index.html b/v0.6.16/developer/setup/index.html new file mode 100644 index 0000000000..06f1bad17e --- /dev/null +++ b/v0.6.16/developer/setup/index.html @@ -0,0 +1,9 @@ + +Developer setup · DFTK.jl

    Developer setup

    Source code installation

    If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).

    To achieve such a setup you have two recommended options:

    1. Clone DFTK into a location of your choice

      $ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/

      Whenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:

      import Pkg
      +Pkg.develop("/some/path/")

      To run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use

      $ julia --project=/some/path/

      The advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.

    2. Add a development version of DFTK to the global Julia environment:

      import Pkg
      +Pkg.develop("DFTK")

      This clones DFTK to the path ~/.julia/dev/DFTK" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.

    Disabling precompilation

    For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.

    At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:

    [DFTK]
    +precompile_workload = false

    Running the tests

    We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.

    Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use

    using TestEnv       # Optional: automatically installs required packages
    +TestEnv.activate()  # for tests in a temporary environment.
    +using TestItemRunner
    +cd("test")          # By default, the following macro runs everything from the parent folder.
    +@run_package_tests filter = ti -> :core ∈ ti.tags

    Or to only run the tests of a particular file serialisation.jl use

    @run_package_tests filter = ti -> occursin("serialisation.jl", ti.filename)

    If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with

    using .MySetup: my_function

    It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with

    using ..MySetup: my_function
    diff --git a/v0.6.16/developer/symmetries/index.html b/v0.6.16/developer/symmetries/index.html new file mode 100644 index 0000000000..46efe96306 --- /dev/null +++ b/v0.6.16/developer/symmetries/index.html @@ -0,0 +1,59 @@ + +Crystal symmetries · DFTK.jl

    Crystal symmetries

    Theory

    In this discussion we will only describe the situation for a monoatomic crystal $\mathcal C \subset \mathbb R^3$, the extension being easy. A symmetry of the crystal is an orthogonal matrix $W$ and a real-space vector $w$ such that

    \[W \mathcal{C} + w = \mathcal{C}.\]

    The symmetries where $W = 1$ and $w$ is a lattice vector are always assumed and ignored in the following.

    We can define a corresponding unitary operator $U$ on $L^2(\mathbb R^3)$ with action

    \[ (Uu)(x) = u\left( W x + w \right).\]

    We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that $U$ commutes with the Hamiltonian.

    This operator acts on a plane-wave as

    \[\begin{aligned} +(U e^{iq\cdot x}) (x) &= e^{iq \cdot w} e^{i (W^T q) x}\\ +&= e^{- i(S q) \cdot \tau } e^{i (S q) \cdot x} +\end{aligned}\]

    where we set

    \[\begin{aligned} +S &= W^{T}\\ +\tau &= -W^{-1}w. +\end{aligned}\]

    It follows that the Fourier transform satisfies

    \[\widehat{Uu}(q) = e^{- iq \cdot \tau} \widehat u(S^{-1} q)\]

    (all of these equations being also valid in reduced coordinates). In particular, if $e^{ik\cdot x} u_{k}(x)$ is an eigenfunction, then by decomposing $u_k$ over plane-waves $e^{i G \cdot x}$ one can see that $e^{i(S^T k) \cdot x} (U u_k)(x)$ is also an eigenfunction: we can choose

    \[u_{Sk} = U u_k.\]

    This is used to reduce the computations needed. For a uniform sampling of the Brillouin zone (the reducible $k$-points), one can find a reduced set of $k$-points (the irreducible $k$-points) such that the eigenvectors at the reducible $k$-points can be deduced from those at the irreducible $k$-points.

    Symmetrization

    Quantities that are calculated by summing over the reducible $k$ points can be calculated by first summing over the irreducible $k$ points and then symmetrizing. Let $\mathcal{K}_\text{reducible}$ denote the reducible $k$-points sampling the Brillouin zone, $\mathcal{S}$ be the group of all crystal symmetries that leave this BZ mesh invariant ($\mathcal{S}\mathcal{K}_\text{reducible} = \mathcal{K}_\text{reducible}$) and $\mathcal{K}$ be the irreducible $k$-points obtained from $\mathcal{K}_\text{reducible}$ using the symmetries $\mathcal{S}$. Clearly

    \[\mathcal{K}_\text{red} = \{Sk \, | \, S \in \mathcal{S}, k \in \mathcal{K}\}.\]

    Let $Q$ be a $k$-dependent quantity to sum (for instance, energies, densities, forces, etc). $Q$ transforms in a particular way under symmetries: $Q(Sk) = S(Q(k))$ where the (linear) action of $S$ on $Q$ depends on the particular $Q$.

    \[\begin{aligned} +\sum_{k \in \mathcal{K}_\text{red}} Q(k) +&= \sum_{k \in \mathcal{K}} \ \sum_{S \text{ with } Sk \in \mathcal{K}_\text{red}} S(Q(k)) \\ +&= \sum_{k \in \mathcal{K}} \frac{1}{N_{\mathcal{S},k}} \sum_{S \in \mathcal{S}} S(Q(k))\\ +&= \frac{1}{N_{\mathcal{S}}} \sum_{S \in \mathcal{S}} + \left(\sum_{k \in \mathcal{K}} \frac{N_\mathcal{S}}{N_{\mathcal{S},k}} Q(k) \right) +\end{aligned}\]

    Here, $N_\mathcal{S} = |\mathcal{S}|$ is the total number of symmetry operations and $N_{\mathcal{S},k}$ denotes the number of operations such that leave $k$ invariant. The latter operations form a subgroup of the group of all symmetry operations, sometimes called the small/little group of $k$. The factor $\frac{N_\mathcal{S}}{N_{S,k}}$, also equal to the ratio of number of reducible points encoded by this particular irreducible $k$ to the total number of reducible points, determines the weight of each irreducible $k$ point.

    Example

    Let us demonstrate this in practice. We consider silicon, setup appropriately in the lattice, atoms and positions objects as in Tutorial and to reach a fast execution, we take a small Ecut of 5 and a [4, 4, 4] Monkhorst-Pack grid. First we perform the DFT calculation disabling symmetry handling

    model_nosym = model_LDA(lattice, atoms, positions; symmetries=false)
    +basis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid)
    +scfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.864817840645                   -0.72    3.6    295ms
    +  2   -7.868988572145       -2.38       -1.54    1.0    144ms
    +  3   -7.869173064611       -3.73       -2.58    1.0    145ms
    +  4   -7.869208898733       -4.45       -2.86    2.4    293ms
    +  5   -7.869209477666       -6.24       -3.04    1.0    142ms
    +  6   -7.869209804700       -6.49       -4.68    1.0    143ms
    +  7   -7.869209817360       -7.90       -4.72    2.5    244ms
    +  8   -7.869209817521       -9.79       -5.68    1.0    145ms
    +  9   -7.869209817529      -11.10       -5.63    2.1    241ms
    + 10   -7.869209817531      -11.76       -6.43    1.0    144ms
    +  1.946860 seconds (1.60 M allocations: 720.496 MiB, 4.89% gc time)

    and then redo it using symmetry (the default):

    model_sym = model_LDA(lattice, atoms, positions)
    +basis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)
    +scfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.865095571356                   -0.72    4.2   50.8ms
    +  2   -7.869035406579       -2.40       -1.54    1.0   25.7ms
    +  3   -7.869184235988       -3.83       -2.59    1.0   25.7ms
    +  4   -7.869209035101       -4.61       -2.90    2.4   36.0ms
    +  5   -7.869209571775       -6.27       -3.11    1.0   26.0ms
    +  6   -7.869209805085       -6.63       -4.02    1.0   26.3ms
    +  7   -7.869209816700       -7.93       -5.11    1.8   30.8ms
    +  8   -7.869209817520       -9.09       -5.24    2.0   35.7ms
    +  9   -7.869209817528      -11.11       -5.67    1.0   26.1ms
    + 10   -7.869209817528      -12.80       -5.52    1.0   26.4ms
    + 11   -7.869209817530      -11.76       -5.83    1.0   26.5ms
    + 12   -7.869209817530      -12.27       -6.15    1.0   59.8ms
    +  0.402130 seconds (273.69 k allocations: 148.689 MiB, 7.89% gc time)

    Clearly both yield the same energy but the version employing symmetry is faster, since less $k$-points are explicitly treated:

    (length(basis_sym.kpoints), length(basis_nosym.kpoints))
    (8, 64)

    Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.

    We can also explicitly verify both methods to yield the same density:

    (norm(scfres_sym.ρ - scfres_nosym.ρ),
    + norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))
    (4.589682671078363e-7, 1.1499864615914498e-6)

    The symmetries can be used to map reducible to irreducible points:

    ikpt_red = rand(1:length(basis_nosym.kpoints))
    +# find a (non-unique) corresponding irreducible point in basis_nosym,
    +# and the symmetry that relates them
    +ikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])
    +[basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]
    3×2 StaticArraysCore.SMatrix{3, 2, Float64, 6} with indices SOneTo(3)×SOneTo(2):
    + -0.5   0.0
    +  0.0  -0.5
    +  0.0   0.0

    The eigenvalues match also:

    [scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]
    7×2 Matrix{Float64}:
    + -0.0822532   -0.0822532
    +  0.00933188   0.00933192
    +  0.216804     0.216804
    +  0.216804     0.216804
    +  0.333744     0.333744
    +  0.386877     0.386877
    +  0.386877     0.386877
    diff --git a/v0.6.16/developer/useful_formulas/index.html b/v0.6.16/developer/useful_formulas/index.html new file mode 100644 index 0000000000..03785eacbc --- /dev/null +++ b/v0.6.16/developer/useful_formulas/index.html @@ -0,0 +1,17 @@ + +Useful formulas · DFTK.jl

    Useful formulas

    This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.

    Fourier transforms

    • The Fourier transform is

      \[\widehat{f}(q) = \int_{{\mathbb R}^{3}} e^{-i q \cdot x} f(x) dx\]

    • Fourier transforms of centered functions: If $f({x}) = R(x) Y_l^m(x/|x|)$, then

      \[\begin{aligned} + \hat f( q) + &= \int_{{\mathbb R}^3} R(x) Y_{l}^{m}(x/|x|) e^{-i {q} \cdot {x}} d{x} \\ + &= \sum_{l = 0}^\infty 4 \pi i^l + \sum_{m = -l}^l \int_{{\mathbb R}^3} + R(x) j_{l'}(|q| |x|)Y_{l'}^{m'}(-q/|q|) Y_{l}^{m}(x/|x|) + Y_{l'}^{m'\ast}(x/|x|) + d{x} \\ + &= 4 \pi Y_{l}^{m}(-q/|q|) i^{l} + \int_{{\mathbb R}^+} r^2 R(r) \ j_{l}(|q| r) dr\\ + &= 4 \pi Y_{l}^{m}(q/|q|) (-i)^{l} + \int_{{\mathbb R}^+} r^2 R(r) \ j_{l}(|q| r) dr + \end{aligned}\]

      This also holds true for real spherical harmonics.

    Spherical harmonics

    • Plane wave expansion formula

      \[e^{i {q} \cdot {r}} = + 4 \pi \sum_{l = 0}^\infty \sum_{m = -l}^l + i^l j_l(|q| |r|) Y_l^m(q/|q|) Y_l^{m\ast}(r/|r|)\]

    • Spherical harmonics orthogonality

      \[\int_{\mathbb{S}^2} Y_l^{m*}(r)Y_{l'}^{m'}(r) dr + = \delta_{l,l'} \delta_{m,m'}\]

      This also holds true for real spherical harmonics.

    • Spherical harmonics parity

      \[Y_l^m(-r) = (-1)^l Y_l^m(r)\]

      This also holds true for real spherical harmonics.

    diff --git a/v0.6.16/examples/Fe_afm.pwi b/v0.6.16/examples/Fe_afm.pwi new file mode 100644 index 0000000000..013703e2be --- /dev/null +++ b/v0.6.16/examples/Fe_afm.pwi @@ -0,0 +1,44 @@ +! Slightly modified from +! https://gitlab.com/QEF/material-for-ljubljana-qe-summer-school/-/raw/master/Day-1/example5.Fe/pw.fe_afm.scf.in + + &CONTROL + prefix='fe', + + !pseudo_dir = 'directory with pseudopotentials', + !outdir = 'temporary directory for large files' + !verbosity = 'high', + / + + &SYSTEM + ibrav = 1, + celldm(1) = 5.42, + nat = 2, + ntyp = 2, + ecutwfc = 25.0, + ecutrho = 200.0, + + occupations='smearing', + smearing='mv', + degauss=0.01, + + nspin=2, + starting_magnetization(1) = 0.6 + starting_magnetization(2) = -0.6 + / + + &ELECTRONS + / + +ATOMIC_SPECIES +# the second field, atomic mass, is not actually used +# except for MD calculations + Fe1 1. Fe.pbe-nd-rrkjus.UPF + Fe2 1. Fe.pbe-nd-rrkjus.UPF + +ATOMIC_POSITIONS crystal + Fe1 0.0 0.0 0.0 + Fe2 0.5 0.5 0.0 +! this is a comment that the code will ignore + +K_POINTS automatic + 8 8 8 1 1 1 diff --git a/v0.6.16/examples/Si.extxyz b/v0.6.16/examples/Si.extxyz new file mode 100644 index 0000000000..d7a30be06c --- /dev/null +++ b/v0.6.16/examples/Si.extxyz @@ -0,0 +1,4 @@ +2 +Lattice="0.0 2.715 2.715 2.715 0.0 2.715 2.715 2.715 0.0" Properties=species:S:1:pos:R:3 pbc="T T T" +Si 0.00000000 0.00000000 0.00000000 +Si 1.35750000 1.35750000 1.35750000 diff --git a/v0.6.16/examples/al_supercell.png b/v0.6.16/examples/al_supercell.png new file mode 100644 index 0000000000000000000000000000000000000000..48d6b04dd566031c8461ecfff5ac22934ecaa086 GIT binary patch literal 8042 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\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using StaticArrays\n", + "using Plots\n", + "\n", + "# Unit cell. Having one of the lattice vectors as zero means a 2D system\n", + "a = 14\n", + "lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n", + "\n", + "# Confining scalar potential\n", + "pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);\n", + "\n", + "# Parameters\n", + "Ecut = 50\n", + "n_electrons = 1\n", + "β = 5;\n", + "\n", + "# Collect all the terms, build and run the model\n", + "terms = [Kinetic(; scaling_factor=2),\n", + " ExternalFromReal(X -> pot(X...)),\n", + " Anyonic(1, β)\n", + "]\n", + "model = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # \"spinless electrons\"\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\n", + "scfres = direct_minimization(basis, tol=1e-14) # Reduce tol for production\n", + "E = scfres.energies.total\n", + "s = 2\n", + "E11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β\n", + "println(\"e(1,1) / (2π) = \", E11 / (2π))\n", + "heatmap(scfres.ρ[:, :, 1, 1], c=:blues)" + ], + "metadata": {}, + "execution_count": 1 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/anyons/2a117af3.svg b/v0.6.16/examples/anyons/2a117af3.svg new file mode 100644 index 0000000000..4ec7fec09f --- /dev/null +++ b/v0.6.16/examples/anyons/2a117af3.svg @@ -0,0 +1,466 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/anyons/index.html b/v0.6.16/examples/anyons/index.html new file mode 100644 index 0000000000..33a5097acc --- /dev/null +++ b/v0.6.16/examples/anyons/index.html @@ -0,0 +1,30 @@ + +Anyonic models · DFTK.jl

    Anyonic models

    We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf

    using DFTK
    +using StaticArrays
    +using Plots
    +
    +# Unit cell. Having one of the lattice vectors as zero means a 2D system
    +a = 14
    +lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];
    +
    +# Confining scalar potential
    +pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);
    +
    +# Parameters
    +Ecut = 50
    +n_electrons = 1
    +β = 5;
    +
    +# Collect all the terms, build and run the model
    +terms = [Kinetic(; scaling_factor=2),
    +         ExternalFromReal(X -> pot(X...)),
    +         Anyonic(1, β)
    +]
    +model = Model(lattice; n_electrons, terms, spin_polarization=:spinless)  # "spinless electrons"
    +basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))
    +scfres = direct_minimization(basis, tol=1e-14)  # Reduce tol for production
    +E = scfres.energies.total
    +s = 2
    +E11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β
    +println("e(1,1) / (2π) = ", E11 / (2π))
    +heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
    Example block output
    diff --git a/v0.6.16/examples/arbitrary_floattype.ipynb b/v0.6.16/examples/arbitrary_floattype.ipynb new file mode 100644 index 0000000000..cef044edff --- /dev/null +++ b/v0.6.16/examples/arbitrary_floattype.ipynb @@ -0,0 +1,164 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Arbitrary floating-point types\n", + "\n", + "Since DFTK is completely generic in the floating-point type\n", + "in its routines, there is no reason to perform the computation\n", + "using double-precision arithmetic (i.e.`Float64`).\n", + "Other floating-point types such as `Float32` (single precision)\n", + "are readily supported as well.\n", + "On top of that we already reported[^HLC2020] calculations\n", + "in DFTK using elevated precision\n", + "from [DoubleFloats.jl](https://github.com/JuliaMath/DoubleFloats.jl)\n", + "or interval arithmetic\n", + "using [IntervalArithmetic.jl](https://github.com/JuliaIntervals/IntervalArithmetic.jl).\n", + "In this example, however, we will concentrate on single-precision\n", + "computations with `Float32`.\n", + "\n", + "The setup of such a reduced-precision calculation is basically identical\n", + "to the regular case, since Julia automatically compiles all routines\n", + "of DFTK at the precision, which is used for the lattice vectors.\n", + "Apart from setting up the model with an explicit cast of the lattice\n", + "vectors to `Float32`, there is thus no change in user code required:\n", + "\n", + "[^HLC2020]:\n", + " M. F. Herbst, A. Levitt, E. Cancès.\n", + " *A posteriori error estimation for the non-self-consistent Kohn-Sham equations*\n", + " [ArXiv 2004.13549](https://arxiv.org/abs/2004.13549)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.900547981262 -0.70 4.8 28.5s\n", + " 2 -7.905014514923 -2.35 -1.52 1.0 4.31s\n", + " 3 -7.905180454254 -3.78 -2.52 1.0 643ms\n", + " 4 -7.905210971832 -4.52 -2.83 2.5 113ms\n", + " 5 -7.905211448669 -6.32 -2.98 1.1 81.7ms\n", + " 6 -7.905212402344 -6.02 -4.63 1.0 89.2ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "# Setup silicon lattice\n", + "a = 10.263141334305942 # lattice constant in Bohr\n", + "lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# Cast to Float32, setup model and basis\n", + "model = model_LDA(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])\n", + "\n", + "# Run the SCF\n", + "scfres = self_consistent_field(basis, tol=1e-3);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "To check the calculation has really run in Float32,\n", + "we check the energies and density are expressed in this floating-point type:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1021364 \n AtomicLocal -2.1988597\n AtomicNonlocal 1.7295889 \n Ewald -8.3978958\n PspCorrection -0.2946220\n Hartree 0.5530629 \n Xc -2.3986230\n\n total -7.905212402344" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Float32" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "eltype(scfres.energies.total)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Float32" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "eltype(scfres.ρ)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Generic linear algebra routines\"\n", + " For more unusual floating-point types (like IntervalArithmetic or DoubleFloats),\n", + " which are not directly supported in the standard `LinearAlgebra` and `FFTW`\n", + " libraries one additional step is required: One needs to explicitly enable the generic\n", + " versions of standard linear-algebra operations like `cholesky` or `qr` or standard\n", + " `fft` operations, which DFTK requires. THis is done by loading the\n", + " `GenericLinearAlgebra` package in the user script\n", + " (i.e. just add ad `using GenericLinearAlgebra` next to your `using DFTK` call)." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/arbitrary_floattype/index.html b/v0.6.16/examples/arbitrary_floattype/index.html new file mode 100644 index 0000000000..1ed8d37b62 --- /dev/null +++ b/v0.6.16/examples/arbitrary_floattype/index.html @@ -0,0 +1,32 @@ + +Arbitrary floating-point types · DFTK.jl

    Arbitrary floating-point types

    Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.

    The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:

    using DFTK
    +
    +# Setup silicon lattice
    +a = 10.263141334305942  # lattice constant in Bohr
    +lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +# Cast to Float32, setup model and basis
    +model = model_LDA(lattice, atoms, positions)
    +basis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])
    +
    +# Run the SCF
    +scfres = self_consistent_field(basis, tol=1e-3);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.900537014008                   -0.70    4.6   58.8ms
    +  2   -7.905006885529       -2.35       -1.52    1.0   34.5ms
    +  3   -7.905179023743       -3.76       -2.52    1.1   35.4ms
    +  4   -7.905211448669       -4.49       -2.83    2.6   45.6ms
    +  5   -7.905211448669   +    -Inf       -2.98    1.1   40.8ms
    +  6   -7.905211925507       -6.32       -4.62    1.0   33.9ms

    To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:

    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1021388 
    +    AtomicLocal         -2.1988626
    +    AtomicNonlocal      1.7295886 
    +    Ewald               -8.3978958
    +    PspCorrection       -0.2946220
    +    Hartree             0.5530642 
    +    Xc                  -2.3986235
    +
    +    total               -7.905211925507
    eltype(scfres.energies.total)
    Float32
    eltype(scfres.ρ)
    Float32
    Generic linear algebra routines

    For more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).

    • HLC2020M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549
    diff --git a/v0.6.16/examples/atomsbase.ipynb b/v0.6.16/examples/atomsbase.ipynb new file mode 100644 index 0000000000..518601305c --- /dev/null +++ b/v0.6.16/examples/atomsbase.ipynb @@ -0,0 +1,301 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# AtomsBase integration" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "[AtomsBase.jl](https://github.com/JuliaMolSim/AtomsBase.jl) is a common interface\n", + "for representing atomic structures in Julia. DFTK directly supports using such\n", + "structures to run a calculation as is demonstrated here." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Feeding an AtomsBase AbstractSystem to DFTK\n", + "In this example we construct a silicon system using the `ase.build.bulk` routine\n", + "from the [atomistic simulation environment](https://wiki.fysik.dtu.dk/ase/index.html)\n", + "(ASE), which is exposed by [ASEconvert](https://github.com/mfherbst/ASEconvert.jl)\n", + "as an AtomsBase `AbstractSystem`." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Si₂, periodic = TTT):\n bounding_box : [ 0 2.715 2.715;\n 2.715 0 2.715;\n 2.715 2.715 0]u\"Å\"\n\n Atom(Si, [ 0, 0, 0]u\"Å\")\n Atom(Si, [ 1.3575, 1.3575, 1.3575]u\"Å\")\n\n \n \n \n \n Si \n \n Si \n \n \n \n \n" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "# Construct bulk system and convert to an AbstractSystem\n", + "using ASEconvert\n", + "system_ase = ase.build.bulk(\"Si\")\n", + "system = pyconvert(AbstractSystem, system_ase)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model,\n", + "discretise and solve:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921723514802 -0.69 6.1 238ms\n", + " 2 -7.926162152988 -2.35 -1.22 1.0 213ms\n", + " 3 -7.926838591001 -3.17 -2.37 1.9 185ms\n", + " 4 -7.926861219611 -4.65 -3.03 2.2 201ms\n", + " 5 -7.926861650771 -6.37 -3.39 1.8 173ms\n", + " 6 -7.926861670358 -7.71 -3.80 1.4 187ms\n", + " 7 -7.926861678756 -8.08 -4.09 1.5 161ms\n", + " 8 -7.926861681796 -8.52 -5.04 1.5 163ms\n", + " 9 -7.926861681855 -10.23 -5.13 2.8 195ms\n", + " 10 -7.926861681872 -10.77 -6.24 1.0 179ms\n", + " 11 -7.926861681873 -12.01 -6.47 3.1 214ms\n", + " 12 -7.926861681873 -14.05 -6.79 1.0 157ms\n", + " 13 -7.926861681873 -14.57 -7.40 1.2 158ms\n", + " 14 -7.926861681873 + -14.75 -7.58 2.4 193ms\n", + " 15 -7.926861681873 + -15.05 -8.74 1.0 157ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n", + "\n", + "model = model_LDA(system; temperature=1e-3)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\n", + "scfres = self_consistent_field(basis, tol=1e-8);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "If we did not want to use ASE we could of course use any other package\n", + "which yields an AbstractSystem object. This includes:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Reading a system using AtomsIO" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921724246185 -0.69 6.0 366ms\n", + " 2 -7.926165031553 -2.35 -1.22 1.0 440ms\n", + " 3 -7.926839728512 -3.17 -2.37 2.0 213ms\n", + " 4 -7.926861268183 -4.67 -3.04 2.1 276ms\n", + " 5 -7.926861644519 -6.42 -3.39 1.9 201ms\n", + " 6 -7.926861668052 -7.63 -3.76 1.6 182ms\n", + " 7 -7.926861679167 -7.95 -4.14 1.2 171ms\n", + " 8 -7.926861681792 -8.58 -5.08 1.6 209ms\n", + " 9 -7.926861681861 -10.16 -5.21 3.0 238ms\n", + " 10 -7.926861681872 -10.95 -6.40 1.0 169ms\n", + " 11 -7.926861681873 -12.25 -6.63 3.1 255ms\n", + " 12 -7.926861681873 -14.35 -7.01 1.0 187ms\n", + " 13 -7.926861681873 + -15.05 -8.00 1.5 177ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using AtomsIO\n", + "\n", + "# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),\n", + "# which directly yields an AbstractSystem.\n", + "system = load_system(\"Si.extxyz\")\n", + "\n", + "# Now run the LDA calculation:\n", + "system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n", + "model = model_LDA(system; temperature=1e-3)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\n", + "scfres = self_consistent_field(basis, tol=1e-8);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The same could be achieved using [ExtXYZ](https://github.com/libAtoms/ExtXYZ.jl)\n", + "by `system = Atoms(read_frame(\"Si.extxyz\"))`,\n", + "since the `ExtXYZ.Atoms` object is directly AtomsBase-compatible." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Directly setting up a system in AtomsBase" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921725682191 -0.69 5.9 356ms\n", + " 2 -7.926167849781 -2.35 -1.22 1.0 177ms\n", + " 3 -7.926842134250 -3.17 -2.37 1.9 210ms\n", + " 4 -7.926864600347 -4.65 -3.03 2.2 248ms\n", + " 5 -7.926865054978 -6.34 -3.37 1.8 233ms\n", + " 6 -7.926865078111 -7.64 -3.73 1.6 179ms\n", + " 7 -7.926865090120 -7.92 -4.11 1.2 167ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using AtomsBase\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "# Construct a system in the AtomsBase world\n", + "a = 10.26u\"bohr\" # Silicon lattice constant\n", + "lattice = a / 2 * [[0, 1, 1.], # Lattice as vector of vectors\n", + " [1, 0, 1.],\n", + " [1, 1, 0.]]\n", + "atoms = [:Si => ones(3)/8, :Si => -ones(3)/8]\n", + "system = periodic_system(atoms, lattice; fractional=true)\n", + "\n", + "# Now run the LDA calculation:\n", + "system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n", + "model = model_LDA(system; temperature=1e-3)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\n", + "scfres = self_consistent_field(basis, tol=1e-4);" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "## Obtaining an AbstractSystem from DFTK data" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At any point we can also get back the DFTK model as an\n", + "AtomsBase-compatible `AbstractSystem`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Si₂, periodic = TTT):\n bounding_box : [ 0 5.13 5.13;\n 5.13 0 5.13;\n 5.13 5.13 0]u\"a₀\"\n\n Atom(Si, [ 1.2825, 1.2825, 1.2825]u\"a₀\")\n Atom(Si, [ -1.2825, -1.2825, -1.2825]u\"a₀\")\n\n \n \n \n \n Si \n \n Si \n \n \n \n \n" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "second_system = atomic_system(model)" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Similarly DFTK offers a method to the `atomic_system` and `periodic_system` functions\n", + "(from AtomsBase), which enable a seamless conversion of the usual data structures for\n", + "setting up DFTK calculations into an `AbstractSystem`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Si₂, periodic = TTT):\n bounding_box : [ 0 5.13155 5.13155;\n 5.13155 0 5.13155;\n 5.13155 5.13155 0]u\"a₀\"\n\n Atom(Si, [ 1.28289, 1.28289, 1.28289]u\"a₀\")\n Atom(Si, [-1.28289, -1.28289, -1.28289]u\"a₀\")\n\n \n \n \n \n Si \n \n Si \n \n \n \n \n" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "lattice = 5.431u\"Å\" / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]];\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "third_system = atomic_system(lattice, atoms, positions)" + ], + "metadata": {}, + "execution_count": 7 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/atomsbase/index.html b/v0.6.16/examples/atomsbase/index.html new file mode 100644 index 0000000000..8e8aacdf26 --- /dev/null +++ b/v0.6.16/examples/atomsbase/index.html @@ -0,0 +1,137 @@ + +AtomsBase integration · DFTK.jl

    AtomsBase integration

    AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.

    using DFTK

    Feeding an AtomsBase AbstractSystem to DFTK

    In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.

    # Construct bulk system and convert to an AbstractSystem
    +using ASEconvert
    +system_ase = ase.build.bulk("Si")
    +system = pyconvert(AbstractSystem, system_ase)
    FlexibleSystem(Si₂, periodic = TTT):
    +    bounding_box      : [       0    2.715    2.715;
    +                            2.715        0    2.715;
    +                            2.715    2.715        0]u"Å"
    +
    +    Atom(Si, [       0,        0,        0]u"Å")
    +    Atom(Si, [  1.3575,   1.3575,   1.3575]u"Å")
    +
    +                       
    +                       
    +                       
    +                       
    +              Si       
    +                       
    +          Si           
    +                       
    +                       
    +                       
    +                       
    +

    To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model, discretise and solve:

    system = attach_psp(system; Si="hgh/lda/si-q4")
    +
    +model  = model_LDA(system; temperature=1e-3)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
    +scfres = self_consistent_field(basis, tol=1e-8);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.921729655810                   -0.69    5.9    242ms
    +  2   -7.926162937730       -2.35       -1.22    1.0    155ms
    +  3   -7.926838012346       -3.17       -2.37    1.9    193ms
    +  4   -7.926861173949       -4.64       -3.02    2.1    185ms
    +  5   -7.926861641854       -6.33       -3.36    2.1    196ms
    +  6   -7.926861666089       -7.62       -3.72    1.5    152ms
    +  7   -7.926861679078       -7.89       -4.12    1.4    151ms
    +  8   -7.926861681792       -8.57       -5.10    1.6    201ms
    +  9   -7.926861681862      -10.16       -5.21    3.1    213ms
    + 10   -7.926861681872      -10.99       -6.46    1.0    147ms
    + 11   -7.926861681873      -12.27       -6.64    3.1    196ms
    + 12   -7.926861681873      -14.35       -7.07    1.0    151ms
    + 13   -7.926861681873      -15.05       -7.82    1.4    168ms
    + 14   -7.926861681873      -15.05       -8.51    2.5    181ms

    If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:

    Reading a system using AtomsIO

    using AtomsIO
    +
    +# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),
    +# which directly yields an AbstractSystem.
    +system = load_system("Si.extxyz")
    +
    +# Now run the LDA calculation:
    +system = attach_psp(system; Si="hgh/lda/si-q4")
    +model  = model_LDA(system; temperature=1e-3)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
    +scfres = self_consistent_field(basis, tol=1e-8);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.921735919105                   -0.69    6.0    235ms
    +  2   -7.926165113544       -2.35       -1.22    1.0    155ms
    +  3   -7.926838784259       -3.17       -2.37    1.9    174ms
    +  4   -7.926861172855       -4.65       -3.03    2.2    186ms
    +  5   -7.926861641593       -6.33       -3.36    1.9    219ms
    +  6   -7.926861666208       -7.61       -3.72    1.5    157ms
    +  7   -7.926861679193       -7.89       -4.13    1.0    150ms
    +  8   -7.926861681794       -8.58       -5.13    1.9    164ms
    +  9   -7.926861681863      -10.16       -5.24    2.8    217ms
    + 10   -7.926861681872      -11.05       -6.41    1.0    150ms
    + 11   -7.926861681873      -12.35       -6.67    3.1    227ms
    + 12   -7.926861681873   +  -14.35       -7.49    1.0    154ms
    + 13   -7.926861681873      -14.27       -7.76    2.4    197ms
    + 14   -7.926861681873   +  -14.75       -9.16    1.4    162ms

    The same could be achieved using ExtXYZ by system = Atoms(read_frame("Si.extxyz")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.

    Directly setting up a system in AtomsBase

    using AtomsBase
    +using Unitful
    +using UnitfulAtomic
    +
    +# Construct a system in the AtomsBase world
    +a = 10.26u"bohr"  # Silicon lattice constant
    +lattice = a / 2 * [[0, 1, 1.],  # Lattice as vector of vectors
    +                   [1, 0, 1.],
    +                   [1, 1, 0.]]
    +atoms  = [:Si => ones(3)/8, :Si => -ones(3)/8]
    +system = periodic_system(atoms, lattice; fractional=true)
    +
    +# Now run the LDA calculation:
    +system = attach_psp(system; Si="hgh/lda/si-q4")
    +model  = model_LDA(system; temperature=1e-3)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
    +scfres = self_consistent_field(basis, tol=1e-4);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.921725045189                   -0.69    6.0    330ms
    +  2   -7.926167587063       -2.35       -1.22    1.0    162ms
    +  3   -7.926841467316       -3.17       -2.37    1.9    187ms
    +  4   -7.926864605011       -4.64       -3.01    2.1    202ms
    +  5   -7.926865044742       -6.36       -3.33    2.0    180ms
    +  6   -7.926865073937       -7.53       -3.66    1.6    196ms
    +  7   -7.926865090487       -7.78       -4.15    1.0    158ms

    Obtaining an AbstractSystem from DFTK data

    At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:

    second_system = atomic_system(model)
    FlexibleSystem(Si₂, periodic = TTT):
    +    bounding_box      : [       0     5.13     5.13;
    +                             5.13        0     5.13;
    +                             5.13     5.13        0]u"a₀"
    +
    +    Atom(Si, [  1.2825,   1.2825,   1.2825]u"a₀")
    +    Atom(Si, [ -1.2825,  -1.2825,  -1.2825]u"a₀")
    +
    +                       
    +                       
    +                       
    +                       
    +              Si       
    +                       
    +          Si           
    +                       
    +                       
    +                       
    +                       
    +

    Similarly DFTK offers a method to the atomic_system and periodic_system functions (from AtomsBase), which enable a seamless conversion of the usual data structures for setting up DFTK calculations into an AbstractSystem:

    lattice = 5.431u"Å" / 2 * [[0 1 1.];
    +                           [1 0 1.];
    +                           [1 1 0.]];
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +third_system = atomic_system(lattice, atoms, positions)
    FlexibleSystem(Si₂, periodic = TTT):
    +    bounding_box      : [       0  5.13155  5.13155;
    +                          5.13155        0  5.13155;
    +                          5.13155  5.13155        0]u"a₀"
    +
    +    Atom(Si, [ 1.28289,  1.28289,  1.28289]u"a₀")
    +    Atom(Si, [-1.28289, -1.28289, -1.28289]u"a₀")
    +
    +                       
    +                       
    +                       
    +                       
    +              Si       
    +                       
    +          Si           
    +                       
    +                       
    +                       
    +                       
    +
    diff --git a/v0.6.16/examples/cohen_bergstresser.ipynb b/v0.6.16/examples/cohen_bergstresser.ipynb new file mode 100644 index 0000000000..4c438ba774 --- /dev/null +++ b/v0.6.16/examples/cohen_bergstresser.ipynb @@ -0,0 +1,568 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Cohen-Bergstresser model\n", + "\n", + "This example considers the Cohen-Bergstresser model[^CB1966],\n", + "reproducing the results of the original paper. This model is particularly\n", + "simple since its linear nature allows one to get away without any\n", + "self-consistent field calculation.\n", + "\n", + "[^CB1966]: M. L. Cohen and T. K. Bergstresser Phys. Rev. **141**, 789 (1966) DOI [10.1103/PhysRev.141.789](https://doi.org/10.1103/PhysRev.141.789)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We build the lattice using the tabulated lattice constant from the original paper,\n", + "stored in DFTK:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "Si = ElementCohenBergstresser(:Si)\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "lattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Next we build the rather simple model and discretize it with moderate `Ecut`:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\n", + "basis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We diagonalise at the Gamma point to find a Fermi level …" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.40173105002154136" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "ham = Hamiltonian(basis)\n", + "eigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)\n", + "εF = DFTK.compute_occupation(basis, eigres.λ).εF" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "… and compute and plot 8 bands:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Discarding DFTK-specific details for element type ElementCohenBergstresser (i.e. this element is treated as a ElementCoulomb).\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/external/atomsbase.jl:100\n", + "┌ Warning: Discarding DFTK-specific details for element type ElementCohenBergstresser (i.e. this element is treated as a ElementCoulomb).\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/external/atomsbase.jl:100\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=18}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "using Unitful\n", + "\n", + "bands = compute_bands(basis; n_bands=8, εF, kline_density=10)\n", + "p = plot_bandstructure(bands; unit=u\"eV\")\n", + "ylims!(p, (-5, 6))" + ], + "metadata": {}, + "execution_count": 4 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/cohen_bergstresser/0b46fc7f.svg b/v0.6.16/examples/cohen_bergstresser/b1e3a673.svg similarity index 75% rename from dev/examples/cohen_bergstresser/0b46fc7f.svg rename to v0.6.16/examples/cohen_bergstresser/b1e3a673.svg index 18c49cb14f..705d4c9772 100644 --- a/dev/examples/cohen_bergstresser/0b46fc7f.svg +++ b/v0.6.16/examples/cohen_bergstresser/b1e3a673.svg @@ -1,212 +1,212 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/cohen_bergstresser/index.html b/v0.6.16/examples/cohen_bergstresser/index.html new file mode 100644 index 0000000000..575327b096 --- /dev/null +++ b/v0.6.16/examples/cohen_bergstresser/index.html @@ -0,0 +1,15 @@ + +Cohen-Bergstresser model · DFTK.jl

    Cohen-Bergstresser model

    This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.

    We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:

    using DFTK
    +
    +Si = ElementCohenBergstresser(:Si)
    +atoms = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +lattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];

    Next we build the rather simple model and discretize it with moderate Ecut:

    model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])
    +basis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));

    We diagonalise at the Gamma point to find a Fermi level …

    ham = Hamiltonian(basis)
    +eigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)
    +εF = DFTK.compute_occupation(basis, eigres.λ).εF
    0.40173105002153464

    … and compute and plot 8 bands:

    using Plots
    +using Unitful
    +
    +bands = compute_bands(basis; n_bands=8, εF, kline_density=10)
    +p = plot_bandstructure(bands; unit=u"eV")
    +ylims!(p, (-5, 6))
    Example block output
    diff --git a/v0.6.16/examples/collinear_magnetism.ipynb b/v0.6.16/examples/collinear_magnetism.ipynb new file mode 100644 index 0000000000..cc7d48df37 --- /dev/null +++ b/v0.6.16/examples/collinear_magnetism.ipynb @@ -0,0 +1,1688 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Collinear spin and magnetic systems\n", + "\n", + "In this example we consider iron in the BCC phase.\n", + "To show that this material is ferromagnetic we will model it once\n", + "allowing collinear spin polarization and once without\n", + "and compare the resulting SCF energies. In particular\n", + "the ground state can only be found if collinear spins are allowed.\n", + "\n", + "First we setup BCC iron without spin polarization\n", + "using a single iron atom inside the unit cell." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "a = 5.42352 # Bohr\n", + "lattice = a / 2 * [[-1 1 1];\n", + " [ 1 -1 1];\n", + " [ 1 1 -1]]\n", + "atoms = [ElementPsp(:Fe; psp=load_psp(\"hgh/lda/Fe-q8.hgh\"))]\n", + "positions = [zeros(3)];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "To get the ground-state energy we use an LDA model and rather moderate\n", + "discretisation parameters." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -16.65015728140 -0.48 5.8 129ms\n", + " 2 -16.65072476451 -3.25 -1.01 1.0 324ms\n", + " 3 -16.65081702308 -4.03 -2.30 1.8 37.0ms\n", + " 4 -16.65082404703 -5.15 -2.86 2.0 20.8ms\n", + " 5 -16.65082463793 -6.23 -3.35 1.8 21.3ms\n", + " 6 -16.65082469182 -7.27 -4.00 1.5 31.7ms\n", + " 7 -16.65082469662 -8.32 -4.23 2.0 21.8ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "kgrid = [3, 3, 3] # k-point grid (Regular Monkhorst-Pack grid)\n", + "Ecut = 15 # kinetic energy cutoff in Hartree\n", + "model_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)\n", + "basis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)\n", + "\n", + "scfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 15.9206150\n AtomicLocal -5.0691958\n AtomicNonlocal -5.2201039\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.7793066 \n Xc -3.4467378\n Entropy -0.0182878\n\n total -16.650824696623" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "scfres_nospin.energies" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Since we did not specify any initial magnetic moment on the iron atom,\n", + "DFTK will automatically assume that a calculation with only spin-paired\n", + "electrons should be performed. As a result the obtained ground state\n", + "features no spin-polarization." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now we repeat the calculation, but give the iron atom an initial magnetic moment.\n", + "For specifying the magnetic moment pass the desired excess of spin-up over spin-down\n", + "electrons at each centre to the `Model` and the guess density functions.\n", + "In this case we seek the state with as many spin-parallel\n", + "$d$-electrons as possible. In our pseudopotential model the 8 valence\n", + "electrons are 2 pair of $s$-electrons, 1 pair of $d$-electrons\n", + "and 4 unpaired $d$-electrons giving a desired magnetic moment of `4` at the iron centre.\n", + "The structure (i.e. pair mapping and order) of the `magnetic_moments` array needs to agree\n", + "with the `atoms` array and `0` magnetic moments need to be specified as well." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "magnetic_moments = [4];" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! tip \"Units of the magnetisation and magnetic moments in DFTK\"\n", + " Unlike all other quantities magnetisation and magnetic moments in DFTK\n", + " are given in units of the Bohr magneton $μ_B$, which in atomic units has the\n", + " value $\\frac{1}{2}$. Since $μ_B$ is (roughly) the magnetic moment of\n", + " a single electron the advantage is that one can directly think of these\n", + " quantities as the excess of spin-up electrons or spin-up electron density.\n", + "\n", + "We repeat the calculation using the same model as before. DFTK now detects\n", + "the non-zero moment and switches to a collinear calculation." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", + "--- --------------- --------- --------- ------ ---- ------\n", + " 1 -16.66164875217 -0.51 2.617 5.1 77.2ms\n", + " 2 -16.66823551775 -2.18 -1.09 2.445 1.5 194ms\n", + " 3 -16.66905840720 -3.08 -2.07 2.340 2.0 42.2ms\n", + " 4 -16.66909847555 -4.40 -2.59 2.304 1.2 49.0ms\n", + " 5 -16.66910261793 -5.38 -2.91 2.297 1.6 38.5ms\n", + " 6 -16.66910412142 -5.82 -3.51 2.287 1.5 50.8ms\n", + " 7 -16.66910417200 -7.30 -3.85 2.286 2.0 41.7ms\n", + " 8 -16.66910417425 -8.65 -4.32 2.286 1.5 44.4ms\n", + " 9 -16.66910417511 -9.06 -4.97 2.286 1.5 38.1ms\n", + " 10 -16.66910417511 + -11.20 -5.25 2.286 2.1 47.9ms\n", + " 11 -16.66910417510 + -11.23 -5.65 2.286 1.2 76.5ms\n", + " 12 -16.66910417509 + -11.00 -6.19 2.286 1.8 70.9ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "ρ0 = guess_density(basis, magnetic_moments)\n", + "scfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.2947201\n AtomicLocal -5.2227263\n AtomicNonlocal -5.4100284\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.8191963 \n Xc -3.5406837\n Entropy -0.0131612\n\n total -16.669104175090" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Model and magnetic moments\"\n", + " DFTK does not store the `magnetic_moments` inside the `Model`, but only uses them\n", + " to determine the lattice symmetries. This step was taken to keep `Model`\n", + " (which contains the physical model) independent of the details of the numerical details\n", + " such as the initial guess for the spin density.\n", + "\n", + "In direct comparison we notice the first, spin-paired calculation to be\n", + "a little higher in energy" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No magnetization: -16.6508246966229\n", + "Magnetic case: -16.669104175089984\n", + "Difference: -0.018279478467082555\n" + ] + } + ], + "cell_type": "code", + "source": [ + "println(\"No magnetization: \", scfres_nospin.energies.total)\n", + "println(\"Magnetic case: \", scfres.energies.total)\n", + "println(\"Difference: \", scfres.energies.total - scfres_nospin.energies.total);" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Notice that with the small cutoffs we use to generate the online\n", + "documentation the calculation is far from converged.\n", + "With more realistic parameters a larger energy difference of about\n", + "0.1 Hartree is obtained." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The spin polarization in the magnetic case is visible if we\n", + "consider the occupation of the spin-up and spin-down Kohn-Sham orbitals.\n", + "Especially for the $d$-orbitals these differ rather drastically.\n", + "For example for the first $k$-point:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(scfres.occupation[iup])[1:7] = [1.0, 0.9999987814457693, 0.9999987814457693, 0.9999987814457693, 0.9582254820485602, 0.9582254820485419, 1.1264183899872724e-29]\n", + "(scfres.occupation[idown])[1:7] = [1.0, 0.8438908076332514, 0.8438908076329896, 0.8438908076329552, 8.14067746470747e-6, 8.140677464707197e-6, 1.5663513076483763e-32]\n" + ] + } + ], + "cell_type": "code", + "source": [ + "iup = 1\n", + "idown = iup + length(scfres.basis.kpoints) ÷ 2\n", + "@show scfres.occupation[iup][1:7]\n", + "@show scfres.occupation[idown][1:7];" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Similarly the eigenvalues differ" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(scfres.eigenvalues[iup])[1:7] = [-0.06935859494047263, 0.35688551648236044, 0.3568855164823641, 0.356885516482375, 0.46173599305805657, 0.4617359930580612, 1.1596232055251434]\n", + "(scfres.eigenvalues[idown])[1:7] = [-0.031257421469029364, 0.4761892849039626, 0.4761892849039825, 0.4761892849039851, 0.6102502490239334, 0.6102502490239338, 1.2254036995732762]\n" + ] + } + ], + "cell_type": "code", + "source": [ + "@show scfres.eigenvalues[iup][1:7]\n", + "@show scfres.eigenvalues[idown][1:7];" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"$k$-points in collinear calculations\"\n", + " For collinear calculations the `kpoints` field of the `PlaneWaveBasis` object contains\n", + " each $k$-point coordinate twice, once associated with spin-up and once with down-down.\n", + " The list first contains all spin-up $k$-points and then all spin-down $k$-points,\n", + " such that `iup` and `idown` index the same $k$-point, but differing spins." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can observe the spin-polarization by looking at the density of states (DOS)\n", + "around the Fermi level, where the spin-up and spin-down DOS differ." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=3}", + "image/png": "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sdKIGl56CS+9xHcQHaSlpTk7O0s33T506FD7Ww0NDbm5udJ9PkUi0YQJEyZMmADgrbfeWr58eadEWFlZ2ZaT2g5pqqysbH9gk62trXT2zejRo0+cOGFjYzN69OimpqYTJ07k5eWNHj1a+jB9ff22hmnXPbWtra3j4+M3b9785JNP1tfX//bbb4MHD5Zelz7A3NzcyMiosrKyV8dvAG0/GhkZKTglmA2qjhH2799/9+7dJSUlX3zxRWRk5P379wHU19c//vjju3bt+u2333777bfr16+zGSohApWTAxcXGDDXveLhwempeESwKisrv/76a+m5SGPGjElLSzveblP2jRs32tnZxcTEdFoLGBwcLD2bqT1vb++2j+hr1661XUxOTm5tbQUgFouvXr3q6+sLYPTo0cePHz9x4sSoUaOk/z516lRbIlQqMDBw3bp1aWlpTz75ZNv01LbaU1NT9fX1XVxc1Hkn2KXq325KSoq0Vdvc3Ozr63vw4MG2M6t27NhhaGjIVoCECF52Njw8mCywb1+UlaG+HqamTBZLdEJzc/OaNWtaWlpyc3P37t0bFRUlXWzn7u7+xRdfTJky5a233goMDDx79uz333+/d+9eY2Pj/Pz8SZMmzZkzx9fXt6Cg4KOPPnrqqac6Ffvaa6+9+eabhoaG1dXVP/30k7RJN3r0aAcHhwULFsycOfO3334zMzOTtimlqdTIyEja3CwuLm5paQkMDFQl/qtXr+7evVvajxofHz9+/Hjp9VOnTq1bt27AgAErV658+eWXDRj85qg1VUORZkEAhoaGBgYGeu1Gd/fs2WNgYDB48GBXV1fmAyRE8O7cAbOn0OjpoV8/3LmDB3v9k57C2dl5yZIlFRUVpqamwcHBixYtaj/e9OKLL4aHh+/YsePatWteXl5XrlyRNuAcHR3fe++906dPJyYm2tnZffXVV21TPdvMnDnTxMTk999/d3Jy2r59e3x8PAA9Pb2TJ09+8803v/zyi6+v77p166T5SU9P79NPPzV98EVs9erVLS0tIpEIgJmZmXSXbanHH388oOOvqaurq6Wl5a+//qqnpzd//vy5c+dKr7/22mutra3btm2bO3eudIjR1NS07eT6+fPnS0/6BRAZGenB7FdLZUTq7q/zww8/fPzxx8nJyRYWFjU1NTExMWFhYRUVFSdOnNi4ceOcOXPkPWvt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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "bands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6)) # Increase kgrid to get nicer DOS.\n", + "plot_dos(bands_666)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Note that if same k-grid as SCF should be employed, a simple `plot_dos(scfres)`\n", + "is sufficient." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Similarly the band structure shows clear differences between both spin components." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=98}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "using Unitful\n", + "using UnitfulAtomic\n", + "bands_kpath = compute_bands(scfres; kline_density=6)\n", + "plot_bandstructure(bands_kpath)" + ], + "metadata": {}, + "execution_count": 11 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/collinear_magnetism/b1dfe1a2.svg b/v0.6.16/examples/collinear_magnetism/0a8b1dab.svg similarity index 70% rename from dev/examples/collinear_magnetism/b1dfe1a2.svg rename to v0.6.16/examples/collinear_magnetism/0a8b1dab.svg index daa81e87d7..df2eeb74d2 100644 --- a/dev/examples/collinear_magnetism/b1dfe1a2.svg +++ b/v0.6.16/examples/collinear_magnetism/0a8b1dab.svg @@ -1,593 +1,593 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/collinear_magnetism/023e08b6.svg b/v0.6.16/examples/collinear_magnetism/c8b1621f.svg similarity index 61% rename from dev/examples/collinear_magnetism/023e08b6.svg rename to v0.6.16/examples/collinear_magnetism/c8b1621f.svg index e963b40217..0c86ef79d9 100644 --- a/dev/examples/collinear_magnetism/023e08b6.svg +++ b/v0.6.16/examples/collinear_magnetism/c8b1621f.svg @@ -1,54 +1,54 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/collinear_magnetism/index.html b/v0.6.16/examples/collinear_magnetism/index.html new file mode 100644 index 0000000000..dcac67c711 --- /dev/null +++ b/v0.6.16/examples/collinear_magnetism/index.html @@ -0,0 +1,73 @@ + +Collinear spin and magnetic systems · DFTK.jl

    Collinear spin and magnetic systems

    In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.

    First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.

    using DFTK
    +
    +a = 5.42352  # Bohr
    +lattice = a / 2 * [[-1  1  1];
    +                   [ 1 -1  1];
    +                   [ 1  1 -1]]
    +atoms     = [ElementPsp(:Fe; psp=load_psp("hgh/lda/Fe-q8.hgh"))]
    +positions = [zeros(3)];

    To get the ground-state energy we use an LDA model and rather moderate discretisation parameters.

    kgrid = [3, 3, 3]  # k-point grid (Regular Monkhorst-Pack grid)
    +Ecut = 15          # kinetic energy cutoff in Hartree
    +model_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)
    +basis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)
    +
    +scfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -16.65009326090                   -0.48    5.2   34.0ms
    +  2   -16.65071423125       -3.21       -1.01    1.0   18.1ms
    +  3   -16.65081604341       -3.99       -2.30    1.8   20.3ms
    +  4   -16.65082426771       -5.08       -2.85    1.8   20.8ms
    +  5   -16.65082464697       -6.42       -3.40    1.5   19.4ms
    +  6   -16.65082469367       -7.33       -4.00    2.0   21.6ms
    +  7   -16.65082469744       -8.42       -4.41    1.8   21.8ms
    scfres_nospin.energies
    Energy breakdown (in Ha):
    +    Kinetic             15.9209090
    +    AtomicLocal         -5.0693641
    +    AtomicNonlocal      -5.2202630
    +    Ewald               -21.4723040
    +    PspCorrection       1.8758831 
    +    Hartree             0.7793562 
    +    Xc                  -3.4467539
    +    Entropy             -0.0182879
    +
    +    total               -16.650824697440

    Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.

    Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel $d$-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of $s$-electrons, 1 pair of $d$-electrons and 4 unpaired $d$-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.

    magnetic_moments = [4];
    Units of the magnetisation and magnetic moments in DFTK

    Unlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton $μ_B$, which in atomic units has the value $\frac{1}{2}$. Since $μ_B$ is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.

    We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.

    model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +ρ0 = guess_density(basis, magnetic_moments)
    +scfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -16.66168721257                   -0.51    2.618    5.0   64.2ms
    +  2   -16.66826929904       -2.18       -1.09    2.445    1.5   38.3ms
    +  3   -16.66905501215       -3.10       -2.07    2.341    2.0   76.4ms
    +  4   -16.66909796375       -4.37       -2.59    2.305    1.4   36.7ms
    +  5   -16.66910300718       -5.30       -3.01    2.296    1.9   42.1ms
    +  6   -16.66910413227       -5.95       -3.54    2.287    1.5   39.6ms
    +  7   -16.66910417253       -7.40       -3.77    2.286    2.1   44.1ms
    +  8   -16.66910417425       -8.76       -4.28    2.286    1.2   37.2ms
    +  9   -16.66910417505       -9.10       -4.76    2.286    1.1   36.7ms
    + 10   -16.66910417508      -10.58       -5.16    2.286    2.0   44.6ms
    + 11   -16.66910417507   +  -11.29       -5.68    2.286    1.2   49.9ms
    + 12   -16.66910417509      -10.82       -6.25    2.286    1.5   42.7ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.2947210
    +    AtomicLocal         -5.2227269
    +    AtomicNonlocal      -5.4100288
    +    Ewald               -21.4723040
    +    PspCorrection       1.8758831 
    +    Hartree             0.8191965 
    +    Xc                  -3.5406837
    +    Entropy             -0.0131612
    +
    +    total               -16.669104175088
    Model and magnetic moments

    DFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.

    In direct comparison we notice the first, spin-paired calculation to be a little higher in energy

    println("No magnetization: ", scfres_nospin.energies.total)
    +println("Magnetic case:    ", scfres.energies.total)
    +println("Difference:       ", scfres.energies.total - scfres_nospin.energies.total);
    No magnetization: -16.650824697440353
    +Magnetic case:    -16.66910417508815
    +Difference:       -0.01827947764779836

    Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.

    The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the $d$-orbitals these differ rather drastically. For example for the first $k$-point:

    iup   = 1
    +idown = iup + length(scfres.basis.kpoints) ÷ 2
    +@show scfres.occupation[iup][1:7]
    +@show scfres.occupation[idown][1:7];
    (scfres.occupation[iup])[1:7] = [1.0, 0.999998781445142, 0.999998781445142, 0.999998781445142, 0.9582254510778295, 0.9582254510778291, 1.1266917269637013e-29]
    +(scfres.occupation[idown])[1:7] = [1.0, 0.8438912998033838, 0.8438912998033845, 0.8438912998033781, 8.140740365633316e-6, 8.140740365632044e-6, 1.622325464699988e-32]

    Similarly the eigenvalues differ

    @show scfres.eigenvalues[iup][1:7]
    +@show scfres.eigenvalues[idown][1:7];
    (scfres.eigenvalues[iup])[1:7] = [-0.06935858248417831, 0.3568855498053177, 0.3568855498053348, 0.35688554980534354, 0.4617360289715402, 0.4617360289715403, 1.1596208073934338]
    +(scfres.eigenvalues[idown])[1:7] = [-0.031257428483315516, 0.4761892757209524, 0.4761892757209523, 0.4761892757209528, 0.6102501999326608, 0.6102501999326624, 1.2250526108979591]
    ``k``-points in collinear calculations

    For collinear calculations the kpoints field of the PlaneWaveBasis object contains each $k$-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up $k$-points and then all spin-down $k$-points, such that iup and idown index the same $k$-point, but differing spins.

    We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.

    using Plots
    +bands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6))  # Increase kgrid to get nicer DOS.
    +plot_dos(bands_666)
    Example block output

    Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.

    Similarly the band structure shows clear differences between both spin components.

    using Unitful
    +using UnitfulAtomic
    +bands_kpath = compute_bands(scfres; kline_density=6)
    +plot_bandstructure(bands_kpath)
    Example block output
    diff --git a/v0.6.16/examples/compare_solvers.ipynb b/v0.6.16/examples/compare_solvers.ipynb new file mode 100644 index 0000000000..8711745999 --- /dev/null +++ b/v0.6.16/examples/compare_solvers.ipynb @@ -0,0 +1,344 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Comparison of DFT solvers" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We compare four different approaches for solving the DFT minimisation problem,\n", + "namely a density-based SCF, a potential-based SCF, direct minimisation and Newton." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "First we setup our problem" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.0e-6" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "\n", + "a = 10.26 # Silicon lattice constant in Bohr\n", + "lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "model = model_LDA(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])\n", + "\n", + "# Convergence we desire in the density\n", + "tol = 1e-6" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Density-based self-consistent field" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.847750717977 -0.70 4.8 30.6ms\n", + " 2 -7.852401839074 -2.33 -1.53 1.0 17.3ms\n", + " 3 -7.852607366913 -3.69 -2.54 1.0 17.0ms\n", + " 4 -7.852645342785 -4.42 -2.78 2.2 67.3ms\n", + " 5 -7.852646071392 -6.14 -2.87 1.0 17.3ms\n", + " 6 -7.852646669005 -6.22 -3.98 1.0 17.1ms\n", + " 7 -7.852646686252 -7.76 -4.53 1.8 20.4ms\n", + " 8 -7.852646686705 -9.34 -5.35 1.2 18.3ms\n", + " 9 -7.852646686719 -10.84 -5.27 1.8 19.8ms\n", + " 10 -7.852646686729 -11.01 -5.87 1.0 17.9ms\n", + " 11 -7.852646686730 -12.08 -6.86 1.0 17.4ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_scf = self_consistent_field(basis; tol);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "## Potential-based SCF" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) α Diag Δtime\n", + "--- --------------- --------- --------- ---- ---- ------\n", + " 1 -7.847785866858 -0.70 4.8 552ms\n", + " 2 -7.852561326627 -2.32 -1.62 0.80 2.0 498ms\n", + " 3 -7.852641492499 -4.10 -2.69 0.80 1.0 301ms\n", + " 4 -7.852646529901 -5.30 -3.38 0.80 1.8 19.3ms\n", + " 5 -7.852646681225 -6.82 -4.37 0.80 1.8 18.5ms\n", + " 6 -7.852646686620 -8.27 -4.82 0.80 2.2 21.2ms\n", + " 7 -7.852646686726 -9.97 -5.51 0.80 1.0 15.9ms\n", + " 8 -7.852646686730 -11.48 -6.70 0.80 1.5 17.8ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_scfv = DFTK.scf_potential_mixing(basis; tol);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "## Direct minimization\n", + "Note: Unlike the other algorithms, tolerance for this one is in the energy,\n", + "thus we square the density tolerance value to be roughly equivalent." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Iter Function value Gradient norm \n", + " 0 1.427035e+01 3.444237e+00\n", + " * time: 0.04597187042236328\n", + " 1 1.070274e+00 1.768442e+00\n", + " * time: 0.27100205421447754\n", + " 2 -1.591883e+00 2.139380e+00\n", + " * time: 0.2886168956756592\n", + " 3 -3.800034e+00 1.782293e+00\n", + " * time: 0.3139040470123291\n", + " 4 -5.025576e+00 1.987891e+00\n", + " * time: 0.3391458988189697\n", + " 5 -6.761978e+00 1.198385e+00\n", + " * time: 0.36451292037963867\n", + " 6 -7.328938e+00 4.610408e-01\n", + " * time: 0.38998985290527344\n", + " 7 -7.572582e+00 3.017163e-01\n", + " * time: 0.4076390266418457\n", + " 8 -7.669602e+00 1.218459e-01\n", + " * time: 0.4253678321838379\n", + " 9 -7.731643e+00 1.218257e-01\n", + " * time: 0.44299793243408203\n", + " 10 -7.771973e+00 1.245007e-01\n", + " * time: 0.46068787574768066\n", + " 11 -7.808097e+00 8.620072e-02\n", + " * time: 0.4784209728240967\n", + " 12 -7.834978e+00 4.329769e-02\n", + " * time: 0.4963810443878174\n", + " 13 -7.848132e+00 2.315259e-02\n", + " * time: 0.5141289234161377\n", + " 14 -7.851289e+00 1.170433e-02\n", + " * time: 0.531743049621582\n", + " 15 -7.852339e+00 8.423049e-03\n", + " * time: 0.5497369766235352\n", + " 16 -7.852558e+00 5.012420e-03\n", + " * time: 0.5674078464508057\n", + " 17 -7.852624e+00 2.467389e-03\n", + " * time: 0.5850269794464111\n", + " 18 -7.852639e+00 1.203354e-03\n", + " * time: 0.602668046951294\n", + " 19 -7.852643e+00 7.940482e-04\n", + " * time: 0.6209299564361572\n", + " 20 -7.852646e+00 4.543134e-04\n", + " * time: 0.6385998725891113\n", + " 21 -7.852646e+00 2.248817e-04\n", + " * time: 0.6562938690185547\n", + " 22 -7.852647e+00 1.466325e-04\n", + " * time: 0.6739449501037598\n", + " 23 -7.852647e+00 7.310760e-05\n", + " * time: 0.6916239261627197\n", + " 24 -7.852647e+00 4.047682e-05\n", + " * time: 0.7093410491943359\n", + " 25 -7.852647e+00 2.242636e-05\n", + " * time: 0.7270040512084961\n", + " 26 -7.852647e+00 1.289246e-05\n", + " * time: 0.7447018623352051\n", + " 27 -7.852647e+00 6.609812e-06\n", + " * time: 0.7624149322509766\n", + " 28 -7.852647e+00 4.162215e-06\n", + " * time: 0.7801229953765869\n", + " 29 -7.852647e+00 3.056154e-06\n", + " * time: 0.7978048324584961\n", + " 30 -7.852647e+00 1.435621e-06\n", + " * time: 0.8155429363250732\n", + " 31 -7.852647e+00 8.089927e-07\n", + " * time: 0.833366870880127\n", + " 32 -7.852647e+00 4.695037e-07\n", + " * time: 0.8511509895324707\n", + " 33 -7.852647e+00 2.620038e-07\n", + " * time: 0.8689768314361572\n", + " 34 -7.852647e+00 1.538045e-07\n", + " * time: 0.8868558406829834\n", + " 35 -7.852647e+00 6.958609e-08\n", + " * time: 0.9046909809112549\n", + " 36 -7.852647e+00 5.293928e-08\n", + " * time: 0.922806978225708\n", + " 37 -7.852647e+00 2.489355e-08\n", + " * time: 0.9406359195709229\n", + " 38 -7.852647e+00 1.627907e-08\n", + " * time: 0.9584510326385498\n", + " 39 -7.852647e+00 9.689845e-09\n", + " * time: 0.9762530326843262\n", + " 40 -7.852647e+00 5.908684e-09\n", + " * time: 0.9940290451049805\n", + " 41 -7.852647e+00 3.490889e-09\n", + " * time: 1.0122148990631104\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_dm = direct_minimization(basis; tol=tol^2);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "## Newton algorithm" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Start not too far from the solution to ensure convergence:\n", + "We run first a very crude SCF to get close and then switch to Newton." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.847766927299 -0.70 4.5 30.3ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_start = self_consistent_field(basis; tol=0.5);" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Remove the virtual orbitals (which Newton cannot treat yet)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 -7.852645831302 -1.63 3.65s\n", + " 2 -7.852646686730 -6.07 -3.69 1.68s\n", + " 3 -7.852646686730 -13.19 -7.19 124ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ\n", + "scfres_newton = newton(basis, ψ; tol);" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "## Comparison of results" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "|ρ_newton - ρ_scf| = 2.3334047560673926e-7\n", + "|ρ_newton - ρ_scfv| = 4.103275347485547e-7\n", + "|ρ_newton - ρ_dm| = 7.369658346262652e-10\n" + ] + } + ], + "cell_type": "code", + "source": [ + "println(\"|ρ_newton - ρ_scf| = \", norm(scfres_newton.ρ - scfres_scf.ρ))\n", + "println(\"|ρ_newton - ρ_scfv| = \", norm(scfres_newton.ρ - scfres_scfv.ρ))\n", + "println(\"|ρ_newton - ρ_dm| = \", norm(scfres_newton.ρ - scfres_dm.ρ))" + ], + "metadata": {}, + "execution_count": 7 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/compare_solvers/index.html b/v0.6.16/examples/compare_solvers/index.html new file mode 100644 index 0000000000..f64e406b01 --- /dev/null +++ b/v0.6.16/examples/compare_solvers/index.html @@ -0,0 +1,139 @@ + +Comparison of DFT solvers · DFTK.jl

    Comparison of DFT solvers

    We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.

    First we setup our problem

    using DFTK
    +using LinearAlgebra
    +
    +a = 10.26  # Silicon lattice constant in Bohr
    +lattice = a / 2 * [[0 1 1.];
    +                   [1 0 1.];
    +                   [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +model = model_LDA(lattice, atoms, positions)
    +basis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])
    +
    +# Convergence we desire in the density
    +tol = 1e-6
    1.0e-6

    Density-based self-consistent field

    scfres_scf = self_consistent_field(basis; tol);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.847789571152                   -0.70    4.8   30.9ms
    +  2   -7.852405833746       -2.34       -1.53    1.0   17.3ms
    +  3   -7.852609240057       -3.69       -2.54    1.0   17.1ms
    +  4   -7.852645429293       -4.44       -2.77    2.2   22.0ms
    +  5   -7.852646056402       -6.20       -2.86    1.0   17.1ms
    +  6   -7.852646664436       -6.22       -3.81    1.0   17.2ms
    +  7   -7.852646684720       -7.69       -4.67    1.5   18.8ms
    +  8   -7.852646686691       -8.71       -5.07    1.8   20.9ms
    +  9   -7.852646686692      -12.03       -5.00    1.2   18.2ms
    + 10   -7.852646686726      -10.47       -5.55    1.0   17.8ms
    + 11   -7.852646686729      -11.50       -6.07    1.2   18.3ms

    Potential-based SCF

    scfres_scfv = DFTK.scf_potential_mixing(basis; tol);
    n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ----   ------
    +  1   -7.847761639924                   -0.70           4.8   30.7ms
    +  2   -7.852559511885       -2.32       -1.62   0.80    2.0   20.1ms
    +  3   -7.852640661023       -4.09       -2.70   0.80    1.0   15.9ms
    +  4   -7.852646502467       -5.23       -3.41   0.80    2.0   19.9ms
    +  5   -7.852646682027       -6.75       -4.40   0.80    1.8   19.0ms
    +  6   -7.852646686620       -8.34       -4.87   0.80    2.0   20.8ms
    +  7   -7.852646686726       -9.98       -5.51   0.80    1.5   18.6ms
    +  8   -7.852646686730      -11.46       -6.55   0.80    1.5   17.9ms

    Direct minimization

    Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.

    scfres_dm = direct_minimization(basis; tol=tol^2);
    Iter     Function value   Gradient norm
    +     0     1.394990e+01     3.188952e+00
    + * time: 0.009631156921386719
    +     1     1.044911e+00     1.776195e+00
    + * time: 0.027546167373657227
    +     2    -1.699896e+00     1.960141e+00
    + * time: 0.07728719711303711
    +     3    -3.920742e+00     1.551077e+00
    + * time: 0.10294508934020996
    +     4    -5.281086e+00     1.362555e+00
    + * time: 0.12841010093688965
    +     5    -6.817843e+00     7.348406e-01
    + * time: 0.1539139747619629
    +     6    -6.968571e+00     1.007244e+00
    + * time: 0.17178106307983398
    +     7    -7.443885e+00     6.573055e-01
    + * time: 0.18944001197814941
    +     8    -7.560564e+00     6.329333e-01
    + * time: 0.20702719688415527
    +     9    -7.646296e+00     2.439070e-01
    + * time: 0.22467613220214844
    +    10    -7.690657e+00     1.095353e-01
    + * time: 0.24235320091247559
    +    11    -7.741070e+00     1.514067e-01
    + * time: 0.26011013984680176
    +    12    -7.780957e+00     1.558720e-01
    + * time: 0.2778592109680176
    +    13    -7.816534e+00     9.400227e-02
    + * time: 0.2955310344696045
    +    14    -7.841701e+00     4.954193e-02
    + * time: 0.3132760524749756
    +    15    -7.848828e+00     3.889526e-02
    + * time: 0.330996036529541
    +    16    -7.851329e+00     1.868890e-02
    + * time: 0.34872913360595703
    +    17    -7.852337e+00     1.172021e-02
    + * time: 0.36656618118286133
    +    18    -7.852561e+00     5.520123e-03
    + * time: 0.3842802047729492
    +    19    -7.852608e+00     2.468580e-03
    + * time: 0.4020071029663086
    +    20    -7.852632e+00     1.969943e-03
    + * time: 0.4196760654449463
    +    21    -7.852641e+00     1.484335e-03
    + * time: 0.4381890296936035
    +    22    -7.852644e+00     1.230355e-03
    + * time: 0.4562110900878906
    +    23    -7.852646e+00     7.664299e-04
    + * time: 0.4742109775543213
    +    24    -7.852646e+00     3.714998e-04
    + * time: 0.4920940399169922
    +    25    -7.852647e+00     1.392223e-04
    + * time: 0.5098361968994141
    +    26    -7.852647e+00     1.095540e-04
    + * time: 0.5275931358337402
    +    27    -7.852647e+00     7.775846e-05
    + * time: 0.545382022857666
    +    28    -7.852647e+00     4.178982e-05
    + * time: 0.5630860328674316
    +    29    -7.852647e+00     1.879404e-05
    + * time: 0.5809741020202637
    +    30    -7.852647e+00     9.204127e-06
    + * time: 0.5986971855163574
    +    31    -7.852647e+00     6.968141e-06
    + * time: 0.6164851188659668
    +    32    -7.852647e+00     3.418401e-06
    + * time: 0.6342031955718994
    +    33    -7.852647e+00     2.027944e-06
    + * time: 0.6520071029663086
    +    34    -7.852647e+00     1.459507e-06
    + * time: 0.6698191165924072
    +    35    -7.852647e+00     8.499748e-07
    + * time: 0.6876451969146729
    +    36    -7.852647e+00     5.302936e-07
    + * time: 0.7054731845855713
    +    37    -7.852647e+00     1.969839e-07
    + * time: 0.723168134689331
    +    38    -7.852647e+00     1.015452e-07
    + * time: 0.7409701347351074
    +    39    -7.852647e+00     8.002785e-08
    + * time: 0.7587590217590332
    +    40    -7.852647e+00     4.794356e-08
    + * time: 0.7766351699829102
    +    41    -7.852647e+00     2.360590e-08
    + * time: 0.7943739891052246
    +    42    -7.852647e+00     1.508421e-08
    + * time: 0.8122091293334961
    +    43    -7.852647e+00     1.103726e-08
    + * time: 0.8378469944000244
    +    44    -7.852647e+00     6.282236e-09
    + * time: 0.8555409908294678

    Newton algorithm

    Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.

    scfres_start = self_consistent_field(basis; tol=0.5);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.847782199107                   -0.70    4.5   29.6ms

    Remove the virtual orbitals (which Newton cannot treat yet)

    ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ
    +scfres_newton = newton(basis, ψ; tol);
    n     Energy            log10(ΔE)   log10(Δρ)   Δtime
    +---   ---------------   ---------   ---------   ------
    +  1   -7.852645840313                   -1.63    452ms
    +  2   -7.852646686730       -6.07       -3.69    312ms
    +  3   -7.852646686730      -13.23       -7.20    126ms

    Comparison of results

    println("|ρ_newton - ρ_scf|  = ", norm(scfres_newton.ρ - scfres_scf.ρ))
    +println("|ρ_newton - ρ_scfv| = ", norm(scfres_newton.ρ - scfres_scfv.ρ))
    +println("|ρ_newton - ρ_dm|   = ", norm(scfres_newton.ρ - scfres_dm.ρ))
    |ρ_newton - ρ_scf|  = 9.117545869046984e-7
    +|ρ_newton - ρ_scfv| = 5.986815792642816e-8
    +|ρ_newton - ρ_dm|   = 8.748014964485383e-10
    diff --git a/v0.6.16/examples/convergence_study.ipynb b/v0.6.16/examples/convergence_study.ipynb new file mode 100644 index 0000000000..7a443cdaeb --- /dev/null +++ b/v0.6.16/examples/convergence_study.ipynb @@ -0,0 +1,569 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Performing a convergence study\n", + "\n", + "This example shows how to perform a convergence study to find an appropriate\n", + "discretisation parameters for the Brillouin zone (`kgrid`) and kinetic energy\n", + "cutoff (`Ecut`), such that the simulation results are converged to a desired\n", + "accuracy tolerance.\n", + "\n", + "Such a convergence study is generally performed by starting with a\n", + "reasonable base line value for `kgrid` and `Ecut` and then increasing these\n", + "parameters (i.e. using finer discretisations) until a desired property (such\n", + "as the energy) changes less than the tolerance.\n", + "\n", + "This procedure must be performed for each discretisation parameter. Beyond\n", + "the `Ecut` and the `kgrid` also convergence in the smearing temperature or\n", + "other numerical parameters should be checked. For simplicity we will neglect\n", + "this aspect in this example and concentrate on `Ecut` and `kgrid`. Moreover\n", + "we will restrict ourselves to using the same number of $k$-points in each\n", + "dimension of the Brillouin zone.\n", + "\n", + "As the objective of this study we consider bulk platinum. For running the SCF\n", + "conveniently we define a function:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "using Statistics\n", + "\n", + "function run_scf(; a=5.0, Ecut, nkpt, tol)\n", + " atoms = [ElementPsp(:Pt; psp=load_psp(\"hgh/lda/Pt-q10\"))]\n", + " position = [zeros(3)]\n", + " lattice = a * Matrix(I, 3, 3)\n", + "\n", + " model = model_LDA(lattice, atoms, position; temperature=1e-2)\n", + " basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n", + " println(\"nkpt = $nkpt Ecut = $Ecut\")\n", + " self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Moreover we define some parameters. To make the calculations run fast for the\n", + "automatic generation of this documentation we target only a convergence to\n", + "1e-2. In practice smaller tolerances (and thus larger upper bounds for\n", + "`nkpts` and `Ecuts` are likely needed." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tol = 1e-2 # Tolerance to which we target to converge\n", + "nkpts = 1:7 # K-point range checked for convergence\n", + "Ecuts = 10:2:24; # Energy cutoff range checked for convergence" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "As the first step we converge in the number of $k$-points employed in each\n", + "dimension of the Brillouin zone …" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nkpt = 1 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -26.49694596129 -0.22 8.0 131ms\n", + " 2 -26.59135557635 -1.02 -0.63 2.0 58.6ms\n", + " 3 -26.61283132972 -1.67 -1.40 2.0 24.5ms\n", + " 4 -26.61325842108 -3.37 -2.09 2.0 21.5ms\n", + "nkpt = 2 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.79137612735 -0.09 7.5 174ms\n", + " 2 -26.23220089922 -0.36 -0.70 2.0 89.9ms\n", + " 3 -26.23819949195 -2.22 -1.32 2.0 95.2ms\n", + " 4 -26.23847900329 -3.55 -2.32 1.0 83.3ms\n", + "nkpt = 3 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.78459627574 -0.09 5.0 135ms\n", + " 2 -26.23819524479 -0.34 -0.78 2.0 102ms\n", + " 3 -26.25074806315 -1.90 -1.62 2.0 96.3ms\n", + " 4 -26.25103636797 -3.54 -2.16 1.0 69.1ms\n", + "nkpt = 4 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.91107512918 -0.11 5.5 333ms\n", + " 2 -26.29297098002 -0.42 -0.76 2.0 178ms\n", + " 3 -26.30834567247 -1.81 -1.75 2.0 190ms\n", + " 4 -26.30842670016 -4.09 -2.72 1.0 129ms\n", + "nkpt = 5 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90222741021 -0.11 4.0 271ms\n", + " 2 -26.26544355932 -0.44 -0.71 2.0 169ms\n", + " 3 -26.28545776832 -1.70 -1.64 2.0 193ms\n", + " 4 -26.28571390427 -3.59 -2.30 1.0 135ms\n", + "nkpt = 6 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.87466612657 -0.10 5.2 614ms\n", + " 2 -26.27240754422 -0.40 -0.76 2.0 306ms\n", + " 3 -26.28808957034 -1.80 -1.72 2.0 360ms\n", + " 4 -26.28818884582 -4.00 -2.63 1.0 225ms\n", + "nkpt = 7 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.89647886797 -0.11 3.4 472ms\n", + " 2 -26.27737514285 -0.42 -0.74 2.0 308ms\n", + " 3 -26.29415036446 -1.78 -1.74 2.0 360ms\n", + " 4 -26.29420716062 -4.25 -2.68 1.0 228ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "5" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "function converge_kgrid(nkpts; Ecut, tol)\n", + " energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]\n", + " errors = abs.(energies[1:end-1] .- energies[end])\n", + " iconv = findfirst(errors .< tol)\n", + " (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])\n", + "end\n", + "result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)\n", + "nkpt_conv = result.nkpt_conv" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "… and plot the obtained convergence:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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K1Z4UlEReemll4IzFRWCUQDAGZ3PJ8Abbrih+bBz3qYJgK9YrdYBAwZ41uXl5eYOAwSqJ554Ys+ePSLy1FNP9erVy+xxAADwsUWLFnkWo0aNmjRpkrnDmIhgFADgpaioqPDwcM+6sbHR3GGAoNK8k/cstW4AXvviiy/+93//V0QGDBhw7733mj0OAAA+tmfPnuaNRzNnzjR3GHMRjAIAvFRaWtrQ0OBZ8wWjgN9UVlZu377dsx45cqS5wwCBx+12//KXv3S5XFar9W9/+1tISIjZEwEA4GP5+fmehaqqEyZMMHcYc3FXegCAl958883m9ZgxY0ycBAgenu899HS0u3Tpcuedd5o9ERBonnnmmc8//1xE/ud//mfQoEFmjwMEkY8//vimm27avXt3WVlZhw4dEhIShgwZMnbs2Ouvv95isZg9HRBQmn/L3rdv35iYGMMw3n///eXLl+/atau0tDQmJqZHjx5jxoz5xS9+0a1bN3NHbW0EowAAb9TV1S1YsMCz7t+/Px8dAZ9ramo6fPiwZ93Q0GC327/66qucnJyDBw+KSIcOHVauXNm5c2dTZwQCza5du37/+9+LSO/evR977DGzxwGCy8aNG5vXx48fLykpKSgoWLJkSa9evRYuXHjdddeZOBsQYHbt2uVZpKenHz58eNq0aevWrWt+tqqqqqioaP369c8888zcuXMff/xxVQ3YHecEowAAbzz44IN2u92znjdvHrfrBXxuz549AwcO/OHjFovlhhtumDdv3kUXXeT/qYAA5na7p0+f3tTUpCjK4sWLIyIizJ4IgIjIwYMHs7Kyfv/738+dO9fsWYAAUVVV5VmEh4dnZGTs3bvX88eUlJTIyMgjR47U19eLiNPpfOqpp/bv3//aa68F6ie+gE18AQCtZ9myZS+88IJnPX36dH6BD/jTqFGjbr311p49e5o9CBBo/vjHP27btk1Epk+fnpGRYfY4QBDp3r37gw8+uH79+qNHjzqdzvr6+kOHDi1btmzo0KGeAwzDePjhh19//XVz5wQCRk1NjWexYsUKTyo6ffr0oqIih8Oxf//+6urqt956Ky0trfmY5557zrRZW5liGIbZMwAt8/rrr99+++2e9TfffNP8XgXgHx999NH111/vuSl2//79t2zZEhUVZfZQQADat2/fbbfd5lkbhmG32ysqKpqfHTx48MqV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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n", + " xlabel=\"k-grid\", ylabel=\"energy absolute error\")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "We continue to do the convergence in Ecut using the suggested $k$-point grid." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nkpt = 5 Ecut = 10\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.57835526211 -0.16 3.6 113ms\n", + " 2 -25.77695849166 -0.70 -0.76 1.7 66.3ms\n", + " 3 -25.78627224922 -2.03 -1.85 2.0 76.1ms\n", + " 4 -25.78631735499 -4.35 -2.86 1.0 57.8ms\n", + "nkpt = 5 Ecut = 12\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.78612183036 -0.12 3.6 94.5ms\n", + " 2 -26.07608813443 -0.54 -0.71 1.9 71.9ms\n", + " 3 -26.09344280287 -1.76 -1.69 2.1 83.7ms\n", + " 4 -26.09374070973 -3.53 -2.34 1.0 76.0ms\n", + " 5 -26.09375412556 -4.87 -2.74 1.1 62.1ms\n", + "nkpt = 5 Ecut = 14\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.86770592600 -0.11 3.8 88.8ms\n", + " 2 -26.20724310268 -0.47 -0.71 2.0 63.0ms\n", + " 3 -26.22670766290 -1.71 -1.64 2.1 69.1ms\n", + " 4 -26.22700557961 -3.53 -2.28 1.0 56.3ms\n", + " 5 -26.22702593184 -4.69 -2.70 1.0 51.8ms\n", + "nkpt = 5 Ecut = 16\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.89683188626 -0.11 3.8 265ms\n", + " 2 -26.25565618435 -0.45 -0.71 2.0 160ms\n", + " 3 -26.27561144281 -1.70 -1.64 2.0 196ms\n", + " 4 -26.27587641310 -3.58 -2.30 1.0 127ms\n", + " 5 -26.27589306118 -4.78 -2.72 1.0 131ms\n", + "nkpt = 5 Ecut = 18\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90521941341 -0.11 3.9 271ms\n", + " 2 -26.27116488177 -0.44 -0.71 2.0 168ms\n", + " 3 -26.29104433869 -1.70 -1.65 2.0 199ms\n", + " 4 -26.29128907378 -3.61 -2.30 1.0 128ms\n", + " 5 -26.29130399723 -4.83 -2.72 1.0 132ms\n", + "nkpt = 5 Ecut = 20\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90800067480 -0.11 3.9 280ms\n", + " 2 -26.27531460984 -0.43 -0.71 2.0 179ms\n", + " 3 -26.29534256918 -1.70 -1.64 2.0 194ms\n", + " 4 -26.29558965410 -3.61 -2.29 1.0 135ms\n", + " 5 -26.29560554087 -4.80 -2.72 1.0 128ms\n", + "nkpt = 5 Ecut = 22\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90866133012 -0.11 4.2 292ms\n", + " 2 -26.27616412947 -0.43 -0.72 2.0 183ms\n", + " 3 -26.29617115150 -1.70 -1.64 2.0 201ms\n", + " 4 -26.29641914021 -3.61 -2.29 1.0 129ms\n", + " 5 -26.29643520783 -4.79 -2.72 1.0 136ms\n", + "nkpt = 5 Ecut = 24\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90851193600 -0.11 4.0 265ms\n", + " 2 -26.27639308342 -0.43 -0.72 2.0 184ms\n", + " 3 -26.29626030970 -1.70 -1.65 2.1 188ms\n", + " 4 -26.29649663452 -3.63 -2.30 1.0 118ms\n", + " 5 -26.29651128215 -4.83 -2.73 1.0 127ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "18" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "function converge_Ecut(Ecuts; nkpt, tol)\n", + " energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]\n", + " errors = abs.(energies[1:end-1] .- energies[end])\n", + " iconv = findfirst(errors .< tol)\n", + " (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])\n", + "end\n", + "result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)\n", + "Ecut_conv = result.Ecut_conv" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "… and plot it:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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V9gT88y+OUbmPut0vWdnBAAAAAD4qNmzZzclP9uSv798TdeqOS2732w8nDp1ardu3a55upamquojjzzSePz44483brsUFBR03333eXUufI1njAK4XKhD0mLUtBh1T5WdXWytOGpddGv3+ZJqe94uc36ROTFSzYhTR3TjF2IAAAAA0Jb169dv5MiRW7ZsERHZ/qr8+zwJbO/mtf7+kjgvNR4++uijnpmvxT3yyCNPP/10fX396dOnG19JTU3t3Lnz95914sSJAwcOXPZK40FtbW1+fv43P3XjjTf27dvXcyP7F8IogO80KEzJStQyb9WWHbEWH7BKL7hzc3y9KTmlVk6pNShMSYtR7+2thvCNBwAAAADaqFmzZjWF0Qun5MmbZMQMGZkm3fpc7flGvex5W7YslaMfNL7Qv3//22+/vVlmbX7XXXfd5MmTV61a9dUrV7PtUn5+/owZM674qfLy8jFjxnzzlYyMjEWLFl3jnH6LW+kB/IBOAZIRpx5N0TeP05OjVd3dbxt7quz07WbESmf6dvPAWR5ACgAAAABt0OTJk6+//vqmD+rOyubF8j9x8uxPZe96sczvO/N0ubz9P/LkTfLyjK+qqIjMnj27Oedtdl9twSQiP/rRj4YOHerFYXAZFm4BuCqqIkkRSlKEVlGrvnTYevGQ9eVFd65T3SDZxVZ2sTWim5IRp06KUh38ggYAAAAA2gqHw/Hqq68+8sgj5eXlTS/ZthzMl4P50uUGueNhSXxIOnb/+gTbkgObZctS+eSvl5VTTdPuvffehx56qAXH97zbbrutXbt2ly5dEpG0tLSrOSUqKio5Ofkqrz9gwAD3h/N7hFEArokIURYkaL8coL1TZmUXWwUVtnuLPwsr7cJKs3uQOfNmdXY/NbI9TyAFAAAAgLZg7NixpaWl7733XnZ29tq1a03zn7nzzBeyboFseEYGTJA7HpaoQbL7TclfIieKL7tCt27dHnjggVmzZkVFRbX09J62bt26xioaEhJyldsu3XHHHXfccUczzwURwigA9wSokhytJkerxefs10qs7GLrrFu7z5+8KJn7rP/72LrzemVOrDo+UqWPAgAAAEBrp6pqUlJSUlJSSUnJ0qVLX3311bNnzzZ9zmiQ3W/J7rdE1f715vo77rhj9uzZkydPDggIaOmhm8dzzz3XeDB9+vSOHTt6dxhchltY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enT16tVz587t16+fwWAo3T8hIeGpp57SXwwAAAAAwLm8vb2nTZsmhBCHV4jMG44+ZlHF9n8IIYSHr+jzG9vla3nawE3KF2crsNYQAICqYLgr0KyomzdvdunSJSsry3alS5cuf//73yMjI43G+6WuFy5c+POf//zdd9+VLuDbb7/9zW9+c5+nUBsEBgamp6cLIdLS0gICAmqqDLPZXFRUZDKZaqoAAOXRNC0lJcXX19fLy6umawFwt5ycnNzc3KCgoJouBEAZUlJSPD09fX19a7qQMpw5c6ZLly6apgnZVfSaIAbPEO0iyu2dkyr+s0Ts+UKkXxVCiCEviScW3tvr6bbGRRGSh/OPBAacLz8/32w2m0wmSZJquhYATqN3xuj7779fOhV98cUXT5w4MWLEiPunokKINm3afPvtt99//727u7vt4p/+9CedQS0AAAAAwOk6deo0a9Yso9EolGJxeIX461Axv5fYvVgU/e+WaMn7xJfTxOzWYu2ff01FTW3FiDfLHHNZsqX/RuVSDu+AAICaoWvGqMViefDBB2/evGn9+OSTT37zzTcVHWTt2rUTJ060fTx48GCfPn0qXRKqATNGAdwfM0aB2owZo0BtVptnjFpdunRp0aJFX331VVpa2q+XPHxF3ydF/2fE5WMi4XNx/WfrZYPRKLqO0AbNEA+NFIb7zZsJcBPLh8gjmhvu0weoccwYBeolXTNGT58+bUtFGzVq9PHHH1dikAkTJkRFRdk+7ty5U09JAAAAAIAq0qpVq5iYmOvXr8fFxfXt21cIIQqyxa5/inf6im9esaaigYGBs2fPTj5/fvcPm4P6jr5/KiqESC8So7Yp0UdUCzNHAQDVS1cweuPGf3fdnjRpkr+/f+XGee6558ocEwAAAABQ27i5uT399NMHDhxITEx84YUXbGtE+vTps3Tp0mvXrsXGxrZu3XpAU8OJCS5DguxPBdWEiE2yPLpdySyq4tIBAChFVzB6584dW7t3796VHicsLMzWTk1N1VMSAAAAAKB69OzZ84svvrh+/frnn39+7NixgwcPTps2rfQxEiYPsX2UPKe7Qy+em69pvdcrP2UwcRQAUE10BaOlf+E98MADlR7ngQceMBh+/Suih4eHnpIAAAAAANXJz89vxowZvXr1KvOubBQxYdK3QyQvB06fT87W+qxX/vWLxcklAgBQFl3B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NpoJYeT06NmPM0WbCtgsYRQAAACgYMpKwjNDEnu2zdZGq9PhG1NSM5dqo1CfhFEAAACAQupSGps8LNGpdbY1lakwYlLq/XJtFOpNvqfSb9batWtfeeWVmTNnLlq0aNWqVStXrgwhHHvssddff31d/DoAAACABmWfstjTg5Mnjk9VVG9xzfL1YdjEaMYpyc6lRZwM+IcCh9HZs2ffdtttf/3rX6uqqjb5o7Zt2/7z+ueee+5Xv/pVzXWvXr1uv/32ws4DAAAAUC+O2Dn2+MDkyc+mqrZ80tKCNZkhE1MvDE/u1KKIkwEhhAI+Sr9u3bqLLrqod+/ef/7zn/+5im5Jnz593nrrrSlTpkyZMuV3v/vd4sWLCzUPAAAAQP0auFvs/r6J7KfUz1mZOW1yan1UpJGAWoUJo0uWLDnyyCPvu+++bf1iaWnppZdeWnMdRdFDDz1UkHkAAAAAGoKz947feGQi+5qpizPffi6KvG4UiqsAYXT16tXDhg175513vnLfePyAAw4YOnTozjvvnP3rZ599du31+PHj858HAAAAoOH44UHxHxyYo8CMW5i+/CW7RqGoChBGv//977/55pu1P3bt2vV3v/vdsmXL3nnnnQkTJuy///7Zv96jR4+DDjqo5vqll15at25d/iMBAAAANBw3H5X43r45Isw976V/MXvLryMFCi3fMPrWW289+OCDtT8OHz787bffvvzyy9u3b1/zSSyW/U0aIYQwYMCAmov169fPnj07z5EAAAAAGpRYCPcdnxi6e45I8tPXozvf1UahSPINo7/5zW/S6S/+ju3bt++jjz660047betNDj300NrruXPn5jkSAAAAQENTEg9jByaP7pSjjV45M3rsI20UiiGvMJrJZCZMmFBzXVJSMnr06JYtW26yZmt2jPbq1av2et68efmMBAAAANAwlSbDk4OT++2YLZVEmXDu1Gj6EicxQZ3LK4zOnTt3yZIlNdcnnnjifvvtt3336dChQ+31ihUr8hkJAAAAoMHq2CpMPinRtU22NrouFU6ZlHprpTYKdSuvMLp48eLa6759+273fTZ++n716tX5jAQAAADQkHVtExs/NNFu02duv6K8Kpw0MVpYoY1CHcorjC5btqz2etddd93smq15lD6VStVe176xFAAAAKBJ6tUu9vjAZKtEtjWfVmYGTYiWrivWTND85BVG4/Evvx5F0XbfZ/ny5bXXHTt2zGckAAAAgIavb+fYwycmElm3k80rz5wyKVVRXayZoJnJK4x26tSp9nrp0qWbXbM1O0Y3Pol+4/eNAgAAADRVI7rF7zo2667REGYty5z5XCrl8VqoAwULo7Nmzdru+0ybNq32eq+99spnJAAAAIDG4uKe8WsPzRFnxi/KnPdC5G2jUHB5hdEePXrUbvB87rnnysvL/3lNzh2j69at+/Of/1z7Y//+/fMZCQAAAKAR+dlhiSsOyNFnxsxP/+jV7X+HIbBZeYXRRCIxePDgmus1a9b85je/2Y6b3HHHHbWP4e+111577rlnPiMBAAAANC6390mc3j1HornprfRtczxRD4WUVxgNIZx55pm117/4xS9mzJixyYLsO0anTZt23XXX1f44cuTIPOcBAAAAaFwSsfDnfokTds3x0O1Vr0QPzNNGoWDyDaMjRow46qijaq6rq6uHDh36+OOPb+V3H3jggaFDh1ZXf3G4WocOHS677LI85wEAAABodFolwlNDkod0yNZGMyGMnB49+7HXjUJh5BtGY7HYrbfemkwma36sqKj4xje+MWzYsGeeeWbDhg1hcztGKyoqHnvssaOPPvq8885bv3597ee/+MUv2rZtm+c8AAAAAI1RWUl4Zkhiz7bZ2mh1OnxjSmrmUm0UCiDfMBpCOPbYY+++++6NP5k4ceLw4cPbt2/fu3fvN954o+bDOXPmnHPOOX369OnYsePpp5/+8ssvb/yV8847b9SoUfkPAwAAANBIdSmNTR6W6NQ625rKVBgxKfV+uTYK+UoW5C4jR45cvnz5T37yk3T6y1ddVFZWzp49u/bH+fPnz58/f7NfHzFixO9///uCTAIAAADQeO1TFnt6cPLE8amK6i2uWb4+DJsYzTgl2bm0iJNBk1OAHaM1fvSjHz377LO77rrrtv36ePy66657/PHHW7VqVahJAAAAABqvI3aOPT4w2SJrs1mwJjNkYurzqmLNBE1RwcJoCGHgwIHvvvvur371q86dO+f+xfH4mWee+dZbb11//fXxeCHHAAAAAGjUBu4Wu79vIp71mPo5KzOnTU6tj4o1EzQ5hXmUvla7du2uueaaf//3f586deqLL7744osvLliwYOXKlatXr47H4x07duzQocPBBx88YMCAQYMGdevWrbC/HQAAAKBpOHvv+Cdr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+39z5szZddddb7755vqeBQAAAICtMqJb/K5jsu4aDeHVZZnTpqSqHFNfN4TRxu3tt9++8cYbQwi//e1v27VrV9/jAAAAALC1LuoZv653jjo35ZPM+dMibxutC8n6HqA5SqVSlZWV2/qtZDJZWlq6yX3+5V/+paqq6uSTTz7jjDMKNyAAAAAAxXB978TKDeF3/5dtU+hDH6R3bxNuOjLH9lK2lTBaD5544ont6JgnnHDCtGnTNv7k17/+9WuvvVZWVnbPPfcUbjoAAAAAiueOPonFleHRBdna6K/fTu/SOvbvB3r4u5D8p9lYvf/++z//+c9DCDfeeOPuu+9e3+MAAAAAsD3isTCmf2LgbrHsy656JXpgnreNFpIdo/WgT58+f/nLX7b1W506ddr4x6uvvnr9+vX777//oEGDPvzww43/aPHixTUX5eXlNX9UVlbWsWPHPEYGAAAAoK60iIexA5N9n069uWKLbxPNhDByerRL69jQ3XMkVLZSLJPx8tZG6dhjj33ppZe2cvEVV1zx29/+tlC/umPHjitWrAghLF++vEOHDoW67bYqLy/fsGHDJr0YaAgymcySJUvKysratGlT37MAm1qzZk1FRUXnzp3rexBgM5YsWVJaWlpWVlbfgwCbqqysLC8v79SpUyLhJY/UoU8rM8c+FX20JlusK02GKSclj+6kjRaAHaObWrFiRXl5ec11x44dt/X/KVm7du2TTz75/vvvf/bZZ6WlpXvsscfQoUP322+/OpgUAAAAgKajS2ls8rDEcU+lPlu3xTWVqTBiUurFU5L77aiN5ksYDeXl5XPmzHn9H957773aXbSjR4++6KKLtvI+1dXVN9xww+2337527dpN/qhv37733XffvvvuW8Cx77jjjtqAu4k33njjP/7jP0IIp5566mWXXRZC6Nq1awF/NQAAAAB1YZ+y2FODkyeOT1VUb3HN8vVh0PhoxohE1zbaaF6aexidMGHCSSedlP99KisrBw8ePGPGjM3+6bRp0w499NBx48YNGDAg/99V44gjjsi5Zo899hg4cGChfiMAAAAAde2InWNPDEqeNDFVteWTlhatzZw0MXpheLJdyyJO1uQ091Ppq6u3nN+3xXe/+93aKnrCCSc8/PDDb7755vPPP3/VVVeVlpaGENauXXvGGWf87W9/K8ivAwAAAKCpGtAldn/fRDzr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+PLLL8fGxrI1DazDnTt3du3a1ZwRIyIiuHwAfZw6dSotLU06tLe3DwoK8vb2rqqqSk5Olj64fvfdd3fv3j169KiO7/jXrFnzX//1X1I7ERERAQEB2dnZ8fHxpaWlarV6w4YNKpVq48aNpnR42bJla9euFctPPPHE4MGD27dvn5GRcezYsYqKCpVK9cknn8jl8o8++siUKAD0R2IUTcXV1TU8PPzpp582dOTIyMiYMmWKeLvl7++/f//+8PBw8a2SkpJFixZt2bJFEIQjR46sWrXqgw8+MK57N27cmDt3rlju0qXL/v37u3TpIh4WFhbOmDFjz549giBERUUNGDDg7bffNi4KYLHc3d179OgRGBi4detWQ89t3779X//613HjxoWGhkpfTjx8+PCLL75YtWqVmB5dtWpVREREZGSkif1ct27dwIED63uX3QxhlZycnEJDQ3v06LFx40bxgjLU66+/vmTJEh0V9JyUrVVWVtakSZPEYbpdu3bR0dG9evUS3yotLV26dKk47sfHx3/00Ucff/yx0YEAy+Tq6hoWFvbMM89s2LBB/7M+/vjjRYsW6a7zyy+/LF++XCy/+eabxndREARBWLZsmY69p9jKEFamVatWL7/88uuvv96/f38p9VldXb1v375FixaJW9OcO3du+fLl//rXv7S2kJCQIF2AYWFh+/btCwoKEg+VSuXkyZNjY2MFQfjv//7vgQMHGr1jzKFDh6Ss6F/+8pfvv/9eGpEfPHjw6quvnj59WhCElStXDhgwYOjQocZFAWAYc09ZhVW5cOHCkiVLvv3225SUFHH+f15envTHpudS+rfeekus7+jomJSUVLfCmDFjxAqurq65ubnGdVXaCsrNzS0zM7PWuyqVqn///mKFNm3aFBcXGxcFsCjx8fHvvffeDz/8cOfOHfGVW7duSVeoPkvphw4dumvXrurq6voq7N27V5ph3b9/f6O7Kn1GPHDggNGNAI+R27dvv/POOzt27Lh+/bp0iUmbvRi6lH7hwoVN19U5c+aIURwcHK5du1a3gpSLcXJyys7ObrqeAM3mypUrixYt2r17d3JyskqlUqvVxcXF0gCqz1J6fUgfcd3c3MTpaUaQltJv3LixUXoFWLjly5d/8MEHDx8+rK9Cenp627ZtxevC3t5eoVBorTZgwACxjq+vr1KprPVuRUVF9+7dxQod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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n", + " xlabel=\"Ecut\", ylabel=\"energy absolute error\")" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "## A more realistic example.\n", + "Repeating the above exercise for more realistic settings, namely …" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tol = 1e-4 # Tolerance to which we target to converge\n", + "nkpts = 1:20 # K-point range checked for convergence\n", + "Ecuts = 20:1:50;" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "…one obtains the following two plots for the convergence in `kpoints` and `Ecut`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/convergence_study/c2193b56.svg b/v0.6.16/examples/convergence_study/c2193b56.svg new file mode 100644 index 0000000000..a02d8c243a --- /dev/null +++ b/v0.6.16/examples/convergence_study/c2193b56.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/convergence_study/fef04faf.svg b/v0.6.16/examples/convergence_study/fef04faf.svg new file mode 100644 index 0000000000..a04d9da011 --- /dev/null +++ b/v0.6.16/examples/convergence_study/fef04faf.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/convergence_study/index.html b/v0.6.16/examples/convergence_study/index.html new file mode 100644 index 0000000000..93067bfe43 --- /dev/null +++ b/v0.6.16/examples/convergence_study/index.html @@ -0,0 +1,37 @@ + +Performing a convergence study · DFTK.jl

    Performing a convergence study

    This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.

    Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.

    This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of $k$-points in each dimension of the Brillouin zone.

    As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:

    using DFTK
    +using LinearAlgebra
    +using Statistics
    +
    +function run_scf(; a=5.0, Ecut, nkpt, tol)
    +    atoms    = [ElementPsp(:Pt; psp=load_psp("hgh/lda/Pt-q10"))]
    +    position = [zeros(3)]
    +    lattice  = a * Matrix(I, 3, 3)
    +
    +    model  = model_LDA(lattice, atoms, position; temperature=1e-2)
    +    basis  = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))
    +    println("nkpt = $nkpt Ecut = $Ecut")
    +    self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))
    +end;

    Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.

    tol   = 1e-2      # Tolerance to which we target to converge
    +nkpts = 1:7       # K-point range checked for convergence
    +Ecuts = 10:2:24;  # Energy cutoff range checked for convergence

    As the first step we converge in the number of $k$-points employed in each dimension of the Brillouin zone …

    function converge_kgrid(nkpts; Ecut, tol)
    +    energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]
    +    errors = abs.(energies[1:end-1] .- energies[end])
    +    iconv = findfirst(errors .< tol)
    +    (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])
    +end
    +result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)
    +nkpt_conv = result.nkpt_conv
    5

    … and plot the obtained convergence:

    using Plots
    +plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,
    +     xlabel="k-grid", ylabel="energy absolute error")
    Example block output

    We continue to do the convergence in Ecut using the suggested $k$-point grid.

    function converge_Ecut(Ecuts; nkpt, tol)
    +    energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]
    +    errors = abs.(energies[1:end-1] .- energies[end])
    +    iconv = findfirst(errors .< tol)
    +    (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])
    +end
    +result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)
    +Ecut_conv = result.Ecut_conv
    18

    … and plot it:

    plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,
    +     xlabel="Ecut", ylabel="energy absolute error")
    Example block output

    A more realistic example.

    Repeating the above exercise for more realistic settings, namely …

    tol   = 1e-4  # Tolerance to which we target to converge
    +nkpts = 1:20  # K-point range checked for convergence
    +Ecuts = 20:1:50;

    …one obtains the following two plots for the convergence in kpoints and Ecut.

    +
    diff --git a/v0.6.16/examples/custom_potential.ipynb b/v0.6.16/examples/custom_potential.ipynb new file mode 100644 index 0000000000..cd3f8b34fa --- /dev/null +++ b/v0.6.16/examples/custom_potential.ipynb @@ -0,0 +1,434 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Custom potential" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We solve the 1D Gross-Pitaevskii equation with a custom potential.\n", + "This is similar to Gross-Pitaevskii equation in 1D example\n", + "and we show how to define local potentials attached to atoms, which allows for\n", + "instance to compute forces.\n", + "The custom potential is actually already defined as `ElementGaussian` in DFTK, and could\n", + "be used as is." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "First, we define a new element which represents a nucleus generating\n", + "a Gaussian potential." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct CustomPotential <: DFTK.Element\n", + " α # Prefactor\n", + " L # Width of the Gaussian nucleus\n", + "end" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Some default values" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "CustomPotential() = CustomPotential(1.0, 0.5);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "We extend the two methods providing access to the real and Fourier\n", + "representation of the potential to DFTK." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function DFTK.local_potential_real(el::CustomPotential, r::Real)\n", + " -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\n", + "end\n", + "function DFTK.local_potential_fourier(el::CustomPotential, q::Real)\n", + " # = ∫ V(r) exp(-ix⋅q) dx\n", + " -el.α * exp(- (q * el.L)^2 / 2)\n", + "end" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! tip \"Gaussian potentials and DFTK\"\n", + " DFTK already implements `CustomPotential` in form of the `DFTK.ElementGaussian`,\n", + " so this explicit re-implementation is only provided for demonstration purposes." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We set up the lattice. For a 1D case we supply two zero lattice vectors" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "a = 10\n", + "lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "In this example, we want to generate two Gaussian potentials generated by\n", + "two \"nuclei\" localized at positions $x_1$ and $x_2$, that are expressed in\n", + "$[0,1)$ in fractional coordinates. $|x_1 - x_2|$ should be different from\n", + "$0.5$ to break symmetry and get nonzero forces." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x1 = 0.2\n", + "x2 = 0.8\n", + "positions = [[x1, 0, 0], [x2, 0, 0]]\n", + "gauss = CustomPotential()\n", + "atoms = [gauss, gauss];" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We setup a Gross-Pitaevskii model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "C = 1.0\n", + "α = 2;\n", + "n_electrons = 1 # Increase this for fun\n", + "terms = [Kinetic(),\n", + " AtomicLocal(),\n", + " LocalNonlinearity(ρ -> C * ρ^α)]\n", + "model = Model(lattice, atoms, positions; n_electrons, terms,\n", + " spin_polarization=:spinless); # use \"spinless electrons\"" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "We discretize using a moderate Ecut and run a SCF algorithm to compute forces\n", + "afterwards. As there is no ionic charge associated to `gauss` we have to specify\n", + "a starting density and we choose to start from a zero density." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -0.143561908069 -0.42 8.0 244ms\n", + " 2 -0.156032836845 -1.90 -1.10 1.0 82.8ms\n", + " 3 -0.156769122108 -3.13 -1.56 1.0 886μs\n", + " 4 -0.157045137752 -3.56 -2.32 1.0 817μs\n", + " 5 -0.157049025011 -5.41 -2.52 1.0 833μs\n", + " 6 -0.157056383239 -5.13 -3.60 1.0 850μs\n", + " 7 -0.157056405734 -7.65 -4.18 1.0 819μs\n", + " 8 -0.157056406884 -8.94 -5.03 1.0 851μs\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.0380283 \n AtomicLocal -0.3163445\n LocalNonlinearity 0.1212598 \n\n total -0.157056406884" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))\n", + "ρ = zeros(eltype(basis), basis.fft_size..., 1)\n", + "scfres = self_consistent_field(basis; tol=1e-5, ρ)\n", + "scfres.energies" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Computing the forces can then be done as usual:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-0.055668948467604326, -0.0, -0.0]\n [0.0556698439671372, -0.0, -0.0]" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "compute_forces(scfres)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Extract the converged total local potential" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Extract other quantities before plotting them" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "101-element Vector{ComplexF64}:\n -0.13758510387553058 - 0.9629022419123816im\n -0.014137157831256311 - 0.09895549626196806im\n 0.01675447976600753 + 0.11725113014288112im\n 0.007277356667925495 + 0.05093430626927811im\n -0.0012703500217133418 - 0.00888907515902994im\n -0.0019326211797162012 - 0.01352567656843686im\n -0.0002786883372053092 - 0.0019512637560599498im\n 0.0003102903815763316 + 0.0021710747036758995im\n 0.00013359227705024907 + 0.0009351107186892512im\n -2.03436358846244e-5 - 0.0001423261954329124im\n ⋮\n -2.0335423579605257e-5 - 0.00014234695798437592im\n 0.00013361924251417725 + 0.0009350811196294955im\n 0.0003101831845133466 + 0.002171144513829201im\n -0.00027893065568092225 - 0.0019511729288691152im\n -0.00193263237895527 - 0.013525675777583379im\n -0.0012698567863493357 - 0.00888907015544374im\n 0.0072781552717562335 + 0.0509341092461434im\n 0.01675262017259691 + 0.11725142511152484im\n -0.014141436720240404 - 0.09895489204992282im" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "ρ = scfres.ρ[:, 1, 1, 1] # converged density, first spin component\n", + "ψ_fourier = scfres.ψ[1][:, 1] # first k-point, all G components, first eigenvector" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "Transform the wave function to real space and fix the phase:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=4}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ], + "cell_type": "code", + "source": [ + "ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\n", + "ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\n", + "\n", + "using Plots\n", + "x = a * vec(first.(DFTK.r_vectors(basis)))\n", + "p = plot(x, real.(ψ), label=\"real(ψ)\")\n", + "plot!(p, x, imag.(ψ), label=\"imag(ψ)\")\n", + "plot!(p, x, ρ, label=\"ρ\")\n", + "plot!(p, x, tot_local_pot, label=\"tot local pot\")" + ], + "metadata": {}, + "execution_count": 12 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/custom_potential/39b9dc10.svg b/v0.6.16/examples/custom_potential/e8afb027.svg similarity index 56% rename from dev/examples/custom_potential/39b9dc10.svg rename to v0.6.16/examples/custom_potential/e8afb027.svg index 40ce60aa1b..5af0c259eb 100644 --- a/dev/examples/custom_potential/39b9dc10.svg +++ b/v0.6.16/examples/custom_potential/e8afb027.svg @@ -1,52 +1,52 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/custom_potential/index.html b/v0.6.16/examples/custom_potential/index.html new file mode 100644 index 0000000000..f4217d20d1 --- /dev/null +++ b/v0.6.16/examples/custom_potential/index.html @@ -0,0 +1,63 @@ + +Custom potential · DFTK.jl

    Custom potential

    We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.

    using DFTK
    +using LinearAlgebra

    First, we define a new element which represents a nucleus generating a Gaussian potential.

    struct CustomPotential <: DFTK.Element
    +    α  # Prefactor
    +    L  # Width of the Gaussian nucleus
    +end

    Some default values

    CustomPotential() = CustomPotential(1.0, 0.5);

    We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.

    function DFTK.local_potential_real(el::CustomPotential, r::Real)
    +    -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)
    +end
    +function DFTK.local_potential_fourier(el::CustomPotential, q::Real)
    +    # = ∫ V(r) exp(-ix⋅q) dx
    +    -el.α * exp(- (q * el.L)^2 / 2)
    +end
    Gaussian potentials and DFTK

    DFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.

    We set up the lattice. For a 1D case we supply two zero lattice vectors

    a = 10
    +lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];

    In this example, we want to generate two Gaussian potentials generated by two "nuclei" localized at positions $x_1$ and $x_2$, that are expressed in $[0,1)$ in fractional coordinates. $|x_1 - x_2|$ should be different from $0.5$ to break symmetry and get nonzero forces.

    x1 = 0.2
    +x2 = 0.8
    +positions = [[x1, 0, 0], [x2, 0, 0]]
    +gauss     = CustomPotential()
    +atoms     = [gauss, gauss];

    We setup a Gross-Pitaevskii model

    C = 1.0
    +α = 2;
    +n_electrons = 1  # Increase this for fun
    +terms = [Kinetic(),
    +         AtomicLocal(),
    +         LocalNonlinearity(ρ -> C * ρ^α)]
    +model = Model(lattice, atoms, positions; n_electrons, terms,
    +              spin_polarization=:spinless);  # use "spinless electrons"

    We discretize using a moderate Ecut and run a SCF algorithm to compute forces afterwards. As there is no ionic charge associated to gauss we have to specify a starting density and we choose to start from a zero density.

    basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))
    +ρ = zeros(eltype(basis), basis.fft_size..., 1)
    +scfres = self_consistent_field(basis; tol=1e-5, ρ)
    +scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             0.0380294 
    +    AtomicLocal         -0.3163464
    +    LocalNonlinearity   0.1212606 
    +
    +    total               -0.157056406918

    Computing the forces can then be done as usual:

    compute_forces(scfres)
    2-element Vector{StaticArraysCore.SVector{3, Float64}}:
    + [-0.055678961295298784, -0.0, -0.0]
    + [0.05568013156633107, -0.0, -0.0]

    Extract the converged total local potential

    tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1

    Extract other quantities before plotting them

    ρ = scfres.ρ[:, 1, 1, 1]        # converged density, first spin component
    +ψ_fourier = scfres.ψ[1][:, 1]   # first k-point, all G components, first eigenvector
    101-element Vector{ComplexF64}:
    +     0.9512327125091018 - 0.20313683335866106im
    +     0.0977594952506087 - 0.020876727645304897im
    +   -0.11583139216253047 + 0.024735921463320057im
    +  -0.050318117222319214 + 0.010745592372628435im
    +   0.008781443926880711 - 0.001875312122827592im
    +   0.013362000992635993 - 0.0028534841739143997im
    +   0.001927691358004777 - 0.00041165170276485593im
    + -0.0021447222032042424 + 0.0004580155421389152im
    +  -0.000923752760946054 + 0.00019726607497002854im
    + 0.00014060573787007036 - 3.003124195072166e-5im
    +                        ⋮
    + 0.00014060983730693544 - 3.001982493610449e-5im
    + -0.0009237423518335819 + 0.00019727002391986385im
    + -0.0021447196331448827 + 0.0004580006828744446im
    +  0.0019276834464469884 - 0.0004116579753979609im
    +   0.013362007385458794 - 0.0028534559481413467im
    +   0.008781457689375048 - 0.0018752660794522076im
    +   -0.05031815269905353 + 0.010745403940581355im
    +   -0.11583139898464051 + 0.024735932153400902im
    +     0.0977595280193356 - 0.02087658321963179im

    Transform the wave function to real space and fix the phase:

    ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]
    +ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));
    +
    +using Plots
    +x = a * vec(first.(DFTK.r_vectors(basis)))
    +p = plot(x, real.(ψ), label="real(ψ)")
    +plot!(p, x, imag.(ψ), label="imag(ψ)")
    +plot!(p, x, ρ, label="ρ")
    +plot!(p, x, tot_local_pot, label="tot local pot")
    Example block output
    diff --git a/v0.6.16/examples/custom_solvers.ipynb b/v0.6.16/examples/custom_solvers.ipynb new file mode 100644 index 0000000000..c59ef51f93 --- /dev/null +++ b/v0.6.16/examples/custom_solvers.ipynb @@ -0,0 +1,190 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Custom solvers\n", + "In this example, we show how to define custom solvers. Our system\n", + "will again be silicon, because we are not very imaginative" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK, LinearAlgebra\n", + "\n", + "a = 10.26\n", + "lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# We take very (very) crude parameters\n", + "model = model_LDA(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "We define our custom fix-point solver: simply a damped fixed-point" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function my_fp_solver(f, x0, max_iter; tol)\n", + " mixing_factor = .7\n", + " x = x0\n", + " fx = f(x)\n", + " for n = 1:max_iter\n", + " inc = fx - x\n", + " if norm(inc) < tol\n", + " break\n", + " end\n", + " x = x + mixing_factor * inc\n", + " fx = f(x)\n", + " end\n", + " (; fixpoint=x, converged=norm(fx-x) < tol)\n", + "end;" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Our eigenvalue solver just forms the dense matrix and diagonalizes\n", + "it explicitly (this only works for very small systems)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function my_eig_solver(A, X0; maxiter, tol, kwargs...)\n", + " n = size(X0, 2)\n", + " A = Array(A)\n", + " E = eigen(A)\n", + " λ = E.values[1:n]\n", + " X = E.vectors[:, 1:n]\n", + " (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)\n", + "end;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Finally we also define our custom mixing scheme. It will be a mixture\n", + "of simple mixing (for the first 2 steps) and than default to Kerker mixing.\n", + "In the mixing interface `δF` is $(ρ_\\text{out} - ρ_\\text{in})$, i.e.\n", + "the difference in density between two subsequent SCF steps and the `mix`\n", + "function returns $δρ$, which is added to $ρ_\\text{in}$ to yield $ρ_\\text{next}$,\n", + "the density for the next SCF step." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct MyMixing\n", + " n_simple # Number of iterations for simple mixing\n", + "end\n", + "MyMixing() = MyMixing(2)\n", + "\n", + "function DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)\n", + " if n_iter <= mixing.n_simple\n", + " return δF # Simple mixing -> Do not modify update at all\n", + " else\n", + " # Use the default KerkerMixing from DFTK\n", + " DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)\n", + " end\n", + "end" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "That's it! Now we just run the SCF with these solvers" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.136730769250 -0.42 0.0 804ms\n", + " 2 -7.234507523075 -1.01 -0.71 0.0 652ms\n", + " 3 -7.250155356676 -1.81 -1.20 0.0 47.7ms\n", + " 4 -7.251066644663 -3.04 -1.51 0.0 48.3ms\n", + " 5 -7.251276232104 -3.68 -1.82 0.0 48.2ms\n", + " 6 -7.251323976978 -4.32 -2.11 0.0 49.1ms\n", + " 7 -7.251335118065 -4.95 -2.39 0.0 52.0ms\n", + " 8 -7.251337831814 -5.57 -2.66 0.0 144ms\n", + " 9 -7.251338529334 -6.16 -2.92 0.0 48.3ms\n", + " 10 -7.251338719368 -6.72 -3.18 0.0 48.4ms\n", + " 11 -7.251338774177 -7.26 -3.44 0.0 47.9ms\n", + " 12 -7.251338790816 -7.78 -3.68 0.0 49.8ms\n", + " 13 -7.251338796088 -8.28 -3.93 0.0 51.4ms\n", + " 14 -7.251338797816 -8.76 -4.17 0.0 140ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres = self_consistent_field(basis;\n", + " tol=1e-4,\n", + " solver=my_fp_solver,\n", + " eigensolver=my_eig_solver,\n", + " mixing=MyMixing());" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Note that the default convergence criterion is the difference in\n", + "density. When this gets below `tol`, the\n", + "\"driver\" `self_consistent_field` artificially makes the fixed-point\n", + "solver think it's converged by forcing `f(x) = x`. You can customize\n", + "this with the `is_converged` keyword argument to\n", + "`self_consistent_field`." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/custom_solvers/index.html b/v0.6.16/examples/custom_solvers/index.html new file mode 100644 index 0000000000..b6c4c997c4 --- /dev/null +++ b/v0.6.16/examples/custom_solvers/index.html @@ -0,0 +1,65 @@ + +Custom solvers · DFTK.jl

    Custom solvers

    In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative

    using DFTK, LinearAlgebra
    +
    +a = 10.26
    +lattice = a / 2 * [[0 1 1.];
    +                   [1 0 1.];
    +                   [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms = [Si, Si]
    +positions =  [ones(3)/8, -ones(3)/8]
    +
    +# We take very (very) crude parameters
    +model = model_LDA(lattice, atoms, positions)
    +basis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);

    We define our custom fix-point solver: simply a damped fixed-point

    function my_fp_solver(f, x0, max_iter; tol)
    +    mixing_factor = .7
    +    x = x0
    +    fx = f(x)
    +    for n = 1:max_iter
    +        inc = fx - x
    +        if norm(inc) < tol
    +            break
    +        end
    +        x = x + mixing_factor * inc
    +        fx = f(x)
    +    end
    +    (; fixpoint=x, converged=norm(fx-x) < tol)
    +end;

    Our eigenvalue solver just forms the dense matrix and diagonalizes it explicitly (this only works for very small systems)

    function my_eig_solver(A, X0; maxiter, tol, kwargs...)
    +    n = size(X0, 2)
    +    A = Array(A)
    +    E = eigen(A)
    +    λ = E.values[1:n]
    +    X = E.vectors[:, 1:n]
    +    (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)
    +end;

    Finally we also define our custom mixing scheme. It will be a mixture of simple mixing (for the first 2 steps) and than default to Kerker mixing. In the mixing interface δF is $(ρ_\text{out} - ρ_\text{in})$, i.e. the difference in density between two subsequent SCF steps and the mix function returns $δρ$, which is added to $ρ_\text{in}$ to yield $ρ_\text{next}$, the density for the next SCF step.

    struct MyMixing
    +    n_simple  # Number of iterations for simple mixing
    +end
    +MyMixing() = MyMixing(2)
    +
    +function DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)
    +    if n_iter <= mixing.n_simple
    +        return δF  # Simple mixing -> Do not modify update at all
    +    else
    +        # Use the default KerkerMixing from DFTK
    +        DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)
    +    end
    +end

    That's it! Now we just run the SCF with these solvers

    scfres = self_consistent_field(basis;
    +                               tol=1e-4,
    +                               solver=my_fp_solver,
    +                               eigensolver=my_eig_solver,
    +                               mixing=MyMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.136730769250                   -0.42    0.0    287ms
    +  2   -7.234507523075       -1.01       -0.71    0.0    228ms
    +  3   -7.250155356676       -1.81       -1.20    0.0   47.2ms
    +  4   -7.251066644663       -3.04       -1.51    0.0   50.6ms
    +  5   -7.251276232104       -3.68       -1.82    0.0    136ms
    +  6   -7.251323976978       -4.32       -2.11    0.0   47.3ms
    +  7   -7.251335118065       -4.95       -2.39    0.0   47.1ms
    +  8   -7.251337831814       -5.57       -2.66    0.0   47.1ms
    +  9   -7.251338529334       -6.16       -2.92    0.0   49.4ms
    + 10   -7.251338719368       -6.72       -3.18    0.0   51.4ms
    + 11   -7.251338774177       -7.26       -3.44    0.0    146ms
    + 12   -7.251338790816       -7.78       -3.68    0.0   46.9ms
    + 13   -7.251338796088       -8.28       -3.93    0.0   47.2ms
    + 14   -7.251338797816       -8.76       -4.17    0.0   47.9ms

    Note that the default convergence criterion is the difference in density. When this gets below tol, the "driver" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.

    diff --git a/v0.6.16/examples/dielectric.ipynb b/v0.6.16/examples/dielectric.ipynb new file mode 100644 index 0000000000..36740c65af --- /dev/null +++ b/v0.6.16/examples/dielectric.ipynb @@ -0,0 +1,194 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Eigenvalues of the dielectric matrix\n", + "\n", + "We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.235595008085 -0.50 7.0 10.7ms\n", + " 2 -7.250418659775 -1.83 -1.40 1.0 5.44ms\n", + " 3 -7.251217673621 -3.10 -2.27 1.0 5.23ms\n", + " 4 -7.251325664533 -3.97 -2.44 2.0 6.47ms\n", + " 5 -7.251335394217 -5.01 -2.86 1.0 5.32ms\n", + " 6 -7.251337412487 -5.70 -3.05 2.0 6.28ms\n", + " 7 -7.251338724626 -5.88 -3.63 1.0 5.52ms\n", + " 8 -7.251338783158 -7.23 -3.98 1.0 5.66ms\n", + " 9 -7.251338795988 -7.89 -4.31 1.0 5.67ms\n", + " 10 -7.251338798125 -8.67 -4.59 2.0 45.8ms\n", + " 11 -7.251338798520 -9.40 -4.90 1.0 6.19ms\n", + " 12 -7.251338798647 -9.90 -5.16 2.0 7.27ms\n", + " 13 -7.251338798697 -10.29 -5.75 1.0 6.06ms\n", + " 14 -7.251338798702 -11.35 -5.81 3.0 7.96ms\n", + " 15 -7.251338798704 -11.68 -6.19 1.0 5.95ms\n", + " 16 -7.251338798704 -12.29 -6.77 2.0 6.64ms\n", + " 17 -7.251338798705 -13.00 -6.90 3.0 7.65ms\n", + " 18 -7.251338798705 -14.10 -7.02 1.0 5.94ms\n", + " 19 -7.251338798705 -14.15 -7.94 1.0 5.86ms\n", + " 20 -7.251338798705 -15.05 -7.64 3.0 7.87ms\n", + " 21 -7.251338798705 -14.75 -8.00 1.0 5.90ms\n", + " 22 -7.251338798705 -15.05 -8.87 2.0 6.89ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using KrylovKit\n", + "using Printf\n", + "\n", + "# Calculation parameters\n", + "kgrid = [1, 1, 1]\n", + "Ecut = 5\n", + "\n", + "# Silicon lattice\n", + "a = 10.26\n", + "lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# Compute the dielectric operator without symmetries\n", + "model = model_LDA(lattice, atoms, positions, symmetries=false)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "scfres = self_consistent_field(basis, tol=1e-8);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Applying $ε^† ≔ (1- χ_0 K)$ …" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function eps_fun(δρ)\n", + " δV = apply_kernel(basis, δρ; ρ=scfres.ρ)\n", + " χ0δV = apply_χ0(scfres, δV)\n", + " δρ - χ0δV\n", + "end;" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "… eagerly diagonalizes the subspace matrix at each iteration" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Arnoldi iteration step 1: normres = 0.050408485829918366\n", + "[ Info: Arnoldi iteration step 2: normres = 0.46790047772085686\n", + "[ Info: Arnoldi iteration step 3: normres = 0.9698175755209208\n", + "[ Info: Arnoldi iteration step 4: normres = 0.2868478211907985\n", + "[ Info: Arnoldi iteration step 5: normres = 0.6068282042073576\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (6.40e-02, 8.69e-02, 5.68e-01, 1.86e-01, 4.70e-03)\n", + "[ Info: Arnoldi iteration step 6: normres = 0.2452895635346112\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (1.26e-02, 1.30e-01, 1.42e-01, 1.05e-01, 8.98e-02)\n", + "[ Info: Arnoldi iteration step 7: normres = 0.06982931943631544\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (4.32e-04, 8.83e-03, 8.26e-03, 5.28e-02, 3.66e-02)\n", + "[ Info: Arnoldi iteration step 8: normres = 0.09137492729964601\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (1.69e-05, 5.66e-04, 5.89e-04, 1.43e-02, 2.16e-02)\n", + "[ Info: Arnoldi iteration step 9: normres = 0.06143821058837507\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (4.44e-07, 2.43e-05, 2.81e-05, 2.69e-03, 1.15e-02)\n", + "[ Info: Arnoldi iteration step 10: normres = 0.11329741932604655\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (2.18e-08, 1.97e-06, 2.53e-06, 1.02e-03, 1.64e-02)\n", + "[ Info: Arnoldi iteration step 11: normres = 0.09253431612122322\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (8.90e-10, 1.34e-07, 1.92e-07, 3.81e-04, 5.72e-02)\n", + "[ Info: Arnoldi iteration step 12: normres = 0.0825262662987034\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (3.17e-11, 7.87e-09, 1.25e-08, 1.08e-04, 3.15e-02)\n", + "[ Info: Arnoldi iteration step 13: normres = 0.0456567868519694\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (6.20e-13, 2.52e-10, 4.43e-10, 1.56e-05, 8.81e-03)\n", + "[ Info: Arnoldi iteration step 14: normres = 0.721190111205919\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (2.59e-13, 2.23e-10, 4.73e-10, 7.14e-01, 5.78e-02)\n", + "[ Info: Arnoldi iteration step 15: normres = 0.0716120261660322\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (1.27e-14, 6.75e-11, 5.07e-02, 5.93e-04, 1.35e-05)\n", + "[ Info: Arnoldi iteration step 16: normres = 0.6080220853874011\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (5.94e-15, 1.10e-10, 1.07e-01, 1.69e-03, 5.95e-01)\n", + "[ Info: Arnoldi iteration step 17: normres = 0.039240509343174954\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (1.37e-16, 1.33e-02, 1.16e-02, 6.63e-03, 5.93e-04)\n", + "[ Info: Arnoldi iteration step 18: normres = 0.024158486821443583\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (1.36e-18, 1.91e-04, 2.05e-04, 2.15e-08, 1.17e-04)\n", + "[ Info: Arnoldi iteration step 19: normres = 0.16397133099174727\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (9.54e-20, 2.79e-09, 3.20e-05, 3.58e-06, 1.44e-05)\n", + "[ Info: Arnoldi iteration step 20: normres = 0.06928800725704705\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (3.17e-21, 1.82e-06, 5.13e-07, 8.90e-07, 4.63e-07)\n", + "[ Info: Arnoldi iteration step 21: normres = 0.026419111801948992\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (3.51e-23, 9.90e-10, 3.38e-08, 3.88e-09, 1.94e-08)\n", + "[ Info: Arnoldi iteration step 22: normres = 0.04121516734123961\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (5.93e-25, 2.14e-10, 8.85e-10, 1.79e-10, 5.58e-10)\n", + "[ Info: Arnoldi iteration step 23: normres = 0.5189755560084361\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (2.40e-25, 3.52e-10, 1.21e-09, 4.04e-10, 1.22e-09)\n", + "[ Info: Arnoldi iteration step 24: normres = 0.012841751431998774\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (1.55e-27, 6.81e-12, 2.75e-11, 4.65e-09, 2.92e-08)\n", + "[ Info: Arnoldi iteration step 25: normres = 0.10496067680180289\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 2 values converged, normres = (6.82e-29, 4.86e-13, 1.95e-12, 8.15e-05, 1.36e-04)\n", + "[ Info: Arnoldi iteration step 26: normres = 0.0338980507497649\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (1.03e-30, 1.23e-14, 4.96e-14, 3.44e-08, 7.51e-08)\n", + "[ Info: Arnoldi iteration step 27: normres = 0.019724656017570927\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (8.34e-33, 1.59e-16, 6.40e-16, 1.08e-07, 1.15e-07)\n", + "[ Info: Arnoldi iteration step 28: normres = 0.10541802161532567\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (3.75e-34, 1.17e-17, 4.69e-17, 9.09e-09, 7.24e-09)\n", + "[ Info: Arnoldi iteration step 29: normres = 0.04553074403925548\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (7.33e-36, 3.74e-19, 1.50e-18, 1.38e-10, 4.51e-10)\n", + "[ Info: Arnoldi iteration step 30: normres = 0.1758246671981681\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (6.19e-37, 5.60e-20, 2.25e-19, 2.34e-11, 7.68e-11)\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (6.19e-37, 5.60e-20, 2.25e-19, 2.34e-11, 7.68e-11)\n", + "[ Info: Arnoldi iteration step 20: normres = 0.033489401635875514\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (8.87e-39, 1.32e-21, 5.31e-21, 6.16e-13, 2.01e-12)\n", + "[ Info: Arnoldi iteration step 21: normres = 0.08212783903139129\n", + "┌ Info: Arnoldi eigsolve finished after 2 iterations:\n", + "│ * 6 eigenvalues converged\n", + "│ * norm of residuals = (3.091970789881947e-40, 7.488689742494257e-23, 3.013010560120999e-22, 3.863566264720267e-14, 1.2977885769186446e-13, 1.0811403035811525e-13)\n", + "└ * number of operations = 32\n" + ] + } + ], + "cell_type": "code", + "source": [ + "eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);" + ], + "metadata": {}, + "execution_count": 3 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/dielectric/index.html b/v0.6.16/examples/dielectric/index.html new file mode 100644 index 0000000000..8c76ce7b2b --- /dev/null +++ b/v0.6.16/examples/dielectric/index.html @@ -0,0 +1,109 @@ + +Eigenvalues of the dielectric matrix · DFTK.jl

    Eigenvalues of the dielectric matrix

    We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively.

    using DFTK
    +using Plots
    +using KrylovKit
    +using Printf
    +
    +# Calculation parameters
    +kgrid = [1, 1, 1]
    +Ecut = 5
    +
    +# Silicon lattice
    +a = 10.26
    +lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +# Compute the dielectric operator without symmetries
    +model  = model_LDA(lattice, atoms, positions, symmetries=false)
    +basis  = PlaneWaveBasis(model; Ecut, kgrid)
    +scfres = self_consistent_field(basis, tol=1e-8);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.235566246955                   -0.50    8.0   11.2ms
    +  2   -7.250455704491       -1.83       -1.41    1.0   5.51ms
    +  3   -7.251202000562       -3.13       -2.19    1.0   5.36ms
    +  4   -7.251215743116       -4.86       -2.11    2.0   6.54ms
    +  5   -7.251335666043       -3.92       -2.76    1.0   5.43ms
    +  6   -7.251338580208       -5.54       -3.44    1.0   5.45ms
    +  7   -7.251338751023       -6.77       -3.64    2.0   6.49ms
    +  8   -7.251338793195       -7.37       -4.09    1.0   5.51ms
    +  9   -7.251338797665       -8.35       -4.54    1.0   5.56ms
    + 10   -7.251338798545       -9.06       -5.16    1.0   5.63ms
    + 11   -7.251338798691       -9.83       -5.34    2.0   6.73ms
    + 12   -7.251338798701      -11.01       -5.70    1.0   5.88ms
    + 13   -7.251338798703      -11.80       -5.83    2.0   6.97ms
    + 14   -7.251338798704      -11.81       -6.33    1.0   5.88ms
    + 15   -7.251338798704      -12.68       -6.65    2.0   6.78ms
    + 16   -7.251338798705      -13.27       -7.18    1.0   5.86ms
    + 17   -7.251338798705      -14.05       -7.78    2.0   78.1ms
    + 18   -7.251338798705      -14.75       -8.29    1.0   6.96ms

    Applying $ε^† ≔ (1- χ_0 K)$

    function eps_fun(δρ)
    +    δV = apply_kernel(basis, δρ; ρ=scfres.ρ)
    +    χ0δV = apply_χ0(scfres, δV)
    +    δρ - χ0δV
    +end;

    … eagerly diagonalizes the subspace matrix at each iteration

    eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);
    [ Info: Arnoldi iteration step 1: normres = 0.06953033041407357
    +[ Info: Arnoldi iteration step 2: normres = 0.6183409418522503
    +[ Info: Arnoldi iteration step 3: normres = 0.7042820426412695
    +[ Info: Arnoldi iteration step 4: normres = 0.21131159918605708
    +[ Info: Arnoldi iteration step 5: normres = 0.34340949550843564
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (9.84e-03, 3.41e-02, 2.36e-01, 2.46e-01, 1.83e-02)
    +[ Info: Arnoldi iteration step 6: normres = 0.48497183143292055
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (4.06e-03, 1.61e-01, 4.32e-01, 1.06e-01, 9.72e-02)
    +[ Info: Arnoldi iteration step 7: normres = 0.0675440384760961
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (1.54e-04, 2.61e-02, 6.69e-03, 3.01e-02, 4.78e-02)
    +[ Info: Arnoldi iteration step 8: normres = 0.07918813056127341
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (5.19e-06, 1.44e-03, 4.02e-04, 6.94e-03, 2.32e-02)
    +[ Info: Arnoldi iteration step 9: normres = 0.09274687886427152
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (2.09e-07, 9.55e-05, 2.96e-05, 2.19e-03, 2.47e-02)
    +[ Info: Arnoldi iteration step 10: normres = 0.10616099084372022
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (9.79e-09, 7.49e-06, 2.59e-06, 9.48e-04, 5.26e-02)
    +[ Info: Arnoldi iteration step 11: normres = 0.05729100046639485
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (2.43e-10, 3.07e-07, 1.18e-07, 1.94e-04, 2.37e-02)
    +[ Info: Arnoldi iteration step 12: normres = 0.09669915880249437
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (1.00e-11, 2.06e-08, 8.80e-09, 5.58e-05, 1.26e-02)
    +[ Info: Arnoldi iteration step 13: normres = 0.03322166538204878
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (1.42e-13, 4.75e-10, 2.24e-10, 5.44e-06, 2.29e-03)
    +[ Info: Arnoldi iteration step 14: normres = 0.2645241525101854
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (1.58e-14, 8.62e-11, 4.50e-11, 3.92e-06, 2.81e-03)
    +[ Info: Arnoldi iteration step 15: normres = 0.1718716819805224
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (2.77e-15, 2.73e-10, 1.67e-01, 5.96e-03, 4.49e-04)
    +[ Info: Arnoldi iteration step 16: normres = 0.46638265246585414
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (5.93e-16, 1.71e-10, 6.08e-02, 3.23e-05, 1.37e-05)
    +[ Info: Arnoldi iteration step 17: normres = 0.08295996551469673
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (4.48e-17, 1.62e-09, 3.52e-02, 2.90e-04, 6.85e-02)
    +[ Info: Arnoldi iteration step 18: normres = 0.019356930143785357
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (3.59e-19, 4.40e-04, 1.24e-04, 9.36e-04, 2.08e-04)
    +[ Info: Arnoldi iteration step 19: normres = 0.03622159482846847
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (5.39e-21, 6.61e-09, 1.10e-05, 4.66e-10, 2.54e-05)
    +[ Info: Arnoldi iteration step 20: normres = 0.13702726130619639
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (3.13e-22, 2.03e-07, 1.02e-06, 2.65e-06, 3.98e-09)
    +[ Info: Arnoldi iteration step 21: normres = 0.05776377743075349
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (8.79e-24, 1.94e-08, 4.86e-08, 1.01e-09, 1.53e-07)
    +[ Info: Arnoldi iteration step 22: normres = 0.018259574347196043
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (6.62e-26, 8.31e-11, 6.25e-10, 3.07e-11, 2.03e-09)
    +[ Info: Arnoldi iteration step 23: normres = 0.335970989787862
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (9.44e-27, 2.00e-11, 1.45e-10, 8.30e-12, 5.20e-10)
    +[ Info: Arnoldi iteration step 24: normres = 0.05814407711094362
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 1 values converged, normres = (5.05e-28, 7.69e-12, 5.56e-11, 1.77e-10, 9.65e-09)
    +[ Info: Arnoldi iteration step 25: normres = 0.05962607513768875
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 2 values converged, normres = (1.24e-29, 3.07e-13, 2.22e-12, 5.15e-10, 4.26e-08)
    +[ Info: Arnoldi iteration step 26: normres = 0.05990637320608355
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (3.35e-31, 1.40e-14, 1.02e-13, 1.17e-04, 2.13e-05)
    +[ Info: Arnoldi iteration step 27: normres = 0.01630981685924618
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (2.25e-33, 1.51e-16, 1.09e-15, 1.14e-10, 5.55e-09)
    +[ Info: Arnoldi iteration step 28: normres = 0.07872158974419712
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (7.38e-35, 7.93e-18, 5.74e-17, 5.08e-08, 2.65e-08)
    +[ Info: Arnoldi iteration step 29: normres = 0.042151860211707845
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (1.36e-36, 2.44e-19, 1.76e-18, 1.51e-11, 1.97e-09)
    +[ Info: Arnoldi iteration step 30: normres = 0.20254603009986172
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (1.22e-37, 3.61e-20, 2.62e-19, 2.70e-12, 3.61e-10)
    +[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (1.22e-37, 3.61e-20, 2.62e-19, 2.70e-12, 3.61e-10)
    +[ Info: Arnoldi iteration step 20: normres = 0.07640074949700384
    +[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (4.34e-39, 2.25e-21, 1.63e-20, 1.89e-13, 2.53e-11)
    +[ Info: Arnoldi iteration step 21: normres = 0.059314258659398406
    +[ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 4 values converged, normres = (1.11e-40, 9.55e-23, 6.91e-22, 8.90e-15, 1.19e-12)
    +[ Info: Arnoldi iteration step 22: normres = 0.014560355392776742
    +┌ Info: Arnoldi eigsolve finished after 2 iterations:
    +*  6 eigenvalues converged
    +*  norm of residuals = (6.724551780338132e-43, 9.244709538539257e-25, 5.970468294262648e-24, 9.504463184791397e-17, 1.2641612087218228e-14, 1.468064236524777e-14)
    +*  number of operations = 33
    diff --git a/v0.6.16/examples/energy_cutoff_smearing.ipynb b/v0.6.16/examples/energy_cutoff_smearing.ipynb new file mode 100644 index 0000000000..3ed7c90407 --- /dev/null +++ b/v0.6.16/examples/energy_cutoff_smearing.ipynb @@ -0,0 +1,456 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Energy cutoff smearing\n", + "\n", + "A technique that has been employed in the literature to ensure smooth energy bands\n", + "for finite Ecut values is energy cutoff smearing.\n", + "\n", + "As recalled in the\n", + "[Problems and plane-wave discretization](https://docs.dftk.org/stable/guide/periodic_problems/)\n", + "section, the energy of periodic systems is computed by solving eigenvalue\n", + "problems of the form\n", + "$$\n", + "H_k u_k = ε_k u_k,\n", + "$$\n", + "for each $k$-point in the first Brillouin zone of the system.\n", + "Each of these eigenvalue problem is discretized with a plane-wave basis\n", + "$\\mathcal{B}_k^{E_c}=\\{x ↦ e^{iG · x} \\;\\;|\\;G ∈ \\mathcal{R}^*,\\;\\; |k+G|^2 ≤ 2E_c\\}$\n", + "whose size highly depends on the choice of $k$-point, cell size or\n", + "cutoff energy $\\rm E_c$ (the `Ecut` parameter of DFTK).\n", + "As a result, energy bands computed along a $k$-path in the Brillouin zone\n", + "or with respect to the system's unit cell volume - in the case of geometry optimization\n", + "for example - display big irregularities when `Ecut` is taken too small.\n", + "\n", + "Here is for example the variation of the ground state energy of face cubic centred\n", + "(FCC) silicon with respect to its lattice parameter,\n", + "around the experimental lattice constant." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Statistics\n", + "\n", + "a0 = 10.26 # Experimental lattice constant of silicon in bohr\n", + "a_list = range(a0 - 1/2, a0 + 1/2; length=20)\n", + "\n", + "function compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)\n", + " lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + " Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + " atoms = [Si, Si]\n", + " positions = [ones(3)/8, -ones(3)/8]\n", + " model = model_PBE(lattice, atoms, positions; kinetic_blowup)\n", + " basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + " self_consistent_field(basis; callback=identity, kwargs...).energies.total\n", + "end\n", + "\n", + "Ecut = 5 # Very low Ecut to display big irregularities\n", + "kgrid = (2, 2, 2) # Very sparse k-grid to speed up convergence\n", + "E0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "To be compared with the same computation for a high `Ecut=100`. The naive approximation\n", + "of the energy is shifted for the legibility of the plot." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,\n", + " -7.848576991754026, -7.850892888614151, -7.852921532056932,\n", + " -7.854675317792186, -7.85616622262217, -7.85740584131599,\n", + " -7.858405359984107, -7.859175611288143, -7.859727053496513,\n", + " -7.860069804791132, -7.860213631865354, -7.8601679947736915,\n", + " -7.859942011410533, -7.859544518721661, -7.858984032385052,\n", + " -7.858268793303855, -7.857406769423708]\n", + "\n", + "using Plots\n", + "shift = mean(abs.(E0_naive .- E0_ref))\n", + "p = plot(a_list, E0_naive .- shift, label=\"Ecut=5\", xlabel=\"lattice parameter a (bohr)\",\n", + " ylabel=\"Ground state energy (Ha)\", color=1)\n", + "plot!(p, a_list, E0_ref, label=\"Ecut=100\", color=2)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "The problem of non-smoothness of the approximated energy is typically avoided by\n", + "taking a large enough `Ecut`, at the cost of a high computation time.\n", + "Another method consist in introducing a modified kinetic term defined through\n", + "the data of a blow-up function, a method which is also referred to as \"energy cutoff\n", + "smearing\". DFTK features energy cutoff smearing using the CHV blow-up\n", + "function introduced in [^CHV2022] that is mathematically ensured to provide $C^2$\n", + "regularity of the energy bands.\n", + "\n", + "[^CHV2022]:\n", + " Éric Cancès, Muhammad Hassan and Laurent Vidal\n", + " *Modified-operator method for the calculation of band diagrams of\n", + " crystalline materials*, 2022.\n", + " [arXiv preprint.](https://arxiv.org/abs/2210.00442)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let us lauch the computation again with the modified kinetic term." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Abinit energy cutoff smearing option\"\n", + " For the sake of completeness, DFTK also provides the blow-up function `BlowupAbinit`\n", + " proposed in the Abinit quantum chemistry code. This function depends on a parameter\n", + " `Ecutsm` fixed by the user\n", + " (see [Abinit user guide](https://docs.abinit.org/variables/rlx/#ecutsm)).\n", + " For the right choice of `Ecutsm`, `BlowupAbinit` corresponds to the `BlowupCHV` approach\n", + " with coefficients ensuring $C^1$ regularity. To choose `BlowupAbinit`, pass\n", + " `kinetic_blowup=BlowupAbinit(Ecutsm)` to the model constructors." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can know compare the approximation of the energy as well as the estimated\n", + "lattice constant for each strategy." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=7}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]\n", + "a0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])\n", + "\n", + "shift = mean(abs.(E0_modified .- E0_ref)) # Shift for legibility of the plot\n", + "plot!(p, a_list, E0_modified .- shift, label=\"Ecut=5 + BlowupCHV\", color=3)\n", + "vline!(p, [a0], label=\"experimental a0\", linestyle=:dash, linecolor=:black)\n", + "vline!(p, [a0_naive], label=\"a0 Ecut=5\", linestyle=:dash, color=1)\n", + "vline!(p, [a0_ref], label=\"a0 Ecut=100\", linestyle=:dash, color=2)\n", + "vline!(p, [a0_modified], label=\"a0 Ecut=5 + BlowupCHV\", linestyle=:dash, color=3)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The smoothed curve obtained with the modified kinetic term allow to clearly designate\n", + "a minimal value of the energy with respect to the lattice parameter $a$, even with\n", + "the low `Ecut=5` Ha." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error of approximation of the reference a0 with modified kinetic term: 0.50393%\n" + ] + } + ], + "cell_type": "code", + "source": [ + "println(\"Error of approximation of the reference a0 with modified kinetic term:\"*\n", + " \" $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%\")" + ], + "metadata": {}, + "execution_count": 5 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/energy_cutoff_smearing/a754526a.svg b/v0.6.16/examples/energy_cutoff_smearing/4c696aae.svg similarity index 86% rename from dev/examples/energy_cutoff_smearing/a754526a.svg rename to v0.6.16/examples/energy_cutoff_smearing/4c696aae.svg index 41bb996356..b60184af72 100644 --- a/dev/examples/energy_cutoff_smearing/a754526a.svg +++ b/v0.6.16/examples/energy_cutoff_smearing/4c696aae.svg @@ -1,60 +1,60 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/examples/energy_cutoff_smearing/71706795.svg b/v0.6.16/examples/energy_cutoff_smearing/c04f82c2.svg similarity index 86% rename from dev/examples/energy_cutoff_smearing/71706795.svg rename to v0.6.16/examples/energy_cutoff_smearing/c04f82c2.svg index 0bce1ae8ec..20f3b0b634 100644 --- a/dev/examples/energy_cutoff_smearing/71706795.svg +++ b/v0.6.16/examples/energy_cutoff_smearing/c04f82c2.svg @@ -1,50 +1,50 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/energy_cutoff_smearing/index.html b/v0.6.16/examples/energy_cutoff_smearing/index.html new file mode 100644 index 0000000000..109517576a --- /dev/null +++ b/v0.6.16/examples/energy_cutoff_smearing/index.html @@ -0,0 +1,43 @@ + +Energy cutoff smearing · DFTK.jl

    Energy cutoff smearing

    A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.

    As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form

    \[H_k u_k = ε_k u_k,\]

    for each $k$-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis $\mathcal{B}_k^{E_c}=\{x ↦ e^{iG · x} \;\;|\;G ∈ \mathcal{R}^*,\;\; |k+G|^2 ≤ 2E_c\}$ whose size highly depends on the choice of $k$-point, cell size or cutoff energy $\rm E_c$ (the Ecut parameter of DFTK). As a result, energy bands computed along a $k$-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.

    Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.

    using DFTK
    +using Statistics
    +
    +a0 = 10.26  # Experimental lattice constant of silicon in bohr
    +a_list = range(a0 - 1/2, a0 + 1/2; length=20)
    +
    +function compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)
    +    lattice = a / 2 * [[0 1 1.];
    +                       [1 0 1.];
    +                       [1 1 0.]]
    +    Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +    atoms = [Si, Si]
    +    positions = [ones(3)/8, -ones(3)/8]
    +    model = model_PBE(lattice, atoms, positions; kinetic_blowup)
    +    basis = PlaneWaveBasis(model; Ecut, kgrid)
    +    self_consistent_field(basis; callback=identity, kwargs...).energies.total
    +end
    +
    +Ecut  = 5          # Very low Ecut to display big irregularities
    +kgrid = (2, 2, 2)  # Very sparse k-grid to speed up convergence
    +E0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);

    To be compared with the same computation for a high Ecut=100. The naive approximation of the energy is shifted for the legibility of the plot.

    E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,
    +          -7.848576991754026, -7.850892888614151, -7.852921532056932,
    +          -7.854675317792186, -7.85616622262217,  -7.85740584131599,
    +          -7.858405359984107, -7.859175611288143, -7.859727053496513,
    +          -7.860069804791132, -7.860213631865354, -7.8601679947736915,
    +          -7.859942011410533, -7.859544518721661, -7.858984032385052,
    +          -7.858268793303855, -7.857406769423708]
    +
    +using Plots
    +shift = mean(abs.(E0_naive .- E0_ref))
    +p = plot(a_list, E0_naive .- shift, label="Ecut=5", xlabel="lattice parameter a (bohr)",
    +         ylabel="Ground state energy (Ha)", color=1)
    +plot!(p, a_list, E0_ref, label="Ecut=100", color=2)
    Example block output

    The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as "energy cutoff smearing". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide $C^2$ regularity of the energy bands.

    Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.

    Let us lauch the computation again with the modified kinetic term.

    E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);
    Abinit energy cutoff smearing option

    For the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring $C^1$ regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.

    We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.

    estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]
    +a0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])
    +
    +shift = mean(abs.(E0_modified .- E0_ref))  # Shift for legibility of the plot
    +plot!(p, a_list, E0_modified .- shift, label="Ecut=5 + BlowupCHV", color=3)
    +vline!(p, [a0], label="experimental a0", linestyle=:dash, linecolor=:black)
    +vline!(p, [a0_naive], label="a0 Ecut=5", linestyle=:dash, color=1)
    +vline!(p, [a0_ref], label="a0 Ecut=100", linestyle=:dash, color=2)
    +vline!(p, [a0_modified], label="a0 Ecut=5 + BlowupCHV", linestyle=:dash, color=3)
    Example block output

    The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter $a$, even with the low Ecut=5 Ha.

    println("Error of approximation of the reference a0 with modified kinetic term:"*
    +        " $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%")
    Error of approximation of the reference a0 with modified kinetic term: 0.50393%
    diff --git a/v0.6.16/examples/error_estimates_forces.ipynb b/v0.6.16/examples/error_estimates_forces.ipynb new file mode 100644 index 0000000000..1e7f334f65 --- /dev/null +++ b/v0.6.16/examples/error_estimates_forces.ipynb @@ -0,0 +1,542 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Practical error bounds for the forces\n", + "\n", + "This is a simple example showing how to compute error estimates for the forces\n", + "on a ${\\rm TiO}_2$ molecule, from which we can either compute asymptotically\n", + "valid error bounds or increase the precision on the computation of the forces.\n", + "\n", + "The strategy we follow is described with more details in [^CDKL2021] and we\n", + "will use in comments the density matrices framework. We will also needs\n", + "operators and functions from\n", + "[`src/scf/newton.jl`](https://dftk.org/blob/master/src/scf/newton.jl).\n", + "\n", + "[^CDKL2021]:\n", + " E. Cancès, G. Dusson, G. Kemlin, and A. Levitt\n", + " *Practical error bounds for properties in plane-wave electronic structure\n", + " calculations* Preprint, 2021. [arXiv](https://arxiv.org/abs/2111.01470)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Printf\n", + "using LinearAlgebra\n", + "using ForwardDiff\n", + "using LinearMaps\n", + "using IterativeSolvers" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Setup\n", + "We setup manually the ${\\rm TiO}_2$ configuration from\n", + "[Materials Project](https://materialsproject.org/materials/mp-2657/)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Ti = ElementPsp(:Ti; psp=load_psp(\"hgh/lda/ti-q4.hgh\"))\n", + "O = ElementPsp(:O; psp=load_psp(\"hgh/lda/o-q6.hgh\"))\n", + "atoms = [Ti, Ti, O, O, O, O]\n", + "positions = [[0.5, 0.5, 0.5], # Ti\n", + " [0.0, 0.0, 0.0], # Ti\n", + " [0.19542, 0.80458, 0.5], # O\n", + " [0.80458, 0.19542, 0.5], # O\n", + " [0.30458, 0.30458, 0.0], # O\n", + " [0.69542, 0.69542, 0.0]] # O\n", + "lattice = [[8.79341 0.0 0.0];\n", + " [0.0 8.79341 0.0];\n", + " [0.0 0.0 5.61098]];" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We apply a small displacement to one of the $\\rm Ti$ atoms to get nonzero\n", + "forces." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "3-element Vector{Float64}:\n 0.478\n 0.528\n 0.535" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "positions[1] .+= [-0.022, 0.028, 0.035]" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "We build a model with one $k$-point only, not too high `Ecut_ref` and small\n", + "tolerance to limit computational time. These parameters can be increased for\n", + "more precise results." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "model = model_LDA(lattice, atoms, positions)\n", + "kgrid = [1, 1, 1]\n", + "Ecut_ref = 35\n", + "basis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)\n", + "tol = 1e-5;" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "## Computations" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We compute the reference solution $P_*$ from which we will compute the\n", + "references forces." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)\n", + "ψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We compute a variational approximation of the reference solution with\n", + "smaller `Ecut`. `ψr`, `ρr` and `Er` are the quantities computed with `Ecut`\n", + "and then extended to the reference grid.\n", + "\n", + "!!! note \"Choice of convergence parameters\"\n", + " Be careful to choose `Ecut` not too close to `Ecut_ref`.\n", + " Note also that the current choice `Ecut_ref = 35` is such that the\n", + " reference solution is not converged and `Ecut = 15` is such that the\n", + " asymptotic regime (crucial to validate the approach) is barely established." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Ecut = 15\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "scfres = self_consistent_field(basis; tol, callback=identity)\n", + "ψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)\n", + "ρr = compute_density(basis_ref, ψr, scfres.occupation)\n", + "Er, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We then compute several quantities that we need to evaluate the error bounds." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the residual $R(P)$, and remove the virtual orbitals, as required\n", + " in [`src/scf/newton.jl`](https://github.com/JuliaMolSim/DFTK.jl/blob/fedc720dab2d194b30d468501acd0f04bd4dd3d6/src/scf/newton.jl#L121)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)\n", + "res, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)\n", + "ψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the error $P-P_*$ on the associated orbitals $ϕ-ψ$ after aligning\n", + " them: this is done by solving $\\min |ϕ - ψU|$ for $U$ unitary matrix of\n", + " size $N×N$ ($N$ being the number of electrons) whose solution is\n", + " $U = S(S^*S)^{-1/2}$ where $S$ is the overlap matrix $ψ^*ϕ$." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function compute_error(basis, ϕ, ψ)\n", + " map(zip(ϕ, ψ)) do (ϕk, ψk)\n", + " S = ψk'ϕk\n", + " U = S*(S'S)^(-1/2)\n", + " ϕk - ψk*U\n", + " end\n", + "end\n", + "err = compute_error(basis_ref, ψr, ψ_ref);" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute ${\\boldsymbol M}^{-1}R(P)$ with ${\\boldsymbol M}^{-1}$ defined in [^CDKL2021]:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]\n", + "map(zip(P, ψr)) do (Pk, ψk)\n", + " DFTK.precondprep!(Pk, ψk)\n", + "end\n", + "function apply_M(φk, Pk, δφnk, n)\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + " δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + " δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + "end\n", + "function apply_inv_M(φk, Pk, δφnk, n)\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + " op(x) = apply_M(φk, Pk, x, n)\n", + " function f_ldiv!(x, y)\n", + " x .= DFTK.proj_tangent_kpt(y, φk)\n", + " x ./= (Pk.mean_kin[n] .+ Pk.kin)\n", + " DFTK.proj_tangent_kpt!(x, φk)\n", + " end\n", + " J = LinearMap{eltype(φk)}(op, size(δφnk, 1))\n", + " δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),\n", + " verbose=false, reltol=0, abstol=1e-15)\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + "end\n", + "function apply_metric(φ, P, δφ, A::Function)\n", + " map(enumerate(δφ)) do (ik, δφk)\n", + " Aδφk = similar(δφk)\n", + " φk = φ[ik]\n", + " for n = 1:size(δφk,2)\n", + " Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)\n", + " end\n", + " Aδφk\n", + " end\n", + "end\n", + "Mres = apply_metric(ψr, P, res, apply_inv_M);" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "We can now compute the modified residual $R_{\\rm Schur}(P)$ using a Schur\n", + "complement to approximate the error on low-frequencies[^CDKL2021]:\n", + "\n", + "$$\n", + "\\begin{bmatrix}\n", + "(\\boldsymbol Ω + \\boldsymbol K)_{11} & (\\boldsymbol Ω + \\boldsymbol K)_{12} \\\\\n", + "0 & {\\boldsymbol M}_{22}\n", + "\\end{bmatrix}\n", + "\\begin{bmatrix}\n", + "P_{1} - P_{*1} \\\\ P_{2}-P_{*2}\n", + "\\end{bmatrix} =\n", + "\\begin{bmatrix}\n", + "R_{1} \\\\ R_{2}\n", + "\\end{bmatrix}.\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the projection of the residual onto the high and low frequencies:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "resLF = DFTK.transfer_blochwave(res, basis_ref, basis)\n", + "resHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute ${\\boldsymbol M}^{-1}_{22}R_2(P)$:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "e2 = apply_metric(ψr, P, resHF, apply_inv_M);" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the right hand side of the Schur system:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Rayleigh coefficients needed for `apply_Ω`\n", + "Λ = map(enumerate(ψr)) do (ik, ψk)\n", + " Hk = hamr.blocks[ik]\n", + " Hψk = Hk * ψk\n", + " ψk'Hψk\n", + "end\n", + "ΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)\n", + "ΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)\n", + "rhs = resLF - ΩpKe2;" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "- Solve the Schur system to compute $R_{\\rm Schur}(P)$: this is the most\n", + " costly step, but inverting $\\boldsymbol{Ω} + \\boldsymbol{K}$ on the small space has\n", + " the same cost than the full SCF cycle on the small grid." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "(; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)\n", + "e1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ\n", + "e1 = DFTK.transfer_blochwave(e1, basis, basis_ref)\n", + "res_schur = e1 + Mres;" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "## Error estimates" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We start with different estimations of the forces:\n", + "- Force from the reference solution" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "f_ref = compute_forces(scfres_ref)\n", + "forces = Dict(\"F(P_*)\" => f_ref)\n", + "relerror = Dict(\"F(P_*)\" => 0.0)\n", + "compute_relerror(f) = norm(f - f_ref) / norm(f_ref);" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "- Force from the variational solution and relative error without\n", + " any post-processing:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "f = compute_forces(scfres)\n", + "forces[\"F(P)\"] = f\n", + "relerror[\"F(P)\"] = compute_relerror(f);" + ], + "metadata": {}, + "execution_count": 15 + }, + { + "cell_type": "markdown", + "source": [ + "We then try to improve $F(P)$ using the first order linearization:\n", + "\n", + "$$\n", + "F(P) = F(P_*) + {\\rm d}F(P)·(P-P_*).\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To this end, we use the `ForwardDiff.jl` package to compute ${\\rm d}F(P)$\n", + "using automatic differentiation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function df(basis, occupation, ψ, δψ, ρ)\n", + " δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)\n", + " ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)\n", + "end;" + ], + "metadata": {}, + "execution_count": 16 + }, + { + "cell_type": "markdown", + "source": [ + "- Computation of the forces by a linearization argument if we have access to\n", + " the actual error $P-P_*$. Usually this is of course not the case, but this\n", + " is the \"best\" improvement we can hope for with a linearisation, so we are\n", + " aiming for this precision." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)\n", + "forces[\"F(P) - df(P)⋅(P-P_*)\"] = f - df_err\n", + "relerror[\"F(P) - df(P)⋅(P-P_*)\"] = compute_relerror(f - df_err);" + ], + "metadata": {}, + "execution_count": 17 + }, + { + "cell_type": "markdown", + "source": [ + "- Computation of the forces by a linearization argument when replacing the\n", + " error $P-P_*$ by the modified residual $R_{\\rm Schur}(P)$. The latter\n", + " quantity is computable in practice." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "df_schur = df(basis_ref, occ, ψr, res_schur, ρr)\n", + "forces[\"F(P) - df(P)⋅Rschur(P)\"] = f - df_schur\n", + "relerror[\"F(P) - df(P)⋅Rschur(P)\"] = compute_relerror(f - df_schur);" + ], + "metadata": {}, + "execution_count": 18 + }, + { + "cell_type": "markdown", + "source": [ + "Summary of all forces on the first atom (Ti)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " F(P_*) = [1.47896, -1.25370, 0.81009] (rel. error: 0.00000)\n", + " F(P) = [1.13543, -1.01525, 0.40015] (rel. error: 0.20483)\n", + " F(P) - df(P)⋅Rschur(P) = [1.29130, -1.10186, 0.69056] (rel. error: 0.07830)\n", + " F(P) - df(P)⋅(P-P_*) = [1.50901, -1.28631, 0.86145] (rel. error: 0.08072)\n" + ] + } + ], + "cell_type": "code", + "source": [ + "for (key, value) in pairs(forces)\n", + " @printf(\"%30s = [%7.5f, %7.5f, %7.5f] (rel. error: %7.5f)\\n\",\n", + " key, (value[1])..., relerror[key])\n", + "end" + ], + "metadata": {}, + "execution_count": 19 + }, + { + "cell_type": "markdown", + "source": [ + "Notice how close the computable expression $F(P) - {\\rm d}F(P)⋅R_{\\rm Schur}(P)$\n", + "is to the best linearization ansatz $F(P) - {\\rm d}F(P)⋅(P-P_*)$." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/error_estimates_forces/index.html b/v0.6.16/examples/error_estimates_forces/index.html new file mode 100644 index 0000000000..7a4601b8e2 --- /dev/null +++ b/v0.6.16/examples/error_estimates_forces/index.html @@ -0,0 +1,113 @@ + +Practical error bounds for the forces · DFTK.jl

    Practical error bounds for the forces

    This is a simple example showing how to compute error estimates for the forces on a ${\rm TiO}_2$ molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.

    The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.

    using DFTK
    +using Printf
    +using LinearAlgebra
    +using ForwardDiff
    +using LinearMaps
    +using IterativeSolvers

    Setup

    We setup manually the ${\rm TiO}_2$ configuration from Materials Project.

    Ti = ElementPsp(:Ti; psp=load_psp("hgh/lda/ti-q4.hgh"))
    +O  = ElementPsp(:O; psp=load_psp("hgh/lda/o-q6.hgh"))
    +atoms     = [Ti, Ti, O, O, O, O]
    +positions = [[0.5,     0.5,     0.5],  # Ti
    +             [0.0,     0.0,     0.0],  # Ti
    +             [0.19542, 0.80458, 0.5],  # O
    +             [0.80458, 0.19542, 0.5],  # O
    +             [0.30458, 0.30458, 0.0],  # O
    +             [0.69542, 0.69542, 0.0]]  # O
    +lattice   = [[8.79341  0.0      0.0];
    +             [0.0      8.79341  0.0];
    +             [0.0      0.0      5.61098]];

    We apply a small displacement to one of the $\rm Ti$ atoms to get nonzero forces.

    positions[1] .+= [-0.022, 0.028, 0.035]
    3-element Vector{Float64}:
    + 0.478
    + 0.528
    + 0.535

    We build a model with one $k$-point only, not too high Ecut_ref and small tolerance to limit computational time. These parameters can be increased for more precise results.

    model = model_LDA(lattice, atoms, positions)
    +kgrid = [1, 1, 1]
    +Ecut_ref = 35
    +basis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)
    +tol = 1e-5;

    Computations

    We compute the reference solution $P_*$ from which we will compute the references forces.

    scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)
    +ψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;

    We compute a variational approximation of the reference solution with smaller Ecut. ψr, ρr and Er are the quantities computed with Ecut and then extended to the reference grid.

    Choice of convergence parameters

    Be careful to choose Ecut not too close to Ecut_ref. Note also that the current choice Ecut_ref = 35 is such that the reference solution is not converged and Ecut = 15 is such that the asymptotic regime (crucial to validate the approach) is barely established.

    Ecut = 15
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +scfres = self_consistent_field(basis; tol, callback=identity)
    +ψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)
    +ρr = compute_density(basis_ref, ψr, scfres.occupation)
    +Er, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);

    We then compute several quantities that we need to evaluate the error bounds.

    • Compute the residual $R(P)$, and remove the virtual orbitals, as required in src/scf/newton.jl.
    res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)
    +res, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)
    +ψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;
    • Compute the error $P-P_*$ on the associated orbitals $ϕ-ψ$ after aligning them: this is done by solving $\min |ϕ - ψU|$ for $U$ unitary matrix of size $N×N$ ($N$ being the number of electrons) whose solution is $U = S(S^*S)^{-1/2}$ where $S$ is the overlap matrix $ψ^*ϕ$.
    function compute_error(basis, ϕ, ψ)
    +    map(zip(ϕ, ψ)) do (ϕk, ψk)
    +        S = ψk'ϕk
    +        U = S*(S'S)^(-1/2)
    +        ϕk - ψk*U
    +    end
    +end
    +err = compute_error(basis_ref, ψr, ψ_ref);
    • Compute ${\boldsymbol M}^{-1}R(P)$ with ${\boldsymbol M}^{-1}$ defined in [CDKL2021]:
    P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]
    +map(zip(P, ψr)) do (Pk, ψk)
    +    DFTK.precondprep!(Pk, ψk)
    +end
    +function apply_M(φk, Pk, δφnk, n)
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +    δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +    δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +end
    +function apply_inv_M(φk, Pk, δφnk, n)
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +    op(x) = apply_M(φk, Pk, x, n)
    +    function f_ldiv!(x, y)
    +        x .= DFTK.proj_tangent_kpt(y, φk)
    +        x ./= (Pk.mean_kin[n] .+ Pk.kin)
    +        DFTK.proj_tangent_kpt!(x, φk)
    +    end
    +    J = LinearMap{eltype(φk)}(op, size(δφnk, 1))
    +    δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),
    +              verbose=false, reltol=0, abstol=1e-15)
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +end
    +function apply_metric(φ, P, δφ, A::Function)
    +    map(enumerate(δφ)) do (ik, δφk)
    +        Aδφk = similar(δφk)
    +        φk = φ[ik]
    +        for n = 1:size(δφk,2)
    +            Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)
    +        end
    +        Aδφk
    +    end
    +end
    +Mres = apply_metric(ψr, P, res, apply_inv_M);

    We can now compute the modified residual $R_{\rm Schur}(P)$ using a Schur complement to approximate the error on low-frequencies[CDKL2021]:

    \[\begin{bmatrix} +(\boldsymbol Ω + \boldsymbol K)_{11} & (\boldsymbol Ω + \boldsymbol K)_{12} \\ +0 & {\boldsymbol M}_{22} +\end{bmatrix} +\begin{bmatrix} +P_{1} - P_{*1} \\ P_{2}-P_{*2} +\end{bmatrix} = +\begin{bmatrix} +R_{1} \\ R_{2} +\end{bmatrix}.\]

    • Compute the projection of the residual onto the high and low frequencies:
    resLF = DFTK.transfer_blochwave(res, basis_ref, basis)
    +resHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);
    • Compute ${\boldsymbol M}^{-1}_{22}R_2(P)$:
    e2 = apply_metric(ψr, P, resHF, apply_inv_M);
    • Compute the right hand side of the Schur system:
    # Rayleigh coefficients needed for `apply_Ω`
    +Λ = map(enumerate(ψr)) do (ik, ψk)
    +    Hk = hamr.blocks[ik]
    +    Hψk = Hk * ψk
    +    ψk'Hψk
    +end
    +ΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)
    +ΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)
    +rhs = resLF - ΩpKe2;
    • Solve the Schur system to compute $R_{\rm Schur}(P)$: this is the most costly step, but inverting $\boldsymbol{Ω} + \boldsymbol{K}$ on the small space has the same cost than the full SCF cycle on the small grid.
    (; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)
    +e1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ
    +e1 = DFTK.transfer_blochwave(e1, basis, basis_ref)
    +res_schur = e1 + Mres;

    Error estimates

    We start with different estimations of the forces:

    • Force from the reference solution
    f_ref = compute_forces(scfres_ref)
    +forces   = Dict("F(P_*)" => f_ref)
    +relerror = Dict("F(P_*)" => 0.0)
    +compute_relerror(f) = norm(f - f_ref) / norm(f_ref);
    • Force from the variational solution and relative error without any post-processing:
    f = compute_forces(scfres)
    +forces["F(P)"]   = f
    +relerror["F(P)"] = compute_relerror(f);

    We then try to improve $F(P)$ using the first order linearization:

    \[F(P) = F(P_*) + {\rm d}F(P)·(P-P_*).\]

    To this end, we use the ForwardDiff.jl package to compute ${\rm d}F(P)$ using automatic differentiation.

    function df(basis, occupation, ψ, δψ, ρ)
    +    δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)
    +    ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)
    +end;
    • Computation of the forces by a linearization argument if we have access to the actual error $P-P_*$. Usually this is of course not the case, but this is the "best" improvement we can hope for with a linearisation, so we are aiming for this precision.
    df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)
    +forces["F(P) - df(P)⋅(P-P_*)"]   = f - df_err
    +relerror["F(P) - df(P)⋅(P-P_*)"] = compute_relerror(f - df_err);
    • Computation of the forces by a linearization argument when replacing the error $P-P_*$ by the modified residual $R_{\rm Schur}(P)$. The latter quantity is computable in practice.
    df_schur = df(basis_ref, occ, ψr, res_schur, ρr)
    +forces["F(P) - df(P)⋅Rschur(P)"]   = f - df_schur
    +relerror["F(P) - df(P)⋅Rschur(P)"] = compute_relerror(f - df_schur);

    Summary of all forces on the first atom (Ti)

    for (key, value) in pairs(forces)
    +    @printf("%30s = [%7.5f, %7.5f, %7.5f]   (rel. error: %7.5f)\n",
    +            key, (value[1])..., relerror[key])
    +end
                            F(P_*) = [1.47900, -1.25379, 0.81011]   (rel. error: 0.00000)
    +                          F(P) = [1.13543, -1.01525, 0.40016]   (rel. error: 0.20484)
    +        F(P) - df(P)⋅Rschur(P) = [1.29128, -1.10183, 0.69055]   (rel. error: 0.07831)
    +          F(P) - df(P)⋅(P-P_*) = [1.50906, -1.28638, 0.86147]   (rel. error: 0.08072)

    Notice how close the computable expression $F(P) - {\rm d}F(P)⋅R_{\rm Schur}(P)$ is to the best linearization ansatz $F(P) - {\rm d}F(P)⋅(P-P_*)$.

    • CDKL2021E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv
    diff --git a/v0.6.16/examples/forwarddiff.ipynb b/v0.6.16/examples/forwarddiff.ipynb new file mode 100644 index 0000000000..e4bfc51205 --- /dev/null +++ b/v0.6.16/examples/forwarddiff.ipynb @@ -0,0 +1,176 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Polarizability using automatic differentiation\n", + "\n", + "Simple example for computing properties using (forward-mode)\n", + "automatic differentiation.\n", + "For a more classical approach and more details about computing polarizabilities,\n", + "see Polarizability by linear response." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "using ForwardDiff\n", + "\n", + "# Construct PlaneWaveBasis given a particular electric field strength\n", + "# Again we take the example of a Helium atom.\n", + "function make_basis(ε::T; a=10., Ecut=30) where {T}\n", + " lattice=T(a) * I(3) # lattice is a cube of $a$ Bohrs\n", + " # Helium at the center of the box\n", + " atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n", + " positions = [[1/2, 1/2, 1/2]]\n", + "\n", + " model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];\n", + " extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n", + " symmetries=false)\n", + " PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1]) # No k-point sampling on isolated system\n", + "end\n", + "\n", + "# dipole moment of a given density (assuming the current geometry)\n", + "function dipole(basis, ρ)\n", + " @assert isdiag(basis.model.lattice)\n", + " a = basis.model.lattice[1, 1]\n", + " rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]\n", + " sum(rr .* ρ) * basis.dvol\n", + "end\n", + "\n", + "# Function to compute the dipole for a given field strength\n", + "function compute_dipole(ε; tol=1e-8, kwargs...)\n", + " scfres = self_consistent_field(make_basis(ε; kwargs...); tol)\n", + " dipole(scfres.basis, scfres.ρ)\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "With this in place we can compute the polarizability from finite differences\n", + "(just like in the previous example):" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770797255293 -0.53 8.0 185ms\n", + " 2 -2.772140796864 -2.87 -1.31 1.0 104ms\n", + " 3 -2.772170392297 -4.53 -2.55 1.0 123ms\n", + " 4 -2.772170690995 -6.52 -3.51 1.0 146ms\n", + " 5 -2.772170721212 -7.52 -3.91 2.0 123ms\n", + " 6 -2.772170722973 -8.75 -5.46 1.0 110ms\n", + " 7 -2.772170723014 -10.39 -5.46 3.0 156ms\n", + " 8 -2.772170723015 -11.82 -6.36 1.0 114ms\n", + " 9 -2.772170723015 -13.94 -6.80 1.0 130ms\n", + " 10 -2.772170723015 -14.88 -7.66 1.0 116ms\n", + " 11 -2.772170723015 -14.18 -7.82 2.0 148ms\n", + " 12 -2.772170723015 + -14.40 -8.62 1.0 126ms\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770718018808 -0.53 9.0 185ms\n", + " 2 -2.772054628905 -2.87 -1.31 1.0 104ms\n", + " 3 -2.772083162427 -4.54 -2.60 1.0 105ms\n", + " 4 -2.772083401861 -6.62 -3.78 1.0 120ms\n", + " 5 -2.772083417268 -7.81 -4.18 2.0 123ms\n", + " 6 -2.772083417795 -9.28 -5.57 1.0 123ms\n", + " 7 -2.772083417810 -10.84 -5.66 2.0 127ms\n", + " 8 -2.772083417811 -12.20 -6.68 1.0 116ms\n", + " 9 -2.772083417811 -13.76 -7.45 2.0 153ms\n", + " 10 -2.772083417811 + -15.35 -7.56 1.0 123ms\n", + " 11 -2.772083417811 + -14.51 -8.32 1.0 125ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "1.773557909182737" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "polarizability_fd = let\n", + " ε = 0.01\n", + " (compute_dipole(ε) - compute_dipole(0.0)) / ε\n", + "end" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We do the same thing using automatic differentiation. Under the hood this uses\n", + "custom rules to implicitly differentiate through the self-consistent\n", + "field fixed-point problem." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770767735584 -0.52 9.0 209ms\n", + " 2 -2.772060329011 -2.89 -1.32 1.0 105ms\n", + " 3 -2.772083005592 -4.64 -2.43 1.0 106ms\n", + " 4 -2.772083332396 -6.49 -3.12 1.0 148ms\n", + " 5 -2.772083417199 -7.07 -4.10 2.0 124ms\n", + " 6 -2.772083417698 -9.30 -4.63 1.0 111ms\n", + " 7 -2.772083417806 -9.96 -5.72 1.0 131ms\n", + " 8 -2.772083417810 -11.41 -5.90 2.0 127ms\n", + " 9 -2.772083417811 -12.54 -7.17 1.0 134ms\n", + " 10 -2.772083417811 + -14.57 -7.57 2.0 137ms\n", + " 11 -2.772083417811 -15.35 -8.11 2.0 140ms\n", + "\n", + "Polarizability via ForwardDiff: 1.772534966639569\n", + "Polarizability via finite difference: 1.773557909182737\n" + ] + } + ], + "cell_type": "code", + "source": [ + "polarizability = ForwardDiff.derivative(compute_dipole, 0.0)\n", + "println()\n", + "println(\"Polarizability via ForwardDiff: $polarizability\")\n", + "println(\"Polarizability via finite difference: $polarizability_fd\")" + ], + "metadata": {}, + "execution_count": 3 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/forwarddiff/index.html b/v0.6.16/examples/forwarddiff/index.html new file mode 100644 index 0000000000..02dc186549 --- /dev/null +++ b/v0.6.16/examples/forwarddiff/index.html @@ -0,0 +1,52 @@ + +Polarizability using automatic differentiation · DFTK.jl

    Polarizability using automatic differentiation

    Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.

    using DFTK
    +using LinearAlgebra
    +using ForwardDiff
    +
    +# Construct PlaneWaveBasis given a particular electric field strength
    +# Again we take the example of a Helium atom.
    +function make_basis(ε::T; a=10., Ecut=30) where {T}
    +    lattice=T(a) * I(3)  # lattice is a cube of ``a`` Bohrs
    +    # Helium at the center of the box
    +    atoms     = [ElementPsp(:He; psp=load_psp("hgh/lda/He-q2"))]
    +    positions = [[1/2, 1/2, 1/2]]
    +
    +    model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];
    +                      extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],
    +                      symmetries=false)
    +    PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])  # No k-point sampling on isolated system
    +end
    +
    +# dipole moment of a given density (assuming the current geometry)
    +function dipole(basis, ρ)
    +    @assert isdiag(basis.model.lattice)
    +    a  = basis.model.lattice[1, 1]
    +    rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]
    +    sum(rr .* ρ) * basis.dvol
    +end
    +
    +# Function to compute the dipole for a given field strength
    +function compute_dipole(ε; tol=1e-8, kwargs...)
    +    scfres = self_consistent_field(make_basis(ε; kwargs...); tol)
    +    dipole(scfres.basis, scfres.ρ)
    +end;

    With this in place we can compute the polarizability from finite differences (just like in the previous example):

    polarizability_fd = let
    +    ε = 0.01
    +    (compute_dipole(ε) - compute_dipole(0.0)) / ε
    +end
    1.7735580142344005

    We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.

    polarizability = ForwardDiff.derivative(compute_dipole, 0.0)
    +println()
    +println("Polarizability via ForwardDiff:       $polarizability")
    +println("Polarizability via finite difference: $polarizability_fd")
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -2.770804316525                   -0.52    9.0    227ms
    +  2   -2.772062064980       -2.90       -1.32    1.0    105ms
    +  3   -2.772083007008       -4.68       -2.43    1.0    106ms
    +  4   -2.772083342246       -6.47       -3.14    1.0    159ms
    +  5   -2.772083417690       -7.12       -4.42    2.0    124ms
    +  6   -2.772083417768      -10.11       -4.64    1.0    140ms
    +  7   -2.772083417808      -10.40       -5.68    1.0    113ms
    +  8   -2.772083417811      -11.66       -6.77    2.0    135ms
    +  9   -2.772083417811      -14.15       -6.69    2.0    189ms
    + 10   -2.772083417811   +  -14.57       -8.05    1.0    123ms
    +
    +Polarizability via ForwardDiff:       1.7725349409391895
    +Polarizability via finite difference: 1.7735580142344005
    diff --git a/v0.6.16/examples/gaas_surface.ipynb b/v0.6.16/examples/gaas_surface.ipynb new file mode 100644 index 0000000000..6a808454fa --- /dev/null +++ b/v0.6.16/examples/gaas_surface.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Modelling a gallium arsenide surface\n", + "\n", + "This example shows how to use the\n", + "[atomistic simulation environment](https://wiki.fysik.dtu.dk/ase/index.html),\n", + "or ASE for short,\n", + "to set up and run a particular calculation of a gallium arsenide surface.\n", + "ASE is a Python package to simplify the process of setting up,\n", + "running and analysing results from atomistic simulations across different simulation codes.\n", + "By means of [ASEconvert](https://github.com/mfherbst/ASEconvert.jl) it is seamlessly\n", + "integrated with the AtomsBase ecosystem and thus available to DFTK via our own\n", + "AtomsBase integration.\n", + "\n", + "In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Parameters of the calculation. Since this surface is far from easy to converge,\n", + "we made the problem simpler by choosing a smaller `Ecut` and smaller values\n", + "for `n_GaAs` and `n_vacuum`.\n", + "More interesting settings are `Ecut = 15` and `n_GaAs = n_vacuum = 20`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "miller = (1, 1, 0) # Surface Miller indices\n", + "n_GaAs = 2 # Number of GaAs layers\n", + "n_vacuum = 4 # Number of vacuum layers\n", + "Ecut = 5 # Hartree\n", + "kgrid = (4, 4, 1); # Monkhorst-Pack mesh" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Use ASE to build the structure:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using ASEconvert\n", + "\n", + "a = 5.6537 # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)\n", + "gaas = ase.build.bulk(\"GaAs\", \"zincblende\"; a)\n", + "surface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Get the amount of vacuum in Ångström we need to add" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum\n", + "surface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Write an image of the surface and embed it as a nice illustration:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Python: None" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "ase.io.write(\"surface.png\", surface * pytuple((3, 3, 1)), rotation=\"-90x, 30y, -75z\")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Use the `pyconvert` function from `PythonCall` to convert to an AtomsBase-compatible system.\n", + "These two functions not only support importing ASE atoms into DFTK,\n", + "but a few more third-party data structures as well.\n", + "Typically the imported `atoms` use a bare Coulomb potential,\n", + "such that appropriate pseudopotentials need to be attached in a post-step:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(As₂Ga₂, periodic = TTT):\n bounding_box : [ 3.99777 0 0;\n 0 3.99777 0;\n 0 0 21.2014]u\"Å\"\n\n Atom(Ga, [ 0, 0, 8.48055]u\"Å\")\n Atom(As, [ 3.99777, 1.99888, 9.89397]u\"Å\")\n Atom(Ga, [ 1.99888, 1.99888, 11.3074]u\"Å\")\n Atom(As, [ 1.99888, 6.96512e-16, 12.7208]u\"Å\")\n\n .---------. \n /| | \n * | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | As | \n | | Ga | \n | | | \n | | As \n | | | \n | | | \n Ga| | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | .---------. \n |/ / \n *---------* \n" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "system = attach_psp(pyconvert(AbstractSystem, surface);\n", + " Ga=\"hgh/pbe/ga-q3.hgh\",\n", + " As=\"hgh/pbe/as-q5.hgh\")" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We model this surface with (quite large a) temperature of 0.01 Hartree\n", + "to ease convergence. Try lowering the SCF convergence tolerance (`tol`)\n", + "or the `temperature` or try `mixing=KerkerMixing()`\n", + "to see the full challenge of this system." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -16.58942050897 -0.58 5.4 1.07s\n", + " 2 -16.72537142606 -0.87 -1.01 1.0 281ms\n", + " 3 -16.73065368678 -2.28 -1.57 2.6 345ms\n", + " 4 -16.73125655161 -3.22 -2.16 1.0 246ms\n", + " 5 -16.73132470042 -4.17 -2.59 1.7 282ms\n", + " 6 -16.73133415853 -5.02 -2.87 2.0 290ms\n", + " 7 -16.73108855298 + -3.61 -2.61 2.0 318ms\n", + " 8 -16.73110175489 -4.88 -2.59 2.3 294ms\n", + " 9 -16.73112402182 -4.65 -2.63 2.0 288ms\n", + " 10 -16.73130059755 -3.75 -2.97 1.1 231ms\n", + " 11 -16.73133474425 -4.47 -3.36 1.0 231ms\n", + " 12 -16.73133873776 -5.40 -3.67 1.6 252ms\n", + " 13 -16.73133989556 -5.94 -4.00 1.9 276ms\n", + " 14 -16.73134019682 -6.52 -4.60 1.1 231ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],\n", + " temperature=0.001, smearing=DFTK.Smearing.Gaussian())\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "\n", + "scfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 5.8594121 \n AtomicLocal -105.6102768\n AtomicNonlocal 2.3494839 \n Ewald 35.5044300\n PspCorrection 0.2016043 \n Hartree 49.5616785\n Xc -4.5976688\n Entropy -0.0000035\n\n total -16.731340196823" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 7 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/gaas_surface/index.html b/v0.6.16/examples/gaas_surface/index.html new file mode 100644 index 0000000000..9893e4cac1 --- /dev/null +++ b/v0.6.16/examples/gaas_surface/index.html @@ -0,0 +1,80 @@ + +Modelling a gallium arsenide surface · DFTK.jl

    Modelling a gallium arsenide surface

    This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.

    In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.

    Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.

    miller = (1, 1, 0)   # Surface Miller indices
    +n_GaAs = 2           # Number of GaAs layers
    +n_vacuum = 4         # Number of vacuum layers
    +Ecut = 5             # Hartree
    +kgrid = (4, 4, 1);   # Monkhorst-Pack mesh

    Use ASE to build the structure:

    using ASEconvert
    +
    +a = 5.6537  # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)
    +gaas = ase.build.bulk("GaAs", "zincblende"; a)
    +surface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);

    Get the amount of vacuum in Ångström we need to add

    d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum
    +surface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);

    Write an image of the surface and embed it as a nice illustration:

    ase.io.write("surface.png", surface * pytuple((3, 3, 1)), rotation="-90x, 30y, -75z")
    Python: None

    Use the pyconvert function from PythonCall to convert to an AtomsBase-compatible system. These two functions not only support importing ASE atoms into DFTK, but a few more third-party data structures as well. Typically the imported atoms use a bare Coulomb potential, such that appropriate pseudopotentials need to be attached in a post-step:

    using DFTK
    +system = attach_psp(pyconvert(AbstractSystem, surface);
    +                    Ga="hgh/pbe/ga-q3.hgh",
    +                    As="hgh/pbe/as-q5.hgh")
    FlexibleSystem(As₂Ga₂, periodic = TTT):
    +    bounding_box      : [ 3.99777        0        0;
    +                                0  3.99777        0;
    +                                0        0  21.2014]u"Å"
    +
    +    Atom(Ga, [       0,        0,  8.48055]u"Å")
    +    Atom(As, [ 3.99777,  1.99888,  9.89397]u"Å")
    +    Atom(Ga, [ 1.99888,  1.99888,  11.3074]u"Å")
    +    Atom(As, [ 1.99888, 6.96512e-16,  12.7208]u"Å")
    +
    +      .---------.  
    +     /|         |  
    +    * |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |  As     |  
    +    | |   Ga    |  
    +    | |         |  
    +    | |        As  
    +    | |         |  
    +    | |         |  
    +    Ga|         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | .---------.  
    +    |/         /   
    +    *---------*    
    +

    We model this surface with (quite large a) temperature of 0.01 Hartree to ease convergence. Try lowering the SCF convergence tolerance (tol) or the temperature or try mixing=KerkerMixing() to see the full challenge of this system.

    model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],
    +                  temperature=0.001, smearing=DFTK.Smearing.Gaussian())
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +
    +scfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -16.58952433573                   -0.58    5.3    581ms
    +  2   -16.72531627356       -0.87       -1.01    1.0    246ms
    +  3   -16.73064327205       -2.27       -1.57    2.4    341ms
    +  4   -16.73125774435       -3.21       -2.16    1.0    276ms
    +  5   -16.73132786518       -4.15       -2.59    1.9    307ms
    +  6   -16.73133574816       -5.10       -2.90    1.9    271ms
    +  7   -16.73109253353   +   -3.61       -2.62    2.0    362ms
    +  8   -16.73116605379       -4.13       -2.66    2.2    300ms
    +  9   -16.73124622024       -4.10       -2.80    1.8    268ms
    + 10   -16.73133340065       -4.06       -3.33    1.1    230ms
    + 11   -16.73134012230       -5.17       -3.96    1.7    335ms
    + 12   -16.73134018349       -7.21       -4.32    2.0    301ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             5.8594379 
    +    AtomicLocal         -105.6108017
    +    AtomicNonlocal      2.3494947 
    +    Ewald               35.5044300
    +    PspCorrection       0.2016043 
    +    Hartree             49.5621802
    +    Xc                  -4.5976821
    +    Entropy             -0.0000035
    +
    +    total               -16.731340183486
    diff --git a/v0.6.16/examples/geometry_optimization.ipynb b/v0.6.16/examples/geometry_optimization.ipynb new file mode 100644 index 0000000000..a89d234085 --- /dev/null +++ b/v0.6.16/examples/geometry_optimization.ipynb @@ -0,0 +1,191 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Geometry optimization\n", + "\n", + "We use the DFTK and Optim packages in this example to find the minimal-energy\n", + "bond length of the $H_2$ molecule. We setup $H_2$ in an\n", + "LDA model just like in the Tutorial for silicon." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Optim\n", + "using LinearAlgebra\n", + "using Printf\n", + "\n", + "kgrid = [1, 1, 1] # k-point grid\n", + "Ecut = 5 # kinetic energy cutoff in Hartree\n", + "tol = 1e-8 # tolerance for the optimization routine\n", + "a = 10 # lattice constant in Bohr\n", + "lattice = a * I(3)\n", + "H = ElementPsp(:H; psp=load_psp(\"hgh/lda/h-q1\"));\n", + "atoms = [H, H];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "We define a Bloch wave and a density to be used as global variables so that we\n", + "can transfer the solution from one iteration to another and therefore reduce\n", + "the optimization time." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ψ = nothing\n", + "ρ = nothing" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "First, we create a function that computes the solution associated to the\n", + "position $x ∈ ℝ^6$ of the atoms in reduced coordinates\n", + "(cf. Reduced and cartesian coordinates for more\n", + "details on the coordinates system).\n", + "They are stored as a vector: `x[1:3]` represents the position of the\n", + "first atom and `x[4:6]` the position of the second.\n", + "We also update `ψ` and `ρ` for the next iteration." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function compute_scfres(x)\n", + " model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])\n", + " basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + " global ψ, ρ\n", + " if isnothing(ρ)\n", + " ρ = guess_density(basis)\n", + " end\n", + " is_converged = ScfConvergenceForce(tol / 10)\n", + " scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n", + " ψ = scfres.ψ\n", + " ρ = scfres.ρ\n", + " scfres\n", + "end;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Then, we create the function we want to optimize: `fg!` is used to update the\n", + "value of the objective function `F`, namely the energy, and its gradient `G`,\n", + "here computed with the forces (which are, by definition, the negative gradient\n", + "of the energy)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function fg!(F, G, x)\n", + " scfres = compute_scfres(x)\n", + " if !isnothing(G)\n", + " grad = compute_forces(scfres)\n", + " G .= -[grad[1]; grad[2]]\n", + " end\n", + " scfres.energies.total\n", + "end;" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can optimize on the 6 parameters `x = [x1, y1, z1, x2, y2, z2]` in\n", + "reduced coordinates, using `LBFGS()`, the default minimization algorithm\n", + "in Optim. We start from `x0`, which is a first guess for the coordinates. By\n", + "default, `optimize` traces the output of the optimization algorithm during the\n", + "iterations. Once we have the minimizer `xmin`, we compute the bond length in\n", + "Cartesian coordinates." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Iter Function value Gradient norm \n", + " 0 -1.061651e+00 6.219313e-01\n", + " * time: 5.1021575927734375e-5\n", + " 1 -1.064073e+00 2.919816e-01\n", + " * time: 2.4223978519439697\n", + " 2 -1.066008e+00 4.821047e-02\n", + " * time: 3.1187849044799805\n", + " 3 -1.066049e+00 4.314888e-04\n", + " * time: 3.545814037322998\n", + " 4 -1.066049e+00 6.954745e-09\n", + " * time: 3.8092920780181885\n", + "\n", + "Optimal bond length for Ecut=5.00: 1.556 Bohr\n" + ] + } + ], + "cell_type": "code", + "source": [ + "x0 = vcat(lattice \\ [0., 0., 0.], lattice \\ [1.4, 0., 0.])\n", + "xres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),\n", + " Optim.Options(; show_trace=true, f_tol=tol))\n", + "xmin = Optim.minimizer(xres)\n", + "dmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])\n", + "@printf \"\\nOptimal bond length for Ecut=%.2f: %.3f Bohr\\n\" Ecut dmin" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We used here very rough parameters to generate the example and\n", + "setting `Ecut` to 10 Ha yields a bond length of 1.523 Bohr,\n", + "which [agrees with ABINIT](https://docs.abinit.org/tutorial/base1/).\n", + "\n", + "!!! note \"Degrees of freedom\"\n", + " We used here a very general setting where we optimized on the 6 variables\n", + " representing the position of the 2 atoms and it can be easily extended\n", + " to molecules with more atoms (such as $H_2O$). In the particular case\n", + " of $H_2$, we could use only the internal degree of freedom which, in\n", + " this case, is just the bond length." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/geometry_optimization/index.html b/v0.6.16/examples/geometry_optimization/index.html new file mode 100644 index 0000000000..0683ac7351 --- /dev/null +++ b/v0.6.16/examples/geometry_optimization/index.html @@ -0,0 +1,50 @@ + +Geometry optimization · DFTK.jl

    Geometry optimization

    We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the $H_2$ molecule. We setup $H_2$ in an LDA model just like in the Tutorial for silicon.

    using DFTK
    +using Optim
    +using LinearAlgebra
    +using Printf
    +
    +kgrid = [1, 1, 1]       # k-point grid
    +Ecut = 5                # kinetic energy cutoff in Hartree
    +tol = 1e-8              # tolerance for the optimization routine
    +a = 10                  # lattice constant in Bohr
    +lattice = a * I(3)
    +H = ElementPsp(:H; psp=load_psp("hgh/lda/h-q1"));
    +atoms = [H, H];

    We define a Bloch wave and a density to be used as global variables so that we can transfer the solution from one iteration to another and therefore reduce the optimization time.

    ψ = nothing
    +ρ = nothing

    First, we create a function that computes the solution associated to the position $x ∈ ℝ^6$ of the atoms in reduced coordinates (cf. Reduced and cartesian coordinates for more details on the coordinates system). They are stored as a vector: x[1:3] represents the position of the first atom and x[4:6] the position of the second. We also update ψ and ρ for the next iteration.

    function compute_scfres(x)
    +    model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])
    +    basis = PlaneWaveBasis(model; Ecut, kgrid)
    +    global ψ, ρ
    +    if isnothing(ρ)
    +        ρ = guess_density(basis)
    +    end
    +    is_converged = ScfConvergenceForce(tol / 10)
    +    scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)
    +    ψ = scfres.ψ
    +    ρ = scfres.ρ
    +    scfres
    +end;

    Then, we create the function we want to optimize: fg! is used to update the value of the objective function F, namely the energy, and its gradient G, here computed with the forces (which are, by definition, the negative gradient of the energy).

    function fg!(F, G, x)
    +    scfres = compute_scfres(x)
    +    if !isnothing(G)
    +        grad = compute_forces(scfres)
    +        G .= -[grad[1]; grad[2]]
    +    end
    +    scfres.energies.total
    +end;

    Now, we can optimize on the 6 parameters x = [x1, y1, z1, x2, y2, z2] in reduced coordinates, using LBFGS(), the default minimization algorithm in Optim. We start from x0, which is a first guess for the coordinates. By default, optimize traces the output of the optimization algorithm during the iterations. Once we have the minimizer xmin, we compute the bond length in Cartesian coordinates.

    x0 = vcat(lattice \ [0., 0., 0.], lattice \ [1.4, 0., 0.])
    +xres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),
    +                Optim.Options(; show_trace=true, f_tol=tol))
    +xmin = Optim.minimizer(xres)
    +dmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])
    +@printf "\nOptimal bond length for Ecut=%.2f: %.3f Bohr\n" Ecut dmin
    Iter     Function value   Gradient norm
    +     0    -1.061651e+00     6.219313e-01
    + * time: 4.9114227294921875e-5
    +     1    -1.064073e+00     2.919807e-01
    + * time: 0.8753349781036377
    +     2    -1.066008e+00     4.821015e-02
    + * time: 1.5400009155273438
    +     3    -1.066049e+00     4.314810e-04
    + * time: 1.9516150951385498
    +     4    -1.066049e+00     6.954611e-09
    + * time: 2.2222189903259277
    +
    +Optimal bond length for Ecut=5.00: 1.556 Bohr

    We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.

    Degrees of freedom

    We used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as $H_2O$). In the particular case of $H_2$, we could use only the internal degree of freedom which, in this case, is just the bond length.

    diff --git a/v0.6.16/examples/graphene.ipynb b/v0.6.16/examples/graphene.ipynb new file mode 100644 index 0000000000..6c9be534cc --- /dev/null +++ b/v0.6.16/examples/graphene.ipynb @@ -0,0 +1,379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Graphene band structure" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This example plots the band structure of graphene, a 2D material. 2D band\n", + "structures are not supported natively (yet), so we manually build a custom\n", + "path in reciprocal space." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -11.15665711268 -0.60 6.1 209ms\n", + " 2 -11.16020835533 -2.45 -1.30 1.0 146ms\n", + " 3 -11.16039906218 -3.72 -2.33 2.0 140ms\n", + " 4 -11.16041630955 -4.76 -3.23 2.4 174ms\n", + " 5 -11.16041704092 -6.14 -3.43 2.3 150ms\n", + " 6 -11.16041704898 -8.09 -3.58 1.1 117ms\n", + " 7 -11.16041705062 -8.78 -3.86 1.0 126ms\n", + " 8 -11.16041705114 -9.28 -4.25 1.0 112ms\n", + " 9 -11.16041705131 -9.78 -4.65 1.3 117ms\n", + " 10 -11.16041705139 -10.11 -4.92 1.4 127ms\n", + " 11 -11.16041705144 -10.33 -5.31 1.3 119ms\n", + " 12 -11.16041705145 -10.94 -5.75 1.9 154ms\n", + " 13 -11.16041705145 -11.61 -6.29 2.1 142ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=25}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "using LinearAlgebra\n", + "using Plots\n", + "\n", + "# Define the convergence parameters (these should be increased in production)\n", + "L = 20 # height of the simulation box\n", + "kgrid = [6, 6, 1]\n", + "Ecut = 15\n", + "temperature = 1e-3\n", + "\n", + "# Define the geometry and pseudopotential\n", + "a = 4.66 # lattice constant\n", + "a1 = a*[1/2,-sqrt(3)/2, 0]\n", + "a2 = a*[1/2, sqrt(3)/2, 0]\n", + "a3 = L*[0 , 0 , 1]\n", + "lattice = [a1 a2 a3]\n", + "C1 = [1/3,-1/3,0.0] # in reduced coordinates\n", + "C2 = -C1\n", + "positions = [C1, C2]\n", + "C = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\n", + "atoms = [C, C]\n", + "\n", + "# Run SCF\n", + "model = model_PBE(lattice, atoms, positions; temperature)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "scfres = self_consistent_field(basis)\n", + "\n", + "# Construct 2D path through Brillouin zone\n", + "kpath = irrfbz_path(model; dim=2, space_group_number=13) # graphene space group number\n", + "bands = compute_bands(scfres, kpath; kline_density=20)\n", + "plot_bandstructure(bands)" + ], + "metadata": {}, + "execution_count": 1 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/graphene/4ed4f9f8.svg b/v0.6.16/examples/graphene/4ed4f9f8.svg new file mode 100644 index 0000000000..f755648015 --- /dev/null +++ b/v0.6.16/examples/graphene/4ed4f9f8.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/graphene/index.html b/v0.6.16/examples/graphene/index.html new file mode 100644 index 0000000000..7114dbcd67 --- /dev/null +++ b/v0.6.16/examples/graphene/index.html @@ -0,0 +1,34 @@ + +Graphene band structure · DFTK.jl

    Graphene band structure

    This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.

    using DFTK
    +using Unitful
    +using UnitfulAtomic
    +using LinearAlgebra
    +using Plots
    +
    +# Define the convergence parameters (these should be increased in production)
    +L = 20  # height of the simulation box
    +kgrid = [6, 6, 1]
    +Ecut = 15
    +temperature = 1e-3
    +
    +# Define the geometry and pseudopotential
    +a = 4.66  # lattice constant
    +a1 = a*[1/2,-sqrt(3)/2, 0]
    +a2 = a*[1/2, sqrt(3)/2, 0]
    +a3 = L*[0  , 0        , 1]
    +lattice = [a1 a2 a3]
    +C1 = [1/3,-1/3,0.0]  # in reduced coordinates
    +C2 = -C1
    +positions = [C1, C2]
    +C = ElementPsp(:C; psp=load_psp("hgh/pbe/c-q4"))
    +atoms = [C, C]
    +
    +# Run SCF
    +model = model_PBE(lattice, atoms, positions; temperature)
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +scfres = self_consistent_field(basis)
    +
    +# Construct 2D path through Brillouin zone
    +kpath = irrfbz_path(model; dim=2, space_group_number=13)  # graphene space group number
    +bands = compute_bands(scfres, kpath; kline_density=20)
    +plot_bandstructure(bands)
    Example block output
    diff --git a/v0.6.16/examples/gross_pitaevskii.ipynb b/v0.6.16/examples/gross_pitaevskii.ipynb new file mode 100644 index 0000000000..12b8cf56a4 --- /dev/null +++ b/v0.6.16/examples/gross_pitaevskii.ipynb @@ -0,0 +1,594 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Gross-Pitaevskii equation in one dimension\n", + "In this example we will use DFTK to solve\n", + "the Gross-Pitaevskii equation, and use this opportunity to explore a few internals." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## The model\n", + "The [Gross-Pitaevskii equation](https://en.wikipedia.org/wiki/Gross%E2%80%93Pitaevskii_equation) (GPE)\n", + "is a simple non-linear equation used to model bosonic systems\n", + "in a mean-field approach. Denoting by $ψ$ the effective one-particle bosonic\n", + "wave function, the time-independent GPE reads in atomic units:\n", + "$$\n", + " H ψ = \\left(-\\frac12 Δ + V + 2 C |ψ|^2\\right) ψ = μ ψ \\qquad \\|ψ\\|_{L^2} = 1\n", + "$$\n", + "where $C$ provides the strength of the boson-boson coupling.\n", + "It's in particular a favorite model of applied mathematicians because it\n", + "has a structure simpler than but similar to that of DFT, and displays\n", + "interesting behavior (especially in higher dimensions with magnetic fields, see\n", + "Gross-Pitaevskii equation with external magnetic field)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We wish to model this equation in 1D using DFTK.\n", + "First we set up the lattice. For a 1D case we supply two zero lattice vectors," + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "a = 10\n", + "lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "which is special cased in DFTK to support 1D models.\n", + "\n", + "For the potential term `V` we pick a harmonic\n", + "potential. We use the function `ExternalFromReal` which uses\n", + "cartesian coordinates ( see Lattices and lattice vectors)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "pot(x) = (x - a/2)^2;" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We setup each energy term in sequence: kinetic, potential and nonlinear term.\n", + "For the non-linearity we use the `LocalNonlinearity(f)` term of DFTK, with f(ρ) = C ρ^α.\n", + "This object introduces an energy term $C ∫ ρ(r)^α dr$\n", + "to the total energy functional, thus a potential term $α C ρ^{α-1}$.\n", + "In our case we thus need the parameters" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "C = 1.0\n", + "α = 2;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "… and with this build the model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "\n", + "n_electrons = 1 # Increase this for fun\n", + "terms = [Kinetic(),\n", + " ExternalFromReal(r -> pot(r[1])),\n", + " LocalNonlinearity(ρ -> C * ρ^α),\n", + "]\n", + "model = Model(lattice; n_electrons, terms, spin_polarization=:spinless); # spinless electrons" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "We discretize using a moderate Ecut (For 1D values up to `5000` are completely fine)\n", + "and run a direct minimization algorithm:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Iter Function value Gradient norm \n", + " 0 1.725706e+02 1.536525e+02\n", + " * time: 0.00039696693420410156\n", + " 1 1.643794e+02 1.160068e+02\n", + " * time: 0.0016090869903564453\n", + " 2 1.205394e+02 1.245123e+02\n", + " * time: 0.0030710697174072266\n", + " 3 6.256005e+01 9.574454e+01\n", + " * time: 0.004704952239990234\n", + " 4 5.832934e+01 9.921380e+01\n", + " * time: 0.006162166595458984\n", + " 5 5.621839e+01 9.450821e+01\n", + " * time: 0.007411956787109375\n", + " 6 4.991797e+01 9.527425e+01\n", + " * time: 0.008661031723022461\n", + " 7 4.198505e+01 8.513936e+01\n", + " * time: 0.009898185729980469\n", + " 8 1.841515e+01 6.069325e+01\n", + " * time: 0.01117396354675293\n", + " 9 2.027270e+00 2.584985e+00\n", + " * time: 0.012436151504516602\n", + " 10 1.588590e+00 2.613425e+00\n", + " * time: 0.013288021087646484\n", + " 11 1.355591e+00 1.446433e+00\n", + " * time: 0.014177083969116211\n", + " 12 1.242724e+00 6.396928e-01\n", + " * time: 0.014858007431030273\n", + " 13 1.191245e+00 5.825630e-01\n", + " * time: 0.015526056289672852\n", + " 14 1.174580e+00 5.865874e-01\n", + " * time: 0.016186952590942383\n", + " 15 1.157695e+00 5.939881e-01\n", + " * time: 0.016857147216796875\n", + " 16 1.151715e+00 3.303446e-01\n", + " * time: 0.01751995086669922\n", + " 17 1.147886e+00 1.425195e-01\n", + " * time: 0.018218994140625\n", + " 18 1.145051e+00 1.092936e-01\n", + " * time: 0.0188901424407959\n", + " 19 1.144498e+00 8.777150e-02\n", + " * time: 0.0193631649017334\n", + " 20 1.144173e+00 2.844034e-02\n", + " * time: 0.019839048385620117\n", + " 21 1.144091e+00 1.903445e-02\n", + " * time: 0.020498037338256836\n", + " 22 1.144077e+00 1.839696e-02\n", + " * time: 0.02115797996520996\n", + " 23 1.144051e+00 1.188208e-02\n", + " * time: 0.0218350887298584\n", + " 24 1.144045e+00 1.015235e-02\n", + " * time: 0.022526979446411133\n", + " 25 1.144040e+00 5.770492e-03\n", + " * time: 0.023202180862426758\n", + " 26 1.144039e+00 3.098844e-03\n", + " * time: 0.023869037628173828\n", + " 27 1.144038e+00 7.212205e-03\n", + " * time: 0.02453303337097168\n", + " 28 1.144038e+00 9.534686e-03\n", + " * time: 0.025004148483276367\n", + " 29 1.144037e+00 4.679519e-03\n", + " * time: 0.025674104690551758\n", + " 30 1.144037e+00 2.270831e-03\n", + " * time: 0.026363134384155273\n", + " 31 1.144037e+00 5.558834e-04\n", + " * time: 0.027039051055908203\n", + " 32 1.144037e+00 2.127787e-04\n", + " * time: 0.027697086334228516\n", + " 33 1.144037e+00 1.146335e-04\n", + " * time: 0.028361082077026367\n", + " 34 1.144037e+00 1.041834e-04\n", + " * time: 0.02903008460998535\n", + " 35 1.144037e+00 1.266416e-04\n", + " * time: 0.029699087142944336\n", + " 36 1.144037e+00 8.349458e-05\n", + " * time: 0.03038311004638672\n", + " 37 1.144037e+00 1.167798e-04\n", + " * time: 0.03104996681213379\n", + " 38 1.144037e+00 8.099177e-05\n", + " * time: 0.03173995018005371\n", + " 39 1.144037e+00 2.411623e-05\n", + " * time: 0.0324101448059082\n", + " 40 1.144037e+00 3.923256e-05\n", + " * time: 0.0328831672668457\n", + " 41 1.144037e+00 2.119294e-05\n", + " * time: 0.03354907035827637\n", + " 42 1.144037e+00 1.109252e-05\n", + " * time: 0.034240007400512695\n", + " 43 1.144037e+00 4.221854e-06\n", + " * time: 0.034909963607788086\n", + " 44 1.144037e+00 3.786828e-06\n", + " * time: 0.03558015823364258\n", + " 45 1.144037e+00 3.160424e-06\n", + " * time: 0.03624701499938965\n", + " 46 1.144037e+00 2.176637e-06\n", + " * time: 0.036910057067871094\n", + " 47 1.144037e+00 1.145903e-06\n", + " * time: 0.03758096694946289\n", + " 48 1.144037e+00 8.113518e-07\n", + " * time: 0.03826403617858887\n", + " 49 1.144037e+00 4.746600e-07\n", + " * time: 0.03893399238586426\n", + " 50 1.144037e+00 2.975824e-07\n", + " * time: 0.03959798812866211\n", + " 51 1.144037e+00 1.299115e-07\n", + " * time: 0.040277957916259766\n", + " 52 1.144037e+00 1.003266e-07\n", + " * time: 0.0409550666809082\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.2682057 \n ExternalFromReal 0.4707475 \n LocalNonlinearity 0.4050836 \n\n total 1.144036852755 " + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))\n", + "scfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS\n", + "scfres.energies" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "## Internals\n", + "We use the opportunity to explore some of DFTK internals.\n", + "\n", + "Extract the converged density and the obtained wave function:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ρ = real(scfres.ρ)[:, 1, 1, 1] # converged density, first spin component\n", + "ψ_fourier = scfres.ψ[1][:, 1]; # first k-point, all G components, first eigenvector" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Transform the wave function to real space and fix the phase:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\n", + "ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Check whether $ψ$ is normalised:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x = a * vec(first.(DFTK.r_vectors(basis)))\n", + "N = length(x)\n", + "dx = a / N # real-space grid spacing\n", + "@assert sum(abs2.(ψ)) * dx ≈ 1.0" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "The density is simply built from ψ:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "9.81343539489451e-16" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "norm(scfres.ρ - abs2.(ψ))" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "We summarize the ground state in a nice plot:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=3}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "\n", + "p = plot(x, real.(ψ), label=\"real(ψ)\")\n", + "plot!(p, x, imag.(ψ), label=\"imag(ψ)\")\n", + "plot!(p, x, ρ, label=\"ρ\")" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "The `energy_hamiltonian` function can be used to get the energy and\n", + "effective Hamiltonian (derivative of the energy with respect to the density matrix)\n", + "of a particular state (ψ, occupation).\n", + "The density ρ associated to this state is precomputed\n", + "and passed to the routine as an optimization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)\n", + "@assert E.total == scfres.energies.total" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "Now the Hamiltonian contains all the blocks corresponding to $k$-points. Here, we just\n", + "have one $k$-point:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "H = ham.blocks[1];" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "`H` can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector\n", + "Hmat = Array(H) # This is now just a plain Julia matrix,\n", + "# which we can compute and store in this simple 1D example\n", + "@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "Let's check that ψ11 is indeed an eigenstate:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2.0921281010787415e-7" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "cell_type": "code", + "source": [ + "norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "Build a finite-differences version of the GPE operator $H$, as a sanity check:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.0002233993571771622" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "cell_type": "code", + "source": [ + "A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))\n", + "A[1, end] = A[end, 1] = -1\n", + "K = A / dx^2 / 2\n", + "V = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))\n", + "H_findiff = K + V;\n", + "maximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))" + ], + "metadata": {}, + "execution_count": 15 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/gross_pitaevskii/f18acb8b.svg b/v0.6.16/examples/gross_pitaevskii/f18acb8b.svg new file mode 100644 index 0000000000..f70187b82c --- /dev/null +++ b/v0.6.16/examples/gross_pitaevskii/f18acb8b.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/gross_pitaevskii/index.html b/v0.6.16/examples/gross_pitaevskii/index.html new file mode 100644 index 0000000000..6c8653ec21 --- /dev/null +++ b/v0.6.16/examples/gross_pitaevskii/index.html @@ -0,0 +1,37 @@ + +Gross-Pitaevskii equation in one dimension · DFTK.jl

    Gross-Pitaevskii equation in one dimension

    In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.

    The model

    The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by $ψ$ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:

    \[ H ψ = \left(-\frac12 Δ + V + 2 C |ψ|^2\right) ψ = μ ψ \qquad \|ψ\|_{L^2} = 1\]

    where $C$ provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).

    We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,

    a = 10
    +lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];

    which is special cased in DFTK to support 1D models.

    For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).

    pot(x) = (x - a/2)^2;

    We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term $C ∫ ρ(r)^α dr$ to the total energy functional, thus a potential term $α C ρ^{α-1}$. In our case we thus need the parameters

    C = 1.0
    +α = 2;

    … and with this build the model

    using DFTK
    +using LinearAlgebra
    +
    +n_electrons = 1  # Increase this for fun
    +terms = [Kinetic(),
    +         ExternalFromReal(r -> pot(r[1])),
    +         LocalNonlinearity(ρ -> C * ρ^α),
    +]
    +model = Model(lattice; n_electrons, terms, spin_polarization=:spinless);  # spinless electrons

    We discretize using a moderate Ecut (For 1D values up to 5000 are completely fine) and run a direct minimization algorithm:

    basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))
    +scfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS
    +scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             0.2682057 
    +    ExternalFromReal    0.4707475 
    +    LocalNonlinearity   0.4050836 
    +
    +    total               1.144036852755 

    Internals

    We use the opportunity to explore some of DFTK internals.

    Extract the converged density and the obtained wave function:

    ρ = real(scfres.ρ)[:, 1, 1, 1]  # converged density, first spin component
    +ψ_fourier = scfres.ψ[1][:, 1];    # first k-point, all G components, first eigenvector

    Transform the wave function to real space and fix the phase:

    ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]
    +ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));

    Check whether $ψ$ is normalised:

    x = a * vec(first.(DFTK.r_vectors(basis)))
    +N = length(x)
    +dx = a / N  # real-space grid spacing
    +@assert sum(abs2.(ψ)) * dx ≈ 1.0

    The density is simply built from ψ:

    norm(scfres.ρ - abs2.(ψ))
    1.000369306462783e-15

    We summarize the ground state in a nice plot:

    using Plots
    +
    +p = plot(x, real.(ψ), label="real(ψ)")
    +plot!(p, x, imag.(ψ), label="imag(ψ)")
    +plot!(p, x, ρ, label="ρ")
    Example block output

    The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.

    E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)
    +@assert E.total == scfres.energies.total

    Now the Hamiltonian contains all the blocks corresponding to $k$-points. Here, we just have one $k$-point:

    H = ham.blocks[1];

    H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:

    ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector
    +Hmat = Array(H)  # This is now just a plain Julia matrix,
    +#                  which we can compute and store in this simple 1D example
    +@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10

    Let's check that ψ11 is indeed an eigenstate:

    norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)
    1.9444373938679103e-7

    Build a finite-differences version of the GPE operator $H$, as a sanity check:

    A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))
    +A[1, end] = A[end, 1] = -1
    +K = A / dx^2 / 2
    +V = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))
    +H_findiff = K + V;
    +maximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))
    0.00022340790259903597
    diff --git a/v0.6.16/examples/gross_pitaevskii_2D.ipynb b/v0.6.16/examples/gross_pitaevskii_2D.ipynb new file mode 100644 index 0000000000..1f07a04c91 --- /dev/null +++ b/v0.6.16/examples/gross_pitaevskii_2D.ipynb @@ -0,0 +1,2016 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Gross-Pitaevskii equation with external magnetic field" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We solve the 2D Gross-Pitaevskii equation with a magnetic field.\n", + "This is similar to the\n", + "previous example (Gross-Pitaevskii equation in one dimension),\n", + "but with an extra term for the magnetic field.\n", + "We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Iter Function value Gradient norm \n", + " 0 3.117727e+01 8.754315e+00\n", + " * time: 0.0026750564575195312\n", + " 1 2.887430e+01 5.784560e+00\n", + " * time: 0.011939048767089844\n", + " 2 2.163021e+01 8.176678e+00\n", + " * time: 0.02306509017944336\n", + " 3 1.827151e+01 8.552778e+00\n", + " * time: 0.03405404090881348\n", + " 4 1.299826e+01 4.441146e+00\n", + " * time: 0.04490208625793457\n", + " 5 9.876556e+00 1.750782e+00\n", + " * time: 0.055808067321777344\n", + " 6 9.098958e+00 1.148724e+00\n", + " * time: 0.0645599365234375\n", + " 7 8.801123e+00 6.581260e-01\n", + " * time: 0.07329106330871582\n", + " 8 8.600493e+00 7.909342e-01\n", + " * time: 0.0821070671081543\n", + " 9 8.472953e+00 6.046697e-01\n", + " * time: 0.0910329818725586\n", + " 10 8.395639e+00 6.106495e-01\n", + " * time: 0.10001587867736816\n", + " 11 8.359927e+00 1.325535e+00\n", + " * time: 0.10671591758728027\n", + " 12 8.319987e+00 7.433462e-01\n", + " * time: 0.1133720874786377\n", + " 13 8.261005e+00 4.690529e-01\n", + " * time: 0.12014102935791016\n", + " 14 8.206096e+00 4.468559e-01\n", + " * time: 0.1769859790802002\n", + " 15 8.149848e+00 4.031090e-01\n", + " * time: 0.18356704711914062\n", + " 16 8.116405e+00 4.574451e-01\n", + " * time: 0.19009900093078613\n", + " 17 8.085265e+00 2.377773e-01\n", + " * time: 0.1987459659576416\n", + " 18 8.067795e+00 4.167711e-01\n", + " * time: 0.20527291297912598\n", + " 19 8.046825e+00 3.622753e-01\n", + " * time: 0.21181011199951172\n", + " 20 8.021094e+00 2.840349e-01\n", + " * time: 0.21843409538269043\n", + " 21 7.994122e+00 3.554004e-01\n", + " * time: 0.22511601448059082\n", + " 22 7.970804e+00 2.019523e-01\n", + " * time: 0.23373103141784668\n", + " 23 7.947851e+00 2.911001e-01\n", + " * time: 0.2402350902557373\n", + " 24 7.919199e+00 3.296823e-01\n", + " * time: 0.24675297737121582\n", + " 25 7.895107e+00 2.945180e-01\n", + " * time: 0.2532339096069336\n", + " 26 7.878113e+00 3.777240e-01\n", + " * time: 0.25980401039123535\n", + " 27 7.848671e+00 2.960245e-01\n", + " * time: 0.2663300037384033\n", + " 28 7.824631e+00 3.269805e-01\n", + " * time: 0.2728760242462158\n", + " 29 7.808419e+00 3.634538e-01\n", + " * time: 0.28148603439331055\n", + " 30 7.803947e+00 4.431373e-01\n", + " * time: 0.28801488876342773\n", + " 31 7.778310e+00 3.047999e-01\n", + " * time: 0.2945671081542969\n", + " 32 7.759055e+00 1.871267e-01\n", + " * time: 0.30319690704345703\n", + " 33 7.747306e+00 4.127697e-01\n", + " * time: 0.309736967086792\n", + " 34 7.729292e+00 2.448208e-01\n", + " * time: 0.31844305992126465\n", + " 35 7.717695e+00 3.080353e-01\n", + " * time: 0.3250889778137207\n", + " 36 7.709427e+00 2.318132e-01\n", + " * time: 0.33170294761657715\n", + " 37 7.708038e+00 2.344388e-01\n", + " * time: 0.3382289409637451\n", + " 38 7.697246e+00 1.948268e-01\n", + " * time: 0.3447389602661133\n", + " 39 7.693407e+00 2.817448e-01\n", + " * time: 0.3513031005859375\n", + " 40 7.690129e+00 4.046694e-01\n", + " * time: 0.35789990425109863\n", + " 41 7.680353e+00 1.679816e-01\n", + " * time: 0.3666689395904541\n", + " 42 7.671394e+00 1.671311e-01\n", + " * time: 0.373323917388916\n", + " 43 7.666102e+00 1.652769e-01\n", + " * time: 0.3799779415130615\n", + " 44 7.661553e+00 8.834569e-02\n", + " * time: 0.38877010345458984\n", + " 45 7.659012e+00 1.023272e-01\n", + " * time: 0.397381067276001\n", + " 46 7.655621e+00 6.398778e-02\n", + " * time: 0.4067249298095703\n", + " 47 7.653534e+00 6.754129e-02\n", + " * time: 0.4161040782928467\n", + " 48 7.651558e+00 4.361422e-02\n", + " * time: 0.425462007522583\n", + " 49 7.650591e+00 8.870792e-02\n", + " * time: 0.43268799781799316\n", + " 50 7.649636e+00 9.638881e-02\n", + " * time: 0.43976688385009766\n", + " 51 7.649032e+00 6.652102e-02\n", + " * time: 0.44684910774230957\n", + " 52 7.646754e+00 5.625528e-02\n", + " * time: 0.4539310932159424\n", + " 53 7.646008e+00 1.369968e-01\n", + " * time: 0.46109795570373535\n", + " 54 7.645728e+00 1.012532e-01\n", + " * time: 0.4681699275970459\n", + " 55 7.642859e+00 7.720546e-02\n", + " * time: 0.4752779006958008\n", + " 56 7.639450e+00 8.999243e-02\n", + " * time: 0.4823610782623291\n", + " 57 7.638636e+00 1.317613e-01\n", + " * time: 0.4894239902496338\n", + " 58 7.636693e+00 8.330149e-02\n", + " * time: 0.4987819194793701\n", + " 59 7.634799e+00 1.408723e-01\n", + " * time: 0.5479850769042969\n", + " 60 7.634601e+00 1.504609e-01\n", + " * time: 0.5546190738677979\n", + " 61 7.632862e+00 1.157681e-01\n", + " * time: 0.5632250308990479\n", + " 62 7.631389e+00 8.025827e-02\n", + " * time: 0.5718710422515869\n", + " 63 7.629978e+00 9.393784e-02\n", + " * time: 0.5783200263977051\n", + " 64 7.628477e+00 7.547604e-02\n", + " * time: 0.5868930816650391\n", + " 65 7.626807e+00 5.995946e-02\n", + " * time: 0.5954139232635498\n", + " 66 7.626152e+00 6.539433e-02\n", + " * time: 0.6018519401550293\n", + " 67 7.625415e+00 6.902789e-02\n", + " * time: 0.6083199977874756\n", + " 68 7.624283e+00 4.249871e-02\n", + " * time: 0.6169030666351318\n", + " 69 7.623410e+00 7.180463e-02\n", + " * time: 0.623466968536377\n", + " 70 7.622580e+00 5.944516e-02\n", + " * time: 0.6323399543762207\n", + " 71 7.622435e+00 6.682308e-02\n", + " * time: 0.6389880180358887\n", + " 72 7.621409e+00 6.183429e-02\n", + " * time: 0.6455481052398682\n", + " 73 7.620609e+00 7.041728e-02\n", + " * time: 0.6520829200744629\n", + " 74 7.620377e+00 5.880838e-02\n", + " * time: 0.6586899757385254\n", + " 75 7.619514e+00 6.025575e-02\n", + " * time: 0.6652669906616211\n", + " 76 7.618997e+00 7.434467e-02\n", + " * time: 0.6718370914459229\n", + " 77 7.618791e+00 8.762915e-02\n", + " * time: 0.6783640384674072\n", + " 78 7.618126e+00 7.004703e-02\n", + " * time: 0.6869509220123291\n", + " 79 7.617791e+00 5.012729e-02\n", + " * time: 0.6934640407562256\n", + " 80 7.617113e+00 4.660679e-02\n", + " * time: 0.7000000476837158\n", + " 81 7.617012e+00 7.677224e-02\n", + " * time: 0.70648193359375\n", + " 82 7.616523e+00 5.736008e-02\n", + " * time: 0.7151100635528564\n", + " 83 7.616070e+00 5.380190e-02\n", + " * time: 0.7216510772705078\n", + " 84 7.615615e+00 3.746474e-02\n", + " * time: 0.7304370403289795\n", + " 85 7.615398e+00 5.693482e-02\n", + " * time: 0.7369101047515869\n", + " 86 7.615279e+00 5.683729e-02\n", + " * time: 0.7435910701751709\n", + " 87 7.614701e+00 6.275423e-02\n", + " * time: 0.7502920627593994\n", + " 88 7.614019e+00 4.800598e-02\n", + " * time: 0.7589590549468994\n", + " 89 7.613549e+00 6.052976e-02\n", + " * time: 0.7654449939727783\n", + " 90 7.612842e+00 5.395351e-02\n", + " * time: 0.7746179103851318\n", + " 91 7.612399e+00 7.443241e-02\n", + " * time: 0.7816870212554932\n", + " 92 7.611518e+00 5.120280e-02\n", + " * time: 0.7910439968109131\n", + " 93 7.611265e+00 5.722143e-02\n", + " * time: 0.7981228828430176\n", + " 94 7.610747e+00 4.367851e-02\n", + " * time: 0.8052220344543457\n", + " 95 7.610553e+00 5.714693e-02\n", + " * time: 0.81233811378479\n", + " 96 7.610015e+00 7.637821e-02\n", + " * time: 0.8195281028747559\n", + " 97 7.609522e+00 4.245183e-02\n", + " * time: 0.8289148807525635\n", + " 98 7.608947e+00 3.960646e-02\n", + " * time: 0.8361139297485352\n", + " 99 7.608761e+00 4.830877e-02\n", + " * time: 0.8432619571685791\n", + " 100 7.608472e+00 3.928722e-02\n", + " * time: 0.8503460884094238\n", + " 101 7.608399e+00 5.398967e-02\n", + " * time: 0.8574459552764893\n", + " 102 7.608197e+00 6.913049e-02\n", + " * time: 0.8645899295806885\n", + " 103 7.607857e+00 3.778423e-02\n", + " * time: 0.909782886505127\n", + " 104 7.607663e+00 4.788704e-02\n", + " * time: 0.9165380001068115\n", + " 105 7.607453e+00 5.539278e-02\n", + " * time: 0.9230659008026123\n", + " 106 7.607096e+00 3.441999e-02\n", + " * time: 0.9316539764404297\n", + " 107 7.606868e+00 3.076999e-02\n", + " * time: 0.9381051063537598\n", + " 108 7.606712e+00 3.423372e-02\n", + " * time: 0.9445569515228271\n", + " 109 7.606475e+00 2.258901e-02\n", + " * time: 0.9510629177093506\n", + " 110 7.606375e+00 3.902220e-02\n", + " * time: 0.9575150012969971\n", + " 111 7.606303e+00 5.103100e-02\n", + " * time: 0.9640328884124756\n", + " 112 7.606090e+00 2.231509e-02\n", + " * time: 0.9726099967956543\n", + " 113 7.605969e+00 4.541069e-02\n", + " * time: 0.9790771007537842\n", + " 114 7.605814e+00 2.774771e-02\n", + " * time: 0.9855749607086182\n", + " 115 7.605580e+00 2.037678e-02\n", + " * time: 0.9941990375518799\n", + " 116 7.605358e+00 1.395461e-02\n", + " * time: 1.0028660297393799\n", + " 117 7.605304e+00 3.265110e-02\n", + " * time: 1.0094060897827148\n", + " 118 7.605272e+00 3.856253e-02\n", + " * time: 1.0159220695495605\n", + " 119 7.605234e+00 2.447839e-02\n", + " * time: 1.0224831104278564\n", + " 120 7.605055e+00 2.507377e-02\n", + " * time: 1.0290908813476562\n", + " 121 7.604924e+00 3.334614e-02\n", + " * time: 1.0356240272521973\n", + " 122 7.604732e+00 1.972881e-02\n", + " * time: 1.0444309711456299\n", + " 123 7.604702e+00 3.348197e-02\n", + " * time: 1.0510210990905762\n", + " 124 7.604641e+00 3.046650e-02\n", + " * time: 1.0575931072235107\n", + " 125 7.604527e+00 2.543855e-02\n", + " * time: 1.0662899017333984\n", + " 126 7.604479e+00 3.283870e-02\n", + " * time: 1.0728778839111328\n", + " 127 7.604389e+00 2.132594e-02\n", + " * time: 1.0794589519500732\n", + " 128 7.604285e+00 1.873939e-02\n", + " * time: 1.0860240459442139\n", + " 129 7.604174e+00 1.617927e-02\n", + " * time: 1.094749927520752\n", + " 130 7.604103e+00 1.587677e-02\n", + " * time: 1.1034588813781738\n", + " 131 7.604062e+00 1.336816e-02\n", + " * time: 1.1101949214935303\n", + " 132 7.604031e+00 2.094496e-02\n", + " * time: 1.1169660091400146\n", + " 133 7.603969e+00 1.876088e-02\n", + " * time: 1.1237130165100098\n", + " 134 7.603894e+00 1.639156e-02\n", + " * time: 1.132369041442871\n", + " 135 7.603807e+00 9.969681e-03\n", + " * time: 1.1414790153503418\n", + " 136 7.603759e+00 1.811018e-02\n", + " * time: 1.1486809253692627\n", + " 137 7.603694e+00 1.149443e-02\n", + " * time: 1.1582250595092773\n", + " 138 7.603647e+00 9.139978e-03\n", + " * time: 1.1676549911499023\n", + " 139 7.603634e+00 1.383411e-02\n", + " * time: 1.1748199462890625\n", + " 140 7.603624e+00 1.770767e-02\n", + " * time: 1.1819651126861572\n", + " 141 7.603596e+00 1.188782e-02\n", + " * time: 1.1891179084777832\n", + " 142 7.603536e+00 1.010792e-02\n", + " * time: 1.1962521076202393\n", + " 143 7.603497e+00 5.610309e-03\n", + " * time: 1.205686092376709\n", + " 144 7.603470e+00 8.834766e-03\n", + " * time: 1.2128829956054688\n", + " 145 7.603443e+00 8.580124e-03\n", + " * time: 1.220031976699829\n", + " 146 7.603418e+00 9.271811e-03\n", + " * time: 1.2271299362182617\n", + " 147 7.603397e+00 1.076681e-02\n", + " * time: 1.2342190742492676\n", + " 148 7.603378e+00 8.511727e-03\n", + " * time: 1.263139009475708\n", + " 149 7.603360e+00 8.107601e-03\n", + " * time: 1.2698888778686523\n", + " 150 7.603359e+00 1.666382e-02\n", + " * time: 1.2766149044036865\n", + " 151 7.603340e+00 9.790800e-03\n", + " * time: 1.2853240966796875\n", + " 152 7.603327e+00 9.576019e-03\n", + " * time: 1.2940120697021484\n", + " 153 7.603315e+00 8.809645e-03\n", + " * time: 1.3005259037017822\n", + " 154 7.603303e+00 7.425387e-03\n", + " * time: 1.3070580959320068\n", + " 155 7.603294e+00 7.257096e-03\n", + " * time: 1.3135809898376465\n", + " 156 7.603289e+00 7.760732e-03\n", + " * time: 1.3202519416809082\n", + " 157 7.603278e+00 8.372823e-03\n", + " * time: 1.3267979621887207\n", + " 158 7.603266e+00 7.824093e-03\n", + " * time: 1.3334250450134277\n", + " 159 7.603256e+00 7.172371e-03\n", + " * time: 1.3399479389190674\n", + " 160 7.603247e+00 8.057746e-03\n", + " * time: 1.3465230464935303\n", + " 161 7.603234e+00 4.272993e-03\n", + " * time: 1.3552329540252686\n", + " 162 7.603232e+00 8.659198e-03\n", + " * time: 1.3617799282073975\n", + " 163 7.603228e+00 9.975641e-03\n", + " * time: 1.368406057357788\n", + " 164 7.603217e+00 4.527081e-03\n", + " * time: 1.3771259784698486\n", + " 165 7.603214e+00 7.529890e-03\n", + " * time: 1.3837220668792725\n", + " 166 7.603203e+00 8.891013e-03\n", + " * time: 1.3903100490570068\n", + " 167 7.603189e+00 6.210707e-03\n", + " * time: 1.3989689350128174\n", + " 168 7.603188e+00 1.025415e-02\n", + " * time: 1.405487060546875\n", + " 169 7.603180e+00 7.298522e-03\n", + " * time: 1.4120490550994873\n", + " 170 7.603170e+00 7.606876e-03\n", + " * time: 1.4185559749603271\n", + " 171 7.603166e+00 7.535088e-03\n", + " * time: 1.425220012664795\n", + " 172 7.603154e+00 7.443734e-03\n", + " * time: 1.431825876235962\n", + " 173 7.603134e+00 9.152462e-03\n", + " * time: 1.4404408931732178\n", + " 174 7.603120e+00 4.927715e-03\n", + " * time: 1.4492809772491455\n", + " 175 7.603109e+00 7.852399e-03\n", + " * time: 1.455862045288086\n", + " 176 7.603094e+00 5.824079e-03\n", + " * time: 1.464637041091919\n", + " 177 7.603080e+00 8.708367e-03\n", + " * time: 1.4713099002838135\n", + " 178 7.603068e+00 9.998585e-03\n", + " * time: 1.47788405418396\n", + " 179 7.603045e+00 7.835582e-03\n", + " * time: 1.486495018005371\n", + " 180 7.603034e+00 1.213509e-02\n", + " * time: 1.4933240413665771\n", + " 181 7.603033e+00 1.832072e-02\n", + " * time: 1.5004019737243652\n", + " 182 7.603001e+00 9.948997e-03\n", + " * time: 1.5097589492797852\n", + " 183 7.602976e+00 9.508407e-03\n", + " * time: 1.5169379711151123\n", + " 184 7.602943e+00 7.435543e-03\n", + " * time: 1.5240159034729004\n", + " 185 7.602915e+00 1.119805e-02\n", + " * time: 1.5311238765716553\n", + " 186 7.602884e+00 7.995298e-03\n", + " * time: 1.5404770374298096\n", + " 187 7.602866e+00 9.335815e-03\n", + " * time: 1.5475859642028809\n", + " 188 7.602843e+00 9.291152e-03\n", + " * time: 1.5569369792938232\n", + " 189 7.602843e+00 1.591370e-02\n", + " * time: 1.5640349388122559\n", + " 190 7.602816e+00 1.198685e-02\n", + " * time: 1.571113109588623\n", + " 191 7.602789e+00 1.179195e-02\n", + " * time: 1.5804378986358643\n", + " 192 7.602777e+00 1.353902e-02\n", + " * time: 1.5875179767608643\n", + " 193 7.602776e+00 2.214429e-02\n", + " * time: 1.6162030696868896\n", + " 194 7.602757e+00 2.460680e-02\n", + " * time: 1.6228539943695068\n", + " 195 7.602730e+00 2.256704e-02\n", + " * time: 1.6293959617614746\n", + " 196 7.602724e+00 1.599474e-02\n", + " * time: 1.6359739303588867\n", + " 197 7.602700e+00 1.832088e-02\n", + " * time: 1.642535924911499\n", + " 198 7.602692e+00 2.105310e-02\n", + " * time: 1.649017095565796\n", + " 199 7.602672e+00 1.358344e-02\n", + " * time: 1.6556730270385742\n", + " 200 7.602665e+00 1.883427e-02\n", + " * time: 1.6621289253234863\n", + " 201 7.602618e+00 1.428827e-02\n", + " * time: 1.6687688827514648\n", + " 202 7.602580e+00 1.434921e-02\n", + " * time: 1.6752920150756836\n", + " 203 7.602564e+00 1.830109e-02\n", + " * time: 1.6818349361419678\n", + " 204 7.602541e+00 1.051139e-02\n", + " * time: 1.6904900074005127\n", + " 205 7.602516e+00 9.612253e-03\n", + " * time: 1.6990959644317627\n", + " 206 7.602511e+00 1.524654e-02\n", + " * time: 1.70566987991333\n", + " 207 7.602503e+00 1.377837e-02\n", + " * time: 1.7122840881347656\n", + " 208 7.602477e+00 1.105102e-02\n", + " * time: 1.7188329696655273\n", + " 209 7.602456e+00 1.003122e-02\n", + " * time: 1.7274649143218994\n", + " 210 7.602429e+00 6.739426e-03\n", + " * time: 1.736109972000122\n", + " 211 7.602424e+00 1.458142e-02\n", + " * time: 1.7426600456237793\n", + " 212 7.602412e+00 1.027719e-02\n", + " * time: 1.7491400241851807\n", + " 213 7.602395e+00 1.239797e-02\n", + " * time: 1.7556869983673096\n", + " 214 7.602393e+00 1.054830e-02\n", + " * time: 1.7622780799865723\n", + " 215 7.602381e+00 1.576194e-02\n", + " * time: 1.7688100337982178\n", + " 216 7.602377e+00 1.511640e-02\n", + " * time: 1.7753920555114746\n", + " 217 7.602377e+00 2.053236e-02\n", + " * time: 1.78187894821167\n", + " 218 7.602370e+00 2.046911e-02\n", + " * time: 1.788362979888916\n", + " 219 7.602341e+00 1.255159e-02\n", + " * time: 1.79494309425354\n", + " 220 7.602329e+00 1.260777e-02\n", + " * time: 1.801537036895752\n", + " 221 7.602287e+00 9.889421e-03\n", + " * time: 1.8080389499664307\n", + " 222 7.602258e+00 1.032263e-02\n", + " * time: 1.8168869018554688\n", + " 223 7.602258e+00 2.099029e-02\n", + " * time: 1.8235769271850586\n", + " 224 7.602234e+00 1.239878e-02\n", + " * time: 1.8322689533233643\n", + " 225 7.602208e+00 1.078017e-02\n", + " * time: 1.8410239219665527\n", + " 226 7.602205e+00 1.500522e-02\n", + " * time: 1.8481180667877197\n", + " 227 7.602184e+00 1.110121e-02\n", + " * time: 1.8576419353485107\n", + " 228 7.602166e+00 9.137829e-03\n", + " * time: 1.8671340942382812\n", + " 229 7.602165e+00 1.505266e-02\n", + " * time: 1.8742520809173584\n", + " 230 7.602135e+00 1.206594e-02\n", + " * time: 1.8813281059265137\n", + " 231 7.602121e+00 1.075514e-02\n", + " * time: 1.888437032699585\n", + " 232 7.602103e+00 1.266577e-02\n", + " * time: 1.8955409526824951\n", + " 233 7.602085e+00 8.533057e-03\n", + " * time: 1.9026660919189453\n", + " 234 7.602066e+00 1.479326e-02\n", + " * time: 1.9097580909729004\n", + " 235 7.602049e+00 9.774748e-03\n", + " * time: 1.9191410541534424\n", + " 236 7.602032e+00 1.629560e-02\n", + " * time: 1.9262170791625977\n", + " 237 7.602010e+00 9.133198e-03\n", + " * time: 1.9355759620666504\n", + " 238 7.602001e+00 9.302543e-03\n", + " * time: 1.966722011566162\n", + " 239 7.602001e+00 9.809235e-03\n", + " * time: 1.9733359813690186\n", + " 240 7.601987e+00 8.828532e-03\n", + " * time: 1.9819669723510742\n", + " 241 7.601976e+00 8.456775e-03\n", + " * time: 1.9905800819396973\n", + " 242 7.601974e+00 1.202086e-02\n", + " * time: 1.997117042541504\n", + " 243 7.601966e+00 4.744997e-03\n", + " * time: 2.0037550926208496\n", + " 244 7.601956e+00 5.150560e-03\n", + " * time: 2.0102949142456055\n", + " 245 7.601944e+00 4.811107e-03\n", + " * time: 2.016774892807007\n", + " 246 7.601936e+00 5.170805e-03\n", + " * time: 2.0253450870513916\n", + " 247 7.601926e+00 4.388022e-03\n", + " * time: 2.034034013748169\n", + " 248 7.601922e+00 6.412640e-03\n", + " * time: 2.040560007095337\n", + " 249 7.601920e+00 4.493603e-03\n", + " * time: 2.0470449924468994\n", + " 250 7.601916e+00 5.686383e-03\n", + " * time: 2.055759906768799\n", + " 251 7.601916e+00 5.501980e-03\n", + " * time: 2.0625810623168945\n", + " 252 7.601914e+00 4.736519e-03\n", + " * time: 2.069159984588623\n", + " 253 7.601909e+00 5.241258e-03\n", + " * time: 2.0757288932800293\n", + " 254 7.601907e+00 3.235349e-03\n", + " * time: 2.0823171138763428\n", + " 255 7.601903e+00 3.187428e-03\n", + " * time: 2.088844060897827\n", + " 256 7.601899e+00 2.964977e-03\n", + " * time: 2.0954179763793945\n", + " 257 7.601895e+00 2.982475e-03\n", + " * time: 2.1019439697265625\n", + " 258 7.601895e+00 6.130765e-03\n", + " * time: 2.1084659099578857\n", + " 259 7.601892e+00 4.210284e-03\n", + " * time: 2.115051031112671\n", + " 260 7.601891e+00 5.608474e-03\n", + " * time: 2.1215720176696777\n", + " 261 7.601889e+00 3.210881e-03\n", + " * time: 2.12814998626709\n", + " 262 7.601887e+00 5.635162e-03\n", + " * time: 2.1347110271453857\n", + " 263 7.601884e+00 2.992158e-03\n", + " * time: 2.14330792427063\n", + " 264 7.601883e+00 6.344399e-03\n", + " * time: 2.1499009132385254\n", + " 265 7.601880e+00 3.671576e-03\n", + " * time: 2.158461093902588\n", + " 266 7.601878e+00 4.547714e-03\n", + " * time: 2.1651289463043213\n", + " 267 7.601877e+00 5.630644e-03\n", + " * time: 2.171797037124634\n", + " 268 7.601875e+00 3.634063e-03\n", + " * time: 2.180474042892456\n", + " 269 7.601872e+00 2.611862e-03\n", + " * time: 2.1890370845794678\n", + " 270 7.601870e+00 2.078467e-03\n", + " * time: 2.198309898376465\n", + " 271 7.601869e+00 1.628467e-03\n", + " * time: 2.207901954650879\n", + " 272 7.601867e+00 1.843729e-03\n", + " * time: 2.2152109146118164\n", + " 273 7.601866e+00 3.035913e-03\n", + " * time: 2.2223730087280273\n", + " 274 7.601865e+00 3.015221e-03\n", + " * time: 2.229495048522949\n", + " 275 7.601862e+00 2.954813e-03\n", + " * time: 2.236638069152832\n", + " 276 7.601860e+00 2.636617e-03\n", + " * time: 2.2437551021575928\n", + " 277 7.601858e+00 3.626527e-03\n", + " * time: 2.250861883163452\n", + " 278 7.601856e+00 1.651935e-03\n", + " * time: 2.2602291107177734\n", + " 279 7.601855e+00 3.678463e-03\n", + " * time: 2.2674760818481445\n", + " 280 7.601853e+00 2.837467e-03\n", + " * time: 2.274583101272583\n", + " 281 7.601852e+00 3.051715e-03\n", + " * time: 2.281662940979004\n", + " 282 7.601851e+00 2.531567e-03\n", + " * time: 2.288738965988159\n", + " 283 7.601849e+00 1.903463e-03\n", + " * time: 2.317291021347046\n", + " 284 7.601849e+00 3.339723e-03\n", + " * time: 2.3239150047302246\n", + " 285 7.601848e+00 2.428319e-03\n", + " * time: 2.3325600624084473\n", + " 286 7.601847e+00 3.799713e-03\n", + " * time: 2.339082956314087\n", + " 287 7.601847e+00 2.748112e-03\n", + " * time: 2.3456900119781494\n", + " 288 7.601846e+00 1.765636e-03\n", + " * time: 2.354353904724121\n", + " 289 7.601845e+00 2.308535e-03\n", + " * time: 2.360822916030884\n", + " 290 7.601844e+00 1.313785e-03\n", + " * time: 2.369447946548462\n", + " 291 7.601844e+00 2.242247e-03\n", + " * time: 2.3759329319000244\n", + " 292 7.601844e+00 1.718403e-03\n", + " * time: 2.3824119567871094\n", + " 293 7.601844e+00 1.516071e-03\n", + " * time: 2.388866901397705\n", + " 294 7.601843e+00 1.363636e-03\n", + " * time: 2.395332098007202\n", + " 295 7.601843e+00 1.618299e-03\n", + " * time: 2.401779890060425\n", + " 296 7.601843e+00 1.221516e-03\n", + " * time: 2.408310890197754\n", + " 297 7.601842e+00 8.931831e-04\n", + " * time: 2.4169399738311768\n", + " 298 7.601842e+00 7.598049e-04\n", + " * time: 2.4259700775146484\n", + " 299 7.601842e+00 1.266880e-03\n", + " * time: 2.4326698780059814\n", + " 300 7.601842e+00 1.014542e-03\n", + " * time: 2.439232110977173\n", + " 301 7.601841e+00 8.340587e-04\n", + " * time: 2.4457828998565674\n", + " 302 7.601841e+00 6.574894e-04\n", + " * time: 2.4544599056243896\n", + " 303 7.601841e+00 4.894977e-04\n", + " * time: 2.463191032409668\n", + " 304 7.601841e+00 7.600108e-04\n", + " * time: 2.469888925552368\n", + " 305 7.601841e+00 6.950993e-04\n", + " * time: 2.4764459133148193\n", + " 306 7.601841e+00 9.824797e-04\n", + " * time: 2.48305606842041\n", + " 307 7.601841e+00 7.094500e-04\n", + " * time: 2.489635944366455\n", + " 308 7.601841e+00 7.051681e-04\n", + " * time: 2.496213912963867\n", + " 309 7.601841e+00 1.364458e-03\n", + " * time: 2.502821922302246\n", + " 310 7.601840e+00 1.156827e-03\n", + " * time: 2.5093939304351807\n", + " 311 7.601840e+00 6.469232e-04\n", + " * time: 2.518263101577759\n", + " 312 7.601840e+00 7.121601e-04\n", + " * time: 2.524977922439575\n", + " 313 7.601840e+00 1.008477e-03\n", + " * time: 2.5316390991210938\n", + " 314 7.601840e+00 1.129894e-03\n", + " * time: 2.538304090499878\n", + " 315 7.601840e+00 5.866272e-04\n", + " * time: 2.547292947769165\n", + " 316 7.601840e+00 1.195706e-03\n", + " * time: 2.55440092086792\n", + " 317 7.601839e+00 5.798129e-04\n", + " * time: 2.563746929168701\n", + " 318 7.601839e+00 5.819303e-04\n", + " * time: 2.570849895477295\n", + " 319 7.601839e+00 7.544869e-04\n", + " * time: 2.5778980255126953\n", + " 320 7.601839e+00 6.842548e-04\n", + " * time: 2.5872929096221924\n", + " 321 7.601839e+00 1.006841e-03\n", + " * time: 2.594381093978882\n", + " 322 7.601839e+00 5.802398e-04\n", + " * time: 2.6014509201049805\n", + " 323 7.601839e+00 4.658177e-04\n", + " * time: 2.6085400581359863\n", + " 324 7.601839e+00 9.765381e-04\n", + " * time: 2.615617036819458\n", + " 325 7.601839e+00 9.901505e-04\n", + " * time: 2.6227169036865234\n", + " 326 7.601839e+00 7.910918e-04\n", + " * time: 2.632054090499878\n", + " 327 7.601839e+00 1.129779e-03\n", + " * time: 2.6391279697418213\n", + " 328 7.601839e+00 1.067885e-03\n", + " * time: 2.6680169105529785\n", + " 329 7.601839e+00 1.055472e-03\n", + " * time: 2.674873113632202\n", + " 330 7.601838e+00 1.120680e-03\n", + " * time: 2.681442975997925\n", + " 331 7.601838e+00 9.688317e-04\n", + " * time: 2.687985897064209\n", + " 332 7.601838e+00 5.889264e-04\n", + " * time: 2.696621894836426\n", + " 333 7.601838e+00 6.865451e-04\n", + " * time: 2.703130006790161\n", + " 334 7.601838e+00 5.857085e-04\n", + " * time: 2.7097229957580566\n", + " 335 7.601838e+00 1.213959e-03\n", + " * time: 2.7162539958953857\n", + " 336 7.601838e+00 6.646074e-04\n", + " * time: 2.724864959716797\n", + " 337 7.601838e+00 7.962419e-04\n", + " * time: 2.7314329147338867\n", + " 338 7.601838e+00 7.057663e-04\n", + " * time: 2.7401509284973145\n", + " 339 7.601838e+00 6.623021e-04\n", + " * time: 2.7487659454345703\n", + " 340 7.601837e+00 6.057953e-04\n", + " * time: 2.7574660778045654\n", + " 341 7.601837e+00 1.237610e-03\n", + " * time: 2.764080047607422\n", + " 342 7.601837e+00 9.625038e-04\n", + " * time: 2.7706310749053955\n", + " 343 7.601837e+00 9.247105e-04\n", + " * time: 2.7771739959716797\n", + " 344 7.601837e+00 1.554358e-03\n", + " * time: 2.7837319374084473\n", + " 345 7.601837e+00 1.156499e-03\n", + " * time: 2.7924089431762695\n", + " 346 7.601837e+00 1.255831e-03\n", + " * time: 2.7989180088043213\n", + " 347 7.601837e+00 9.124844e-04\n", + " * time: 2.805495023727417\n", + " 348 7.601837e+00 1.038840e-03\n", + " * time: 2.812072992324829\n", + " 349 7.601837e+00 1.140937e-03\n", + " * time: 2.81864595413208\n", + " 350 7.601837e+00 1.161090e-03\n", + " * time: 2.825139045715332\n", + " 351 7.601837e+00 5.959991e-04\n", + " * time: 2.8337459564208984\n", + " 352 7.601836e+00 5.529607e-04\n", + " * time: 2.8423728942871094\n", + " 353 7.601836e+00 7.977814e-04\n", + " * time: 2.8489229679107666\n", + " 354 7.601836e+00 1.012579e-03\n", + " * time: 2.855510950088501\n", + " 355 7.601836e+00 5.867215e-04\n", + " * time: 2.8641610145568848\n", + " 356 7.601836e+00 6.451730e-04\n", + " * time: 2.870940923690796\n", + " 357 7.601836e+00 9.842655e-04\n", + " * time: 2.8777589797973633\n", + " 358 7.601836e+00 7.889833e-04\n", + " * time: 2.8842709064483643\n", + " 359 7.601836e+00 7.658722e-04\n", + " * time: 2.890800952911377\n", + " 360 7.601836e+00 1.259190e-03\n", + " * time: 2.897660970687866\n", + " 361 7.601836e+00 6.394916e-04\n", + " * time: 2.9070470333099365\n", + " 362 7.601836e+00 1.099618e-03\n", + " * time: 2.9141180515289307\n", + " 363 7.601836e+00 7.525784e-04\n", + " * time: 2.9212069511413574\n", + " 364 7.601836e+00 6.908183e-04\n", + " * time: 2.930586099624634\n", + " 365 7.601835e+00 4.475444e-04\n", + " * time: 2.939923048019409\n", + " 366 7.601835e+00 6.299356e-04\n", + " * time: 2.9470620155334473\n", + " 367 7.601835e+00 8.365119e-04\n", + " * time: 2.954148054122925\n", + " 368 7.601835e+00 6.806697e-04\n", + " * time: 2.963538885116577\n", + " 369 7.601835e+00 6.782824e-04\n", + " * time: 2.970613956451416\n", + " 370 7.601835e+00 1.161652e-03\n", + " * time: 2.977668046951294\n", + " 371 7.601835e+00 1.080964e-03\n", + " * time: 2.984736919403076\n", + " 372 7.601835e+00 7.906012e-04\n", + " * time: 2.9918270111083984\n", + " 373 7.601834e+00 9.371001e-04\n", + " * time: 3.0205490589141846\n", + " 374 7.601834e+00 3.481662e-04\n", + " * time: 3.029452085494995\n", + " 375 7.601834e+00 9.984490e-04\n", + " * time: 3.036029100418091\n", + " 376 7.601834e+00 8.630539e-04\n", + " * time: 3.0426459312438965\n", + " 377 7.601834e+00 7.571627e-04\n", + " * time: 3.0491020679473877\n", + " 378 7.601834e+00 4.960425e-04\n", + " * time: 3.0576210021972656\n", + " 379 7.601834e+00 7.030385e-04\n", + " * time: 3.0641369819641113\n", + " 380 7.601834e+00 7.612194e-04\n", + " * time: 3.0706849098205566\n", + " 381 7.601834e+00 1.159799e-03\n", + " * time: 3.0771191120147705\n", + " 382 7.601834e+00 4.981654e-04\n", + " * time: 3.0858469009399414\n", + " 383 7.601834e+00 6.009610e-04\n", + " * time: 3.0923469066619873\n", + " 384 7.601834e+00 5.649685e-04\n", + " * time: 3.0988430976867676\n", + " 385 7.601834e+00 4.512411e-04\n", + " * time: 3.10534405708313\n", + " 386 7.601834e+00 9.688278e-04\n", + " * time: 3.1119489669799805\n", + " 387 7.601833e+00 6.812771e-04\n", + " * time: 3.120673894882202\n", + " 388 7.601833e+00 5.518743e-04\n", + " * time: 3.1293671131134033\n", + " 389 7.601833e+00 6.897959e-04\n", + " * time: 3.1359241008758545\n", + " 390 7.601833e+00 5.413986e-04\n", + " * time: 3.1424100399017334\n", + " 391 7.601833e+00 4.461949e-04\n", + " * time: 3.1510610580444336\n", + " 392 7.601833e+00 2.249252e-04\n", + " * time: 3.15971302986145\n", + " 393 7.601833e+00 3.583239e-04\n", + " * time: 3.1662559509277344\n", + " 394 7.601833e+00 2.763584e-04\n", + " * time: 3.1748359203338623\n", + " 395 7.601833e+00 4.017277e-04\n", + " * time: 3.1814069747924805\n", + " 396 7.601833e+00 4.924309e-04\n", + " * time: 3.18796706199646\n", + " 397 7.601833e+00 2.717198e-04\n", + " * time: 3.196552038192749\n", + " 398 7.601833e+00 3.410512e-04\n", + " * time: 3.203070878982544\n", + " 399 7.601833e+00 4.077474e-04\n", + " * time: 3.2097129821777344\n", + " 400 7.601833e+00 4.882517e-04\n", + " * time: 3.2163779735565186\n", + " 401 7.601833e+00 3.534134e-04\n", + " * time: 3.223038911819458\n", + " 402 7.601833e+00 3.856980e-04\n", + " * time: 3.229665994644165\n", + " 403 7.601833e+00 5.337470e-04\n", + " * time: 3.236203908920288\n", + " 404 7.601833e+00 3.655817e-04\n", + " * time: 3.2449800968170166\n", + " 405 7.601833e+00 4.096739e-04\n", + " * time: 3.2520689964294434\n", + " 406 7.601833e+00 3.028010e-04\n", + " * time: 3.26139497756958\n", + " 407 7.601833e+00 2.261405e-04\n", + " * time: 3.2685461044311523\n", + " 408 7.601833e+00 3.245004e-04\n", + " * time: 3.2756729125976562\n", + " 409 7.601833e+00 3.959345e-04\n", + " * time: 3.2829179763793945\n", + " 410 7.601833e+00 2.511034e-04\n", + " * time: 3.2923150062561035\n", + " 411 7.601833e+00 2.066604e-04\n", + " * time: 3.3017349243164062\n", + " 412 7.601833e+00 2.829113e-04\n", + " * time: 3.308842897415161\n", + " 413 7.601833e+00 2.878404e-04\n", + " * time: 3.3183178901672363\n", + " 414 7.601833e+00 4.691105e-04\n", + " * time: 3.3254098892211914\n", + " 415 7.601833e+00 4.042696e-04\n", + " * time: 3.332595109939575\n", + " 416 7.601833e+00 5.076111e-04\n", + " * time: 3.3396859169006348\n", + " 417 7.601833e+00 4.675721e-04\n", + " * time: 3.3685810565948486\n", + " 418 7.601833e+00 3.031922e-04\n", + " * time: 3.375174045562744\n", + " 419 7.601833e+00 5.234179e-04\n", + " * time: 3.3816890716552734\n", + " 420 7.601833e+00 4.241956e-04\n", + " * time: 3.388185977935791\n", + " 421 7.601833e+00 4.421603e-04\n", + " * time: 3.3947598934173584\n", + " 422 7.601833e+00 6.320128e-04\n", + " * time: 3.401247978210449\n", + " 423 7.601832e+00 4.570852e-04\n", + " * time: 3.4098260402679443\n", + " 424 7.601832e+00 4.858211e-04\n", + " * time: 3.416306972503662\n", + " 425 7.601832e+00 3.269785e-04\n", + " * time: 3.424962043762207\n", + " 426 7.601832e+00 2.645663e-04\n", + " * time: 3.4315168857574463\n", + " 427 7.601832e+00 5.972088e-04\n", + " * time: 3.4379820823669434\n", + " 428 7.601832e+00 3.766153e-04\n", + " * time: 3.4467480182647705\n", + " 429 7.601832e+00 5.515615e-04\n", + " * time: 3.4532339572906494\n", + " 430 7.601832e+00 5.391912e-04\n", + " * time: 3.459861993789673\n", + " 431 7.601832e+00 3.493838e-04\n", + " * time: 3.4664130210876465\n", + " 432 7.601832e+00 4.169584e-04\n", + " * time: 3.472939968109131\n", + " 433 7.601832e+00 3.565462e-04\n", + " * time: 3.4795310497283936\n", + " 434 7.601832e+00 3.608032e-04\n", + " * time: 3.4860520362854004\n", + " 435 7.601832e+00 5.386896e-04\n", + " * time: 3.4927680492401123\n", + " 436 7.601832e+00 5.287693e-04\n", + " * time: 3.4993159770965576\n", + " 437 7.601832e+00 3.577227e-04\n", + " * time: 3.507983922958374\n", + " 438 7.601832e+00 2.996212e-04\n", + " * time: 3.5166189670562744\n", + " 439 7.601832e+00 3.011622e-04\n", + " * time: 3.5232110023498535\n", + " 440 7.601832e+00 2.088037e-04\n", + " * time: 3.531872034072876\n", + " 441 7.601832e+00 1.830138e-04\n", + " * time: 3.5404860973358154\n", + " 442 7.601832e+00 1.069003e-04\n", + " * time: 3.5491909980773926\n", + " 443 7.601832e+00 3.607615e-04\n", + " * time: 3.5557990074157715\n", + " 444 7.601832e+00 1.770713e-04\n", + " * time: 3.564387083053589\n", + " 445 7.601832e+00 3.772138e-04\n", + " * time: 3.5710690021514893\n", + " 446 7.601832e+00 2.743056e-04\n", + " * time: 3.5776619911193848\n", + " 447 7.601832e+00 1.389544e-04\n", + " * time: 3.584291934967041\n", + " 448 7.601832e+00 9.760755e-05\n", + " * time: 3.590831995010376\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using StaticArrays\n", + "using Plots\n", + "\n", + "# Unit cell. Having one of the lattice vectors as zero means a 2D system\n", + "a = 15\n", + "lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n", + "\n", + "# Confining scalar potential, and magnetic vector potential\n", + "pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2\n", + "ω = .6\n", + "Apot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]\n", + "Apot(X) = Apot(X...);\n", + "\n", + "\n", + "# Parameters\n", + "Ecut = 20 # Increase this for production\n", + "η = 500\n", + "C = η/2\n", + "α = 2\n", + "n_electrons = 1; # Increase this for fun\n", + "\n", + "# Collect all the terms, build and run the model\n", + "terms = [Kinetic(),\n", + " ExternalFromReal(X -> pot(X...)),\n", + " LocalNonlinearity(ρ -> C * ρ^α),\n", + " Magnetic(Apot),\n", + "]\n", + "model = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # spinless electrons\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\n", + "scfres = direct_minimization(basis, tol=1e-5) # Reduce tol for production\n", + "heatmap(scfres.ρ[:, :, 1, 1], c=:blues)" + ], + "metadata": {}, + "execution_count": 1 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/gross_pitaevskii_2D/6ff09bcb.svg b/v0.6.16/examples/gross_pitaevskii_2D/6ff09bcb.svg new file mode 100644 index 0000000000..d5dec647db --- /dev/null +++ b/v0.6.16/examples/gross_pitaevskii_2D/6ff09bcb.svg @@ -0,0 +1,506 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/gross_pitaevskii_2D/index.html b/v0.6.16/examples/gross_pitaevskii_2D/index.html new file mode 100644 index 0000000000..8f11cf21c1 --- /dev/null +++ b/v0.6.16/examples/gross_pitaevskii_2D/index.html @@ -0,0 +1,33 @@ + +Gross-Pitaevskii equation with external magnetic field · DFTK.jl

    Gross-Pitaevskii equation with external magnetic field

    We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10

    using DFTK
    +using StaticArrays
    +using Plots
    +
    +# Unit cell. Having one of the lattice vectors as zero means a 2D system
    +a = 15
    +lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];
    +
    +# Confining scalar potential, and magnetic vector potential
    +pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2
    +ω = .6
    +Apot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]
    +Apot(X) = Apot(X...);
    +
    +
    +# Parameters
    +Ecut = 20  # Increase this for production
    +η = 500
    +C = η/2
    +α = 2
    +n_electrons = 1;  # Increase this for fun
    +
    +# Collect all the terms, build and run the model
    +terms = [Kinetic(),
    +         ExternalFromReal(X -> pot(X...)),
    +         LocalNonlinearity(ρ -> C * ρ^α),
    +         Magnetic(Apot),
    +]
    +model = Model(lattice; n_electrons, terms, spin_polarization=:spinless)  # spinless electrons
    +basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))
    +scfres = direct_minimization(basis, tol=1e-5)  # Reduce tol for production
    +heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
    Example block output
    diff --git a/v0.6.16/examples/input_output.ipynb b/v0.6.16/examples/input_output.ipynb new file mode 100644 index 0000000000..277312362c --- /dev/null +++ b/v0.6.16/examples/input_output.ipynb @@ -0,0 +1,407 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Input and output formats" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This section provides an overview of the input and output formats\n", + "supported by DFTK, usually via integration with a third-party library.\n", + "\n", + "## Reading / writing files supported by AtomsIO\n", + "[AtomsIO](https://github.com/mfherbst/AtomsIO.jl) is a Julia package which supports\n", + "reading / writing atomistic structures from / to a large range of file formats.\n", + "Supported formats include Crystallographic Information Framework (CIF),\n", + "XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files\n", + "or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …).\n", + "The full list of formats is is available in the\n", + "[AtomsIO documentation](https://mfherbst.github.io/AtomsIO.jl/stable).\n", + "\n", + "The AtomsIO functionality is split into two packages. The main package, `AtomsIO` itself,\n", + "only depends on packages, which are registered in the Julia General package registry.\n", + "In contrast `AtomsIOPython` extends `AtomsIO` by parsers depending on python packages,\n", + "which are automatically managed via `PythonCall`. While it thus provides the full set of\n", + "supported IO formats, this also adds additional practical complications, so some users\n", + "may choose not to use `AtomsIOPython`.\n", + "\n", + "As an example we start the calculation of a simple antiferromagnetic iron crystal\n", + "using a Quantum-Espresso input file, [Fe_afm.pwi](Fe_afm.pwi).\n", + "For more details about calculations on magnetic systems\n", + "using collinear spin, see Collinear spin and magnetic systems.\n", + "\n", + "First we parse the Quantum Espresso input file using AtomsIO,\n", + "which reads the lattice, atomic positions and initial magnetisation\n", + "from the input file and returns it as an\n", + "[AtomsBase](https://github.com/JuliaMolSim/AtomsBase.jl) `AbstractSystem`,\n", + "the JuliaMolSim community standard for representing atomic systems." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Fe₂, periodic = TTT):\n bounding_box : [ 2.86814 0 0;\n 0 2.86814 0;\n 0 0 2.86814]u\"Å\"\n\n Atom(Fe, [ 0, 0, 0]u\"Å\")\n Atom(Fe, [ 1.43407, 1.43407, 0]u\"Å\")\n\n .------. \n /| | \n * | | \n | | | \n | .------. \n |/ Fe / \n Fe-----* \n" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using AtomsIO # Use Julia-only IO parsers\n", + "using AtomsIOPython # Use python-based IO parsers (e.g. ASE)\n", + "system = load_system(\"Fe_afm.pwi\")" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Next we attach pseudopotential information, since currently the parser is not\n", + "yet capable to read this information from the file." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Fe₂, periodic = TTT):\n bounding_box : [ 2.86814 0 0;\n 0 2.86814 0;\n 0 0 2.86814]u\"Å\"\n\n Atom(Fe, [ 0, 0, 0]u\"Å\")\n Atom(Fe, [ 1.43407, 1.43407, 0]u\"Å\")\n\n .------. \n /| | \n * | | \n | | | \n | .------. \n |/ Fe / \n Fe-----* \n" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "system = attach_psp(system, Fe=\"hgh/pbe/fe-q16.hgh\")" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Finally we make use of DFTK's AtomsBase integration to run the calculation." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", + "--- --------------- --------- --------- ------ ---- ------\n", + " 1 -223.7488368636 0.22 -6.321 5.4 411ms\n", + " 2 -224.1618993437 -0.38 -0.21 -3.326 1.7 202ms\n", + " 3 -224.2176957938 -1.25 -1.06 -1.611 3.2 320ms\n", + " 4 -224.2198800705 -2.66 -1.46 -1.194 1.1 174ms\n", + " 5 -224.2207987376 -3.04 -1.73 -0.821 1.0 168ms\n", + " 6 -224.2212145100 -3.38 -2.00 -0.483 1.0 167ms\n", + " 7 -224.2213709551 -3.81 -2.35 -0.237 1.2 170ms\n", + " 8 -224.2214136507 -4.37 -2.82 -0.089 1.8 180ms\n", + " 9 -224.2214204737 -5.17 -3.48 -0.008 2.3 239ms\n", + " 10 -224.2214206744 -6.70 -3.72 0.001 3.0 233ms\n", + " 11 -224.2214207022 -7.56 -3.91 -0.002 1.0 161ms\n", + " 12 -224.2214207161 -7.86 -4.25 -0.000 1.0 162ms\n", + " 13 -224.2214207185 -8.62 -4.68 0.000 1.8 173ms\n", + " 14 -224.2214207187 -9.65 -5.24 0.000 1.7 177ms\n", + " 15 -224.2214207187 -10.43 -5.71 0.000 1.8 207ms\n", + " 16 -224.2214207187 -11.65 -6.08 -0.000 2.9 219ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "model = model_LDA(system; temperature=0.01)\n", + "basis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))\n", + "ρ0 = guess_density(basis, system)\n", + "scfres = self_consistent_field(basis, ρ=ρ0);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "!!! warning \"DFTK data formats are not yet fully matured\"\n", + " The data format in which DFTK saves data as well as the general interface\n", + " of the `load_scfres` and `save_scfres` pair of functions\n", + " are not yet fully matured. If you use the functions or the produced files\n", + " expect that you need to adapt your routines in the future even with patch\n", + " version bumps." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Writing VTK files for visualization\n", + "For visualizing the density or the Kohn-Sham orbitals DFTK supports storing\n", + "the result of an SCF calculations in the form of VTK files.\n", + "These can afterwards be visualized using tools such\n", + "as [paraview](https://www.paraview.org/).\n", + "Using this feature requires\n", + "the [WriteVTK.jl](https://github.com/jipolanco/WriteVTK.jl/) Julia package." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using WriteVTK\n", + "save_scfres(\"iron_afm.vts\", scfres; save_ψ=true);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "This will save the iron calculation above into the file `iron_afm.vts`,\n", + "using `save_ψ=true` to also include the KS orbitals." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Parsable data-export using json\n", + "Many structures in DFTK support the (unexported) `todict` function,\n", + "which returns a simplified dictionary representation of the data." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Dict{String, Float64} with 9 entries:\n \"AtomicNonlocal\" => -4.34593\n \"PspCorrection\" => 7.03001\n \"Ewald\" => -161.527\n \"total\" => -224.221\n \"Entropy\" => -0.0306478\n \"Kinetic\" => 75.6631\n \"AtomicLocal\" => -161.128\n \"Hartree\" => 41.397\n \"Xc\" => -21.2803" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "DFTK.todict(scfres.energies)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "This in turn can be easily written to disk using a JSON library.\n", + "Currently we integrate most closely with `JSON3`,\n", + "which is thus recommended." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"AtomicNonlocal\": -4.345930974108298,\n", + " \"PspCorrection\": 7.03000636467455,\n", + " \"Ewald\": -161.52650757200072,\n", + " \"total\": -224.22142071873404,\n", + " \"Entropy\": -0.030647820362244102,\n", + " \"Kinetic\": 75.66305013621486,\n", + " \"AtomicLocal\": -161.12810923999476,\n", + " \"Hartree\": 41.39700691143014,\n", + " \"Xc\": -21.28028852458757\n", + "}\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using JSON3\n", + "open(\"iron_afm_energies.json\", \"w\") do io\n", + " JSON3.pretty(io, DFTK.todict(scfres.energies))\n", + "end\n", + "println(read(\"iron_afm_energies.json\", String))" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Once JSON3 is loaded, additionally a convenience function for saving\n", + "a summary of `scfres` objects using `save_scfres` is available:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using JSON3\n", + "save_scfres(\"iron_afm.json\", scfres)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Similarly a summary of the band data (occupations, eigenvalues, εF, etc.)\n", + "for post-processing can be dumped using `save_bands`:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "save_bands(\"iron_afm_scfres.json\", scfres)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Notably this function works both for the results obtained\n", + "by `self_consistent_field` as well as `compute_bands`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: The provided cell is a supercell: the returned k-path is the standard k-path of the associated primitive cell in the basis of the supercell reciprocal lattice.\n", + "│ cell =\n", + "│ Spglib.SpglibCell{Float64, Float64, Int64, Float64}\n", + "│ lattice:\n", + "│ 5.41999997388764 0.0 0.0\n", + "│ 0.0 5.41999997388764 0.0\n", + "│ 0.0 0.0 5.41999997388764\n", + "│ 2 atomic positions:\n", + "│ 0.0 0.0 0.0\n", + "│ 0.5 0.5 0.0\n", + "│ 2 atoms:\n", + "│ 1 1\n", + "│ 2 magmoms:\n", + "│ 0.0 0.0\n", + "│ \n", + "└ @ BrillouinSpglibExt ~/.julia/packages/Brillouin/ESWPN/ext/BrillouinSpglibExt.jl:28\n" + ] + } + ], + "cell_type": "code", + "source": [ + "bands = compute_bands(scfres, kline_density=10)\n", + "save_bands(\"iron_afm_bands.json\", bands)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "## Writing and reading JLD2 files\n", + "The full state of a DFTK self-consistent field calculation can be\n", + "stored on disk in form of an [JLD2.jl](https://github.com/JuliaIO/JLD2.jl) file.\n", + "This file can be read from other Julia scripts\n", + "as well as other external codes supporting the HDF5 file format\n", + "(since the JLD2 format is based on HDF5). This includes notably `h5py`\n", + "to read DFTK output from python." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using JLD2\n", + "save_scfres(\"iron_afm.jld2\", scfres)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Saving such JLD2 files supports some options, such as `save_ψ=false`, which avoids saving\n", + "the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used\n", + "with `save_bands`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Since such JLD2 can also be read by DFTK to start or continue a calculation,\n", + "these can also be used for checkpointing or for transferring results\n", + "to a different computer.\n", + "See Saving SCF results on disk and SCF checkpoints for details." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "(Cleanup files generated by this notebook.)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6-element Vector{Nothing}:\n nothing\n nothing\n nothing\n nothing\n nothing\n nothing" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "rm.([\"iron_afm.vts\", \"iron_afm.jld2\",\n", + " \"iron_afm.json\", \"iron_afm_energies.json\", \"iron_afm_scfres.json\",\n", + " \"iron_afm_bands.json\"])" + ], + "metadata": {}, + "execution_count": 11 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/input_output/index.html b/v0.6.16/examples/input_output/index.html new file mode 100644 index 0000000000..945c637823 --- /dev/null +++ b/v0.6.16/examples/input_output/index.html @@ -0,0 +1,105 @@ + +Input and output formats · DFTK.jl

    Input and output formats

    This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.

    Reading / writing files supported by AtomsIO

    AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.

    The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.

    As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.

    First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.

    using AtomsIO        # Use Julia-only IO parsers
    +using AtomsIOPython  # Use python-based IO parsers (e.g. ASE)
    +system = load_system("Fe_afm.pwi")
    FlexibleSystem(Fe₂, periodic = TTT):
    +    bounding_box      : [ 2.86814        0        0;
    +                                0  2.86814        0;
    +                                0        0  2.86814]u"Å"
    +
    +    Atom(Fe, [       0,        0,        0]u"Å")
    +    Atom(Fe, [ 1.43407,  1.43407,        0]u"Å")
    +
    +      .------.  
    +     /|      |  
    +    * |      |  
    +    | |      |  
    +    | .------.  
    +    |/  Fe  /   
    +    Fe-----*    
    +

    Next we attach pseudopotential information, since currently the parser is not yet capable to read this information from the file.

    using DFTK
    +system = attach_psp(system, Fe="hgh/pbe/fe-q16.hgh")
    FlexibleSystem(Fe₂, periodic = TTT):
    +    bounding_box      : [ 2.86814        0        0;
    +                                0  2.86814        0;
    +                                0        0  2.86814]u"Å"
    +
    +    Atom(Fe, [       0,        0,        0]u"Å")
    +    Atom(Fe, [ 1.43407,  1.43407,        0]u"Å")
    +
    +      .------.  
    +     /|      |  
    +    * |      |  
    +    | |      |  
    +    | .------.  
    +    |/  Fe  /   
    +    Fe-----*    
    +

    Finally we make use of DFTK's AtomsBase integration to run the calculation.

    model = model_LDA(system; temperature=0.01)
    +basis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))
    +ρ0 = guess_density(basis, system)
    +scfres = self_consistent_field(basis, ρ=ρ0);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -223.7488030233                    0.22   -6.321    5.5    335ms
    +  2   -224.1613650789       -0.38       -0.21   -3.326    1.7    165ms
    +  3   -224.2176515880       -1.25       -1.06   -1.613    3.1    228ms
    +  4   -224.2198783230       -2.65       -1.46   -1.193    1.1    178ms
    +  5   -224.2207978678       -3.04       -1.73   -0.822    1.0    147ms
    +  6   -224.2212102529       -3.38       -2.00   -0.489    1.0    191ms
    +  7   -224.2213723686       -3.79       -2.35   -0.232    1.7    158ms
    +  8   -224.2214148339       -4.37       -2.86   -0.081    1.8    163ms
    +  9   -224.2214205261       -5.24       -3.51   -0.008    2.3    177ms
    + 10   -224.2214206830       -6.80       -3.75    0.001    3.2    221ms
    + 11   -224.2214207077       -7.61       -3.98   -0.002    1.1    142ms
    + 12   -224.2214207174       -8.01       -4.35   -0.000    1.2    188ms
    + 13   -224.2214207186       -8.93       -4.85    0.000    1.6    151ms
    + 14   -224.2214207187       -9.88       -5.25    0.000    1.8    160ms
    + 15   -224.2214207187      -10.56       -5.72   -0.000    2.1    180ms
    + 16   -224.2214207187      -11.70       -6.08    0.000    2.0    167ms
    DFTK data formats are not yet fully matured

    The data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.

    Writing VTK files for visualization

    For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.

    using WriteVTK
    +save_scfres("iron_afm.vts", scfres; save_ψ=true);

    This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.

    Parsable data-export using json

    Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.

    DFTK.todict(scfres.energies)
    Dict{String, Float64} with 9 entries:
    +  "AtomicNonlocal" => -4.34593
    +  "PspCorrection"  => 7.03001
    +  "Ewald"          => -161.527
    +  "total"          => -224.221
    +  "Entropy"        => -0.0306478
    +  "Kinetic"        => 75.663
    +  "AtomicLocal"    => -161.128
    +  "Hartree"        => 41.397
    +  "Xc"             => -21.2803

    This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.

    using JSON3
    +open("iron_afm_energies.json", "w") do io
    +    JSON3.pretty(io, DFTK.todict(scfres.energies))
    +end
    +println(read("iron_afm_energies.json", String))
    {
    +    "AtomicNonlocal": -4.345930943774633,
    +    "PspCorrection": 7.03000636467455,
    +    "Ewald": -161.52650757200072,
    +    "total": -224.2214207187338,
    +    "Entropy": -0.03064781782720198,
    +    "Kinetic": 75.66304980298293,
    +    "AtomicLocal": -161.12810922765678,
    +    "Hartree": 41.39700718827429,
    +    "Xc": -21.280288513406216
    +}

    Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:

    using JSON3
    +save_scfres("iron_afm.json", scfres)

    Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:

    save_bands("iron_afm_scfres.json", scfres)

    Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:

    bands = compute_bands(scfres, kline_density=10)
    +save_bands("iron_afm_bands.json", bands)
    ┌ Warning: The provided cell is a supercell: the returned k-path is the standard k-path of the associated primitive cell in the basis of the supercell reciprocal lattice.
    +  cell =
    +   Spglib.SpglibCell{Float64, Float64, Int64, Float64}
    +    lattice:
    +      5.41999997388764  0.0  0.0
    +      0.0  5.41999997388764  0.0
    +      0.0  0.0  5.41999997388764
    +    2 atomic positions:
    +      0.0  0.0  0.0
    +      0.5  0.5  0.0
    +    2 atoms:
    +      1  1
    +    2 magmoms:
    +      0.0  0.0
    +
    +@ BrillouinSpglibExt ~/.julia/packages/Brillouin/ESWPN/ext/BrillouinSpglibExt.jl:28

    Writing and reading JLD2 files

    The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5). This includes notably h5py to read DFTK output from python.

    using JLD2
    +save_scfres("iron_afm.jld2", scfres)

    Saving such JLD2 files supports some options, such as save_ψ=false, which avoids saving the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used with save_bands.

    Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.

    (Cleanup files generated by this notebook.)

    rm.(["iron_afm.vts", "iron_afm.jld2",
    +     "iron_afm.json", "iron_afm_energies.json", "iron_afm_scfres.json",
    +     "iron_afm_bands.json"])
    6-element Vector{Nothing}:
    + nothing
    + nothing
    + nothing
    + nothing
    + nothing
    + nothing
    diff --git a/v0.6.16/examples/metallic_systems.ipynb b/v0.6.16/examples/metallic_systems.ipynb new file mode 100644 index 0000000000..cd86dd3f36 --- /dev/null +++ b/v0.6.16/examples/metallic_systems.ipynb @@ -0,0 +1,310 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Temperature and metallic systems\n", + "\n", + "In this example we consider the modeling of a magnesium lattice\n", + "as a simple example for a metallic system.\n", + "For our treatment we will use the PBE exchange-correlation functional.\n", + "First we import required packages and setup the lattice.\n", + "Again notice that DFTK uses the convention that lattice vectors are\n", + "specified column by column." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "a = 3.01794 # bohr\n", + "b = 5.22722 # bohr\n", + "c = 9.77362 # bohr\n", + "lattice = [[-a -a 0]; [-b b 0]; [0 0 -c]]\n", + "Mg = ElementPsp(:Mg; psp=load_psp(\"hgh/pbe/Mg-q2\"))\n", + "atoms = [Mg, Mg]\n", + "positions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Next we build the PBE model and discretize it.\n", + "Since magnesium is a metal we apply a small smearing\n", + "temperature to ease convergence using the Fermi-Dirac\n", + "smearing scheme. Note that both the `Ecut` is too small\n", + "as well as the minimal $k$-point spacing\n", + "`kspacing` far too large to give a converged result.\n", + "These have been selected to obtain a fast execution time.\n", + "By default `PlaneWaveBasis` chooses a `kspacing`\n", + "of `2π * 0.022` inverse Bohrs, which is much more reasonable." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "kspacing = 0.945 / u\"angstrom\" # Minimal spacing of k-points,\n", + "# in units of wavevectors (inverse Bohrs)\n", + "Ecut = 5 # Kinetic energy cutoff in Hartree\n", + "temperature = 0.01 # Smearing temperature in Hartree\n", + "smearing = DFTK.Smearing.FermiDirac() # Smearing method\n", + "# also supported: Gaussian,\n", + "# MarzariVanderbilt,\n", + "# and MethfesselPaxton(order)\n", + "\n", + "model = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];\n", + " temperature, smearing)\n", + "kgrid = kgrid_from_maximal_spacing(lattice, kspacing)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Finally we run the SCF. Two magnesium atoms in\n", + "our pseudopotential model result in four valence electrons being explicitly\n", + "treated. Nevertheless this SCF will solve for eight bands by default\n", + "in order to capture partial occupations beyond the Fermi level due to\n", + "the employed smearing scheme. In this example we use a damping of `0.8`.\n", + "The default `LdosMixing` should be suitable to converge metallic systems\n", + "like the one we model here. For the sake of demonstration we still switch to\n", + "Kerker mixing here." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -1.743077534854 -1.28 5.3 1.82s\n", + " 2 -1.743504181321 -3.37 -1.70 1.3 875ms\n", + " 3 -1.743612448124 -3.97 -2.82 3.5 31.6ms\n", + " 4 -1.743616699789 -5.37 -3.54 4.2 53.4ms\n", + " 5 -1.743616747736 -7.32 -4.50 2.7 28.6ms\n", + " 6 -1.743616749867 -8.67 -5.38 3.5 46.8ms\n", + " 7 -1.743616749884 -10.75 -6.56 3.3 32.8ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "9-element Vector{Float64}:\n 1.9999999999941416\n 1.9985518372674902\n 1.9905514370920794\n 1.2449674210618193e-17\n 1.2448821964557237e-17\n 1.0289498065754364e-17\n 1.028862217818269e-17\n 2.988416905448088e-19\n 1.6623615818517223e-21" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "scfres.occupation[1]" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.7450614 \n AtomicLocal 0.3193180 \n AtomicNonlocal 0.3192776 \n Ewald -2.1544222\n PspCorrection -0.1026056\n Hartree 0.0061603 \n Xc -0.8615676\n Entropy -0.0148387\n\n total -1.743616749884" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "The fact that magnesium is a metal is confirmed\n", + "by plotting the density of states around the Fermi level.\n", + "To get better plots, we decrease the k spacing a bit for this step" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u\"Å\")\n", + "bands = compute_bands(scfres, kgrid_dos)\n", + "plot_dos(bands)" + ], + "metadata": {}, + "execution_count": 6 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/metallic_systems/78d8fa2f.svg b/v0.6.16/examples/metallic_systems/78d8fa2f.svg new file mode 100644 index 0000000000..26f85c9185 --- /dev/null +++ b/v0.6.16/examples/metallic_systems/78d8fa2f.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/metallic_systems/index.html b/v0.6.16/examples/metallic_systems/index.html new file mode 100644 index 0000000000..7b6319f1da --- /dev/null +++ b/v0.6.16/examples/metallic_systems/index.html @@ -0,0 +1,54 @@ + +Temperature and metallic systems · DFTK.jl

    Temperature and metallic systems

    In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.

    using DFTK
    +using Plots
    +using Unitful
    +using UnitfulAtomic
    +
    +a = 3.01794  # bohr
    +b = 5.22722  # bohr
    +c = 9.77362  # bohr
    +lattice = [[-a -a  0]; [-b  b  0]; [0   0 -c]]
    +Mg = ElementPsp(:Mg; psp=load_psp("hgh/pbe/Mg-q2"))
    +atoms     = [Mg, Mg]
    +positions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];

    Next we build the PBE model and discretize it. Since magnesium is a metal we apply a small smearing temperature to ease convergence using the Fermi-Dirac smearing scheme. Note that both the Ecut is too small as well as the minimal $k$-point spacing kspacing far too large to give a converged result. These have been selected to obtain a fast execution time. By default PlaneWaveBasis chooses a kspacing of 2π * 0.022 inverse Bohrs, which is much more reasonable.

    kspacing = 0.945 / u"angstrom"        # Minimal spacing of k-points,
    +#                                      in units of wavevectors (inverse Bohrs)
    +Ecut = 5                              # Kinetic energy cutoff in Hartree
    +temperature = 0.01                    # Smearing temperature in Hartree
    +smearing = DFTK.Smearing.FermiDirac() # Smearing method
    +#                                      also supported: Gaussian,
    +#                                      MarzariVanderbilt,
    +#                                      and MethfesselPaxton(order)
    +
    +model = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];
    +                  temperature, smearing)
    +kgrid = kgrid_from_maximal_spacing(lattice, kspacing)
    +basis = PlaneWaveBasis(model; Ecut, kgrid);

    Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.

    scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -1.743077693327                   -1.29    5.3   38.2ms
    +  2   -1.743506586489       -3.37       -1.70    1.2   65.2ms
    +  3   -1.743612098629       -3.98       -2.83    3.5   32.2ms
    +  4   -1.743616705986       -5.34       -3.53    3.7   34.6ms
    +  5   -1.743616747838       -7.38       -4.52    2.7   29.8ms
    +  6   -1.743616749867       -8.69       -5.43    3.7   36.1ms
    +  7   -1.743616749884      -10.76       -6.51    2.7   31.7ms
    scfres.occupation[1]
    9-element Vector{Float64}:
    + 1.9999999999941416
    + 1.9985518376668387
    + 1.9905514359594418
    + 1.2449652008076428e-17
    + 1.2448799763199403e-17
    + 1.0289490354405566e-17
    + 1.0288614467288694e-17
    + 2.988419669418772e-19
    + 1.6623263219908765e-21
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             0.7450615 
    +    AtomicLocal         0.3193180 
    +    AtomicNonlocal      0.3192775 
    +    Ewald               -2.1544222
    +    PspCorrection       -0.1026056
    +    Hartree             0.0061603 
    +    Xc                  -0.8615676
    +    Entropy             -0.0148387
    +
    +    total               -1.743616749884

    The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step

    kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u"Å")
    +bands = compute_bands(scfres, kgrid_dos)
    +plot_dos(bands)
    Example block output
    diff --git a/v0.6.16/examples/polarizability.ipynb b/v0.6.16/examples/polarizability.ipynb new file mode 100644 index 0000000000..5307550326 --- /dev/null +++ b/v0.6.16/examples/polarizability.ipynb @@ -0,0 +1,284 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Polarizability by linear response\n", + "\n", + "We compute the polarizability of a Helium atom. The polarizability\n", + "is defined as the change in dipole moment\n", + "$$\n", + "μ = ∫ r ρ(r) dr\n", + "$$\n", + "with respect to a small uniform electric field $E = -x$.\n", + "\n", + "We compute this in two ways: first by finite differences (applying a\n", + "finite electric field), then by linear response. Note that DFTK is\n", + "not really adapted to isolated atoms because it uses periodic\n", + "boundary conditions. Nevertheless we can simply embed the Helium\n", + "atom in a large enough box (although this is computationally wasteful).\n", + "\n", + "As in other tests, this is not fully converged, convergence\n", + "parameters were simply selected for fast execution on CI," + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "\n", + "a = 10.\n", + "lattice = a * I(3) # cube of $a$ bohrs\n", + "# Helium at the center of the box\n", + "atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n", + "positions = [[1/2, 1/2, 1/2]]\n", + "\n", + "\n", + "kgrid = [1, 1, 1] # no k-point sampling for an isolated system\n", + "Ecut = 30\n", + "tol = 1e-8\n", + "\n", + "# dipole moment of a given density (assuming the current geometry)\n", + "function dipole(basis, ρ)\n", + " rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]\n", + " sum(rr .* ρ) * basis.dvol\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Using finite differences\n", + "We first compute the polarizability by finite differences.\n", + "First compute the dipole moment at rest:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770416984711 -0.52 9.0 188ms\n", + " 2 -2.771692091418 -2.89 -1.32 1.0 130ms\n", + " 3 -2.771714336240 -4.65 -2.45 1.0 108ms\n", + " 4 -2.771714633283 -6.53 -3.14 1.0 141ms\n", + " 5 -2.771714714203 -7.09 -3.99 2.0 108ms\n", + " 6 -2.771714715147 -9.03 -4.68 1.0 94.8ms\n", + " 7 -2.771714715249 -9.99 -5.93 2.0 128ms\n", + " 8 -2.771714715249 -12.67 -6.07 2.0 112ms\n", + " 9 -2.771714715250 -12.85 -6.89 1.0 112ms\n", + " 10 -2.771714715250 -13.86 -7.71 2.0 123ms\n", + " 11 -2.771714715250 -14.12 -8.81 2.0 120ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "-0.00013457360524221054" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "model = model_LDA(lattice, atoms, positions; symmetries=false)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "res = self_consistent_field(basis; tol)\n", + "μref = dipole(basis, res.ρ)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Then in a small uniform field:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770474691919 -0.53 9.0 369ms\n", + " 2 -2.771766697329 -2.89 -1.31 1.0 176ms\n", + " 3 -2.771800947978 -4.47 -2.63 1.0 91.7ms\n", + " 4 -2.771802072956 -5.95 -4.11 2.0 140ms\n", + " 5 -2.771802074424 -8.83 -5.18 1.0 117ms\n", + " 6 -2.771802074476 -10.28 -5.65 2.0 108ms\n", + " 7 -2.771802074476 -12.33 -6.19 1.0 120ms\n", + " 8 -2.771802074476 -13.62 -7.13 1.0 98.3ms\n", + " 9 -2.771802074476 -14.18 -7.35 2.0 131ms\n", + " 10 -2.771802074476 + -14.10 -8.01 1.0 107ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "0.01761222152540701" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "ε = .01\n", + "model_ε = model_LDA(lattice, atoms, positions;\n", + " extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n", + " symmetries=false)\n", + "basis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)\n", + "res_ε = self_consistent_field(basis_ε; tol)\n", + "με = dipole(basis_ε, res_ε.ρ)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reference dipole: -0.00013457360524221054\n", + "Displaced dipole: 0.01761222152540701\n", + "Polarizability : 1.774679513064922\n" + ] + } + ], + "cell_type": "code", + "source": [ + "polarizability = (με - μref) / ε\n", + "\n", + "println(\"Reference dipole: $μref\")\n", + "println(\"Displaced dipole: $με\")\n", + "println(\"Polarizability : $polarizability\")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The result on more converged grids is very close to published results.\n", + "For example [DOI 10.1039/C8CP03569E](https://doi.org/10.1039/C8CP03569E)\n", + "quotes **1.65** with LSDA and **1.38** with CCSD(T)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Using linear response\n", + "Now we use linear response to compute this analytically; we refer to standard\n", + "textbooks for the formalism. In the following, $χ_0$ is the\n", + "independent-particle polarizability, and $K$ the\n", + "Hartree-exchange-correlation kernel. We denote with $δV_{\\rm ext}$ an external\n", + "perturbing potential (like in this case the uniform electric field). Then:\n", + "$$\n", + "δρ = χ_0 δV = χ_0 (δV_{\\rm ext} + K δρ),\n", + "$$\n", + "which implies\n", + "$$\n", + "δρ = (1-χ_0 K)^{-1} χ_0 δV_{\\rm ext}.\n", + "$$\n", + "From this we identify the polarizability operator to be $χ = (1-χ_0 K)^{-1} χ_0$.\n", + "Numerically, we apply $χ$ to $δV = -x$ by solving a linear equation\n", + "(the Dyson equation) iteratively." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: using KrylovKit.basis in module ##388 conflicts with an existing identifier.\n", + "[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920783599e-01\n", + "[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766551498629e-03\n", + "[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852767923492e-04\n", + "[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694603522305e-06\n", + "[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088786413993e-08\n", + "[ Info: GMRES linsolve in iter 1; step 6: normres = 6.275252207663e-11\n", + "[ Info: GMRES linsolve in iter 1; step 7: normres = 7.278760873300e-13\n", + "[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 7.278760873300e-13\n", + "[ Info: GMRES linsolve in iter 2; step 1: normres = 9.948526903466e-11\n", + "[ Info: GMRES linsolve in iter 2; step 2: normres = 1.135482953648e-11\n", + "[ Info: GMRES linsolve in iter 2; step 3: normres = 3.166331063675e-13\n", + "[ Info: GMRES linsolve in iter 2; finished at step 3: normres = 3.166331063675e-13\n", + "┌ Info: GMRES linsolve converged at iteration 2, step 3:\n", + "│ * norm of residual = 3.166266955614639e-13\n", + "└ * number of operations = 12\n", + "Non-interacting polarizability: 1.925712535935873\n", + "Interacting polarizability: 1.7736548614803194\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using KrylovKit\n", + "\n", + "# Apply $(1- χ_0 K)$\n", + "function dielectric_operator(δρ)\n", + " δV = apply_kernel(basis, δρ; res.ρ)\n", + " χ0δV = apply_χ0(res, δV)\n", + " δρ - χ0δV\n", + "end\n", + "\n", + "# `δVext` is the potential from a uniform field interacting with the dielectric dipole\n", + "# of the density.\n", + "δVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]\n", + "δVext = cat(δVext; dims=4)\n", + "\n", + "# Apply $χ_0$ once to get non-interacting dipole\n", + "δρ_nointeract = apply_χ0(res, δVext)\n", + "\n", + "# Solve Dyson equation to get interacting dipole\n", + "δρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]\n", + "\n", + "println(\"Non-interacting polarizability: $(dipole(basis, δρ_nointeract))\")\n", + "println(\"Interacting polarizability: $(dipole(basis, δρ))\")" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "As expected, the interacting polarizability matches the finite difference\n", + "result. The non-interacting polarizability is higher." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/polarizability/index.html b/v0.6.16/examples/polarizability/index.html new file mode 100644 index 0000000000..18f1e2504d --- /dev/null +++ b/v0.6.16/examples/polarizability/index.html @@ -0,0 +1,73 @@ + +Polarizability by linear response · DFTK.jl

    Polarizability by linear response

    We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment

    \[μ = ∫ r ρ(r) dr\]

    with respect to a small uniform electric field $E = -x$.

    We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).

    As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,

    using DFTK
    +using LinearAlgebra
    +
    +a = 10.
    +lattice = a * I(3)  # cube of ``a`` bohrs
    +# Helium at the center of the box
    +atoms     = [ElementPsp(:He; psp=load_psp("hgh/lda/He-q2"))]
    +positions = [[1/2, 1/2, 1/2]]
    +
    +
    +kgrid = [1, 1, 1]  # no k-point sampling for an isolated system
    +Ecut = 30
    +tol = 1e-8
    +
    +# dipole moment of a given density (assuming the current geometry)
    +function dipole(basis, ρ)
    +    rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]
    +    sum(rr .* ρ) * basis.dvol
    +end;

    Using finite differences

    We first compute the polarizability by finite differences. First compute the dipole moment at rest:

    model = model_LDA(lattice, atoms, positions; symmetries=false)
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +res   = self_consistent_field(basis; tol)
    +μref  = dipole(basis, res.ρ)
    -0.00013457369486920886

    Then in a small uniform field:

    ε = .01
    +model_ε = model_LDA(lattice, atoms, positions;
    +                    extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],
    +                    symmetries=false)
    +basis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)
    +res_ε   = self_consistent_field(basis_ε; tol)
    +με = dipole(basis_ε, res_ε.ρ)
    0.017612221392540827
    polarizability = (με - μref) / ε
    +
    +println("Reference dipole:  $μref")
    +println("Displaced dipole:  $με")
    +println("Polarizability :   $polarizability")
    Reference dipole:  -0.00013457369486920886
    +Displaced dipole:  0.017612221392540827
    +Polarizability :   1.7746795087410037

    The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).

    Using linear response

    Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, $χ_0$ is the independent-particle polarizability, and $K$ the Hartree-exchange-correlation kernel. We denote with $δV_{\rm ext}$ an external perturbing potential (like in this case the uniform electric field). Then:

    \[δρ = χ_0 δV = χ_0 (δV_{\rm ext} + K δρ),\]

    which implies

    \[δρ = (1-χ_0 K)^{-1} χ_0 δV_{\rm ext}.\]

    From this we identify the polarizability operator to be $χ = (1-χ_0 K)^{-1} χ_0$. Numerically, we apply $χ$ to $δV = -x$ by solving a linear equation (the Dyson equation) iteratively.

    using KrylovKit
    +
    +# Apply ``(1- χ_0 K)``
    +function dielectric_operator(δρ)
    +    δV = apply_kernel(basis, δρ; res.ρ)
    +    χ0δV = apply_χ0(res, δV)
    +    δρ - χ0δV
    +end
    +
    +# `δVext` is the potential from a uniform field interacting with the dielectric dipole
    +# of the density.
    +δVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]
    +δVext = cat(δVext; dims=4)
    +
    +# Apply ``χ_0`` once to get non-interacting dipole
    +δρ_nointeract = apply_χ0(res, δVext)
    +
    +# Solve Dyson equation to get interacting dipole
    +δρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]
    +
    +println("Non-interacting polarizability: $(dipole(basis, δρ_nointeract))")
    +println("Interacting polarizability:     $(dipole(basis, δρ))")
    WARNING: using KrylovKit.basis in module Main conflicts with an existing identifier.
    +[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920768283e-01
    +[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766553531297e-03
    +[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852768025944e-04
    +[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694601328841e-06
    +[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088784894007e-08
    +[ Info: GMRES linsolve in iter 1; step 6: normres = 6.277229401226e-11
    +[ Info: GMRES linsolve in iter 1; step 7: normres = 8.021515292178e-13
    +[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 8.021515292178e-13
    +[ Info: GMRES linsolve in iter 2; step 1: normres = 3.788511883957e-10
    +[ Info: GMRES linsolve in iter 2; step 2: normres = 1.892768606670e-11
    +[ Info: GMRES linsolve in iter 2; step 3: normres = 1.102688190171e-12
    +[ Info: GMRES linsolve in iter 2; finished at step 3: normres = 1.102688190171e-12
    +┌ Info: GMRES linsolve converged at iteration 2, step 3:
    +*  norm of residual = 1.1027175480727083e-12
    +*  number of operations = 12
    +Non-interacting polarizability: 1.925712532696704
    +Interacting polarizability:     1.773654856414992

    As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.

    diff --git a/v0.6.16/examples/pseudopotentials.ipynb b/v0.6.16/examples/pseudopotentials.ipynb new file mode 100644 index 0000000000..9db2d7e3ed --- /dev/null +++ b/v0.6.16/examples/pseudopotentials.ipynb @@ -0,0 +1,685 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Pseudopotentials\n", + "\n", + "In this example, we'll look at how to use various pseudopotential (PSP)\n", + "formats in DFTK and discuss briefly the utility and importance of\n", + "pseudopotentials.\n", + "\n", + "Currently, DFTK supports norm-conserving (NC) PSPs in\n", + "separable (Kleinman-Bylander) form. Two file formats can currently\n", + "be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs\n", + "and numeric Unified Pseudopotential Format (UPF) PSPs.\n", + "\n", + "In brief, the pseudopotential approach replaces the all-electron\n", + "atomic potential with an effective atomic potential. In this pseudopotential,\n", + "tightly-bound core electrons are completely eliminated (\"frozen\") and\n", + "chemically-active valence electron wavefunctions are replaced with\n", + "smooth pseudo-wavefunctions whose Fourier representations decay quickly.\n", + "Both these transformations aim at reducing the number of Fourier modes required\n", + "to accurately represent the wavefunction of the system, greatly increasing\n", + "computational efficiency.\n", + "\n", + "Different PSP generation codes produce various file formats which contain the\n", + "same general quantities required for pesudopotential evaluation. HGH PSPs\n", + "are constructed from a fixed functional form based on Gaussians, and the files\n", + "simply tablulate various coefficients fitted for a given element. UPF PSPs\n", + "take a more flexible approach where the functional form used to generate the\n", + "PSP is arbitrary, and the resulting functions are tabulated on a radial grid\n", + "in the file. The UPF file format is documented\n", + "[on the Quantum Espresso Website](http://pseudopotentials.quantum-espresso.org/home/unified-pseudopotential-format).\n", + "\n", + "In this example, we will compare the convergence of an analytical HGH PSP with\n", + "a modern numeric norm-conserving PSP in UPF format from\n", + "[PseudoDojo](http://www.pseudo-dojo.org/).\n", + "Then, we will compare the bandstructure at the converged parameters calculated\n", + "using the two PSPs." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Unitful\n", + "using Plots\n", + "using LazyArtifacts\n", + "import Main: @artifact_str # hide" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Here, we will use a Perdew-Wang LDA PSP from [PseudoDojo](http://www.pseudo-dojo.org/),\n", + "which is available in the\n", + "[JuliaMolSim PseudoLibrary](https://github.com/JuliaMolSim/PseudoLibrary).\n", + "Directories in PseudoLibrary correspond to artifacts that you can load using `artifact`\n", + "strings which evaluate to a filepath on your local machine where the artifact has been\n", + "downloaded.\n", + "\n", + "!!! note \"Using the PseudoLibrary in your own calculations\"\n", + " Instructions for using the [PseudoLibrary](https://github.com/JuliaMolSim/PseudoLibrary)\n", + " in your own calculations can be found in its documentation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We load the HGH and UPF PSPs using `load_psp`, which determines the\n", + "file format using the file extension. The `artifact` string literal resolves to the\n", + "directory where the file is stored by the Artifacts system. So, if you have your own\n", + "pseudopotential files, you can just provide the path to them as well." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: using Pkg instead of using LazyArtifacts is deprecated\n", + "│ caller = eval at boot.jl:370 [inlined]\n", + "└ @ Core ./boot.jl:370\n", + " Downloading artifact: pd_nc_sr_lda_standard_0.4.1_upf\n" + ] + } + ], + "cell_type": "code", + "source": [ + "psp_hgh = load_psp(\"hgh/lda/si-q4.hgh\");\n", + "psp_upf = load_psp(artifact\"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf\");" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "First, we'll take a look at the energy cutoff convergence of these two pseudopotentials.\n", + "For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and\n", + "SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The converged cutoffs are 26 Ha and 18 Ha for the HGH\n", + "and UPF pseudos respectively. We see that the HGH pseudopotential\n", + "is much *harder*, i.e. it requires a higher energy cutoff, than the UPF PSP. In general,\n", + "numeric pseudopotentials tend to be softer than analytical pseudos because of the\n", + "flexibility of sampling arbitrary functions on a grid." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, to see that the different pseudopotentials give reasonbly similar results,\n", + "we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though\n", + "the convered cutoffs are higher, we perform these calculations with a cutoff of\n", + "12 Ha for both PSPs." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function run_bands(psp)\n", + " a = 10.26 # Silicon lattice constant in Bohr\n", + " lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + " Si = ElementPsp(:Si; psp)\n", + " atoms = [Si, Si]\n", + " positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + " # These are (as you saw above) completely unconverged parameters\n", + " model = model_LDA(lattice, atoms, positions; temperature=1e-2)\n", + " basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))\n", + "\n", + " scfres = self_consistent_field(basis; tol=1e-4)\n", + " bandplot = plot_bandstructure(compute_bands(scfres))\n", + " (; scfres, bandplot)\n", + "end;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "The SCF and bandstructure calculations can then be performed using the two PSPs,\n", + "where we notice in particular the difference in total energies." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921035865005 -0.69 5.9 431ms\n", + " 2 -7.925546053370 -2.35 -1.22 1.8 222ms\n", + " 3 -7.926172571678 -3.20 -2.42 2.8 259ms\n", + " 4 -7.926189273342 -4.78 -3.04 3.1 297ms\n", + " 5 -7.926189810824 -6.27 -4.14 3.0 268ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1590095 \n AtomicLocal -2.1423607\n AtomicNonlocal 1.6042208 \n Ewald -8.4004648\n PspCorrection -0.2948928\n Hartree 0.5515473 \n Xc -2.4000867\n Entropy -0.0031626\n\n total -7.926189810824" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "result_hgh = run_bands(psp_hgh)\n", + "result_hgh.scfres.energies" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -8.515460658960 -0.93 6.1 575ms\n", + " 2 -8.518509788416 -2.52 -1.44 2.1 424ms\n", + " 3 -8.518861429657 -3.45 -2.83 2.9 272ms\n", + " 4 -8.518884607905 -4.63 -3.20 4.0 384ms\n", + " 5 -8.518884691730 -7.08 -3.53 2.5 228ms\n", + " 6 -8.518884733693 -7.38 -4.56 1.4 185ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.0954107 \n AtomicLocal -2.3650638\n AtomicNonlocal 1.3082423 \n Ewald -8.4004648\n PspCorrection 0.3951970 \n Hartree 0.5521742 \n Xc -3.1011608\n Entropy -0.0032195\n\n total -8.518884733693" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "result_upf = run_bands(psp_upf)\n", + "result_upf.scfres.energies" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "But while total energies are not physical and thus allowed to differ,\n", + "the bands (as an example for a physical quantity) are very similar for both pseudos:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=116}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "plot(result_hgh.bandplot, result_upf.bandplot, titles=[\"HGH\" \"UPF\"], size=(800, 400))" + ], + "metadata": {}, + "execution_count": 6 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/pseudopotentials/4f774466.svg b/v0.6.16/examples/pseudopotentials/4f774466.svg new file mode 100644 index 0000000000..d509b392b3 --- /dev/null +++ b/v0.6.16/examples/pseudopotentials/4f774466.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/pseudopotentials/index.html b/v0.6.16/examples/pseudopotentials/index.html new file mode 100644 index 0000000000..a735a6fc40 --- /dev/null +++ b/v0.6.16/examples/pseudopotentials/index.html @@ -0,0 +1,44 @@ + +Pseudopotentials · DFTK.jl

    Pseudopotentials

    In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.

    Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.

    In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated ("frozen") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.

    Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.

    In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.

    using DFTK
    +using Unitful
    +using Plots
    +using LazyArtifacts

    Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.

    Using the PseudoLibrary in your own calculations

    Instructions for using the PseudoLibrary in your own calculations can be found in its documentation.

    We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.

    psp_hgh  = load_psp("hgh/lda/si-q4.hgh");
    +psp_upf  = load_psp(artifact"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf");

    First, we'll take a look at the energy cutoff convergence of these two pseudopotentials. For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached.

    The converged cutoffs are 26 Ha and 18 Ha for the HGH and UPF pseudos respectively. We see that the HGH pseudopotential is much harder, i.e. it requires a higher energy cutoff, than the UPF PSP. In general, numeric pseudopotentials tend to be softer than analytical pseudos because of the flexibility of sampling arbitrary functions on a grid.

    Next, to see that the different pseudopotentials give reasonbly similar results, we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though the convered cutoffs are higher, we perform these calculations with a cutoff of 12 Ha for both PSPs.

    function run_bands(psp)
    +    a = 10.26  # Silicon lattice constant in Bohr
    +    lattice = a / 2 * [[0 1 1.];
    +                       [1 0 1.];
    +                       [1 1 0.]]
    +    Si = ElementPsp(:Si; psp)
    +    atoms     = [Si, Si]
    +    positions = [ones(3)/8, -ones(3)/8]
    +
    +    # These are (as you saw above) completely unconverged parameters
    +    model = model_LDA(lattice, atoms, positions; temperature=1e-2)
    +    basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))
    +
    +    scfres   = self_consistent_field(basis; tol=1e-4)
    +    bandplot = plot_bandstructure(compute_bands(scfres))
    +    (; scfres, bandplot)
    +end;

    The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.

    result_hgh = run_bands(psp_hgh)
    +result_hgh.scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1589912 
    +    AtomicLocal         -2.1423887
    +    AtomicNonlocal      1.6042679 
    +    Ewald               -8.4004648
    +    PspCorrection       -0.2948928
    +    Hartree             0.5515449 
    +    Xc                  -2.4000848
    +    Entropy             -0.0031627
    +
    +    total               -7.926189823037
    result_upf = run_bands(psp_upf)
    +result_upf.scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.0954118 
    +    AtomicLocal         -2.3650627
    +    AtomicNonlocal      1.3082402 
    +    Ewald               -8.4004648
    +    PspCorrection       0.3951970 
    +    Hartree             0.5521740 
    +    Xc                  -3.1011607
    +    Entropy             -0.0032195
    +
    +    total               -8.518884733343

    But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:

    plot(result_hgh.bandplot, result_upf.bandplot, titles=["HGH" "UPF"], size=(800, 400))
    Example block output
    diff --git a/v0.6.16/examples/scf_callbacks.ipynb b/v0.6.16/examples/scf_callbacks.ipynb new file mode 100644 index 0000000000..0772c7f816 --- /dev/null +++ b/v0.6.16/examples/scf_callbacks.ipynb @@ -0,0 +1,379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Monitoring self-consistent field calculations\n", + "\n", + "The `self_consistent_field` function takes as the `callback`\n", + "keyword argument one function to be called after each iteration.\n", + "This function gets passed the complete internal state of the SCF\n", + "solver and can thus be used both to monitor and debug the iterations\n", + "as well as to quickly patch it with additional functionality.\n", + "\n", + "This example discusses a few aspects of the `callback` function\n", + "taking again our favourite silicon example." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We setup silicon in an LDA model using the ASE interface\n", + "to build a bulk silicon lattice,\n", + "see Input and output formats for more details." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using ASEconvert\n", + "\n", + "system = pyconvert(AbstractSystem, ase.build.bulk(\"Si\"))\n", + "model = model_LDA(attach_psp(system; Si=\"hgh/pbe/si-q4.hgh\"))\n", + "basis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "DFTK already defines a few callback functions for standard\n", + "tasks. One example is the usual convergence table,\n", + "which is defined in the callback `ScfDefaultCallback`.\n", + "Another example is `ScfSaveCheckpoints`, which stores the state\n", + "of an SCF at each iterations to allow resuming from a failed\n", + "calculation at a later point.\n", + "See Saving SCF results on disk and SCF checkpoints for details\n", + "how to use checkpointing with DFTK." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this example we define a custom callback, which plots\n", + "the change in density at each SCF iteration after the SCF\n", + "has finished. This example is a bit artificial, since the norms\n", + "of all density differences is available as `scfres.history_Δρ`\n", + "after the SCF has finished and could be directly plotted, but\n", + "the following nicely illustrates the use of callbacks in DFTK." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To enable plotting we first define the empty canvas\n", + "and an empty container for all the density differences:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "p = plot(; yaxis=:log)\n", + "density_differences = Float64[];" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "The callback function itself gets passed a named tuple\n", + "similar to the one returned by `self_consistent_field`,\n", + "which contains the input and output density of the SCF step\n", + "as `ρin` and `ρout`. Since the callback gets called\n", + "both during the SCF iterations as well as after convergence\n", + "just before `self_consistent_field` finishes we can both\n", + "collect the data and initiate the plotting in one function." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using LinearAlgebra\n", + "\n", + "function plot_callback(info)\n", + " if info.stage == :finalize\n", + " plot!(p, density_differences, label=\"|ρout - ρin|\", markershape=:x)\n", + " else\n", + " push!(density_differences, norm(info.ρout - info.ρin))\n", + " end\n", + " info\n", + "end\n", + "callback = ScfDefaultCallback() ∘ plot_callback;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Notice that for constructing the `callback` function we chained the `plot_callback`\n", + "(which does the plotting) with the `ScfDefaultCallback`. The latter is the function\n", + "responsible for printing the usual convergence table. Therefore if we simply did\n", + "`callback=plot_callback` the SCF would go silent. The chaining of both callbacks\n", + "(`plot_callback` for plotting and `ScfDefaultCallback()` for the convergence table)\n", + "makes sure both features are enabled. We run the SCF with the chained callback …" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) α Diag Δtime\n", + "--- --------------- --------- --------- ---- ---- ------\n", + " 1 -7.775271429474 -0.70 0.80 4.5 127ms\n", + " 2 -7.779129982196 -2.41 -1.51 0.80 1.0 77.6ms\n", + " 3 -7.779316518455 -3.73 -2.60 0.80 1.2 18.6ms\n", + " 4 -7.779349855580 -4.48 -2.80 0.80 2.5 22.0ms\n", + " 5 -7.779350264153 -6.39 -2.85 0.80 1.0 18.1ms\n", + " 6 -7.779350841780 -6.24 -4.36 0.80 1.0 18.1ms\n", + " 7 -7.779350856040 -7.85 -4.62 0.80 2.5 22.6ms\n", + " 8 -7.779350856124 -10.08 -5.20 0.80 1.0 18.4ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres = self_consistent_field(basis; tol=1e-5, callback);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "… and show the plot" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "p" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "The `info` object passed to the callback contains not just the densities\n", + "but also the complete Bloch wave (in `ψ`), the `occupation`, band `eigenvalues`\n", + "and so on.\n", + "See [`src/scf/self_consistent_field.jl`](https://dftk.org/blob/master/src/scf/self_consistent_field.jl#L101)\n", + "for all currently available keys.\n", + "\n", + "!!! tip \"Debugging with callbacks\"\n", + " Very handy for debugging SCF algorithms is to employ callbacks\n", + " with an `@infiltrate` from [Infiltrator.jl](https://github.com/JuliaDebug/Infiltrator.jl)\n", + " to interactively monitor what is happening each SCF step." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/scf_callbacks/f6bf0757.svg b/v0.6.16/examples/scf_callbacks/f6bf0757.svg new file mode 100644 index 0000000000..aa110ab261 --- /dev/null +++ b/v0.6.16/examples/scf_callbacks/f6bf0757.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/scf_callbacks/index.html b/v0.6.16/examples/scf_callbacks/index.html new file mode 100644 index 0000000000..1697d35eaa --- /dev/null +++ b/v0.6.16/examples/scf_callbacks/index.html @@ -0,0 +1,28 @@ + +Monitoring self-consistent field calculations · DFTK.jl

    Monitoring self-consistent field calculations

    The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.

    This example discusses a few aspects of the callback function taking again our favourite silicon example.

    We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.

    using DFTK
    +using ASEconvert
    +
    +system = pyconvert(AbstractSystem, ase.build.bulk("Si"))
    +model  = model_LDA(attach_psp(system; Si="hgh/pbe/si-q4.hgh"))
    +basis  = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);

    DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfSaveCheckpoints, which stores the state of an SCF at each iterations to allow resuming from a failed calculation at a later point. See Saving SCF results on disk and SCF checkpoints for details how to use checkpointing with DFTK.

    In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. This example is a bit artificial, since the norms of all density differences is available as scfres.history_Δρ after the SCF has finished and could be directly plotted, but the following nicely illustrates the use of callbacks in DFTK.

    To enable plotting we first define the empty canvas and an empty container for all the density differences:

    using Plots
    +p = plot(; yaxis=:log)
    +density_differences = Float64[];

    The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.

    using LinearAlgebra
    +
    +function plot_callback(info)
    +    if info.stage == :finalize
    +        plot!(p, density_differences, label="|ρout - ρin|", markershape=:x)
    +    else
    +        push!(density_differences, norm(info.ρout - info.ρin))
    +    end
    +    info
    +end
    +callback = ScfDefaultCallback() ∘ plot_callback;

    Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback. The latter is the function responsible for printing the usual convergence table. Therefore if we simply did callback=plot_callback the SCF would go silent. The chaining of both callbacks (plot_callback for plotting and ScfDefaultCallback() for the convergence table) makes sure both features are enabled. We run the SCF with the chained callback …

    scfres = self_consistent_field(basis; tol=1e-5, callback);
    n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ----   ------
    +  1   -7.775297485884                   -0.70   0.80    4.5    149ms
    +  2   -7.779128028399       -2.42       -1.51   0.80    1.0   78.7ms
    +  3   -7.779316998649       -3.72       -2.60   0.80    1.2   18.4ms
    +  4   -7.779349886750       -4.48       -2.81   0.80    2.5   22.0ms
    +  5   -7.779350269125       -6.42       -2.84   0.80    1.0   18.0ms
    +  6   -7.779350840429       -6.24       -4.14   0.80    1.0   18.1ms
    +  7   -7.779350855917       -7.81       -4.49   0.80    2.5   22.3ms
    +  8   -7.779350856102       -9.73       -5.08   0.80    1.0   18.5ms

    … and show the plot

    p
    Example block output

    The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.

    Debugging with callbacks

    Very handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.

    diff --git a/v0.6.16/examples/supercells.ipynb b/v0.6.16/examples/supercells.ipynb new file mode 100644 index 0000000000..2ce5102040 --- /dev/null +++ b/v0.6.16/examples/supercells.ipynb @@ -0,0 +1,348 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Creating and modelling metallic supercells\n", + "\n", + "In this section we will be concerned with modelling supercells of aluminium.\n", + "When dealing with periodic problems there is no unique definition of the\n", + "lattice: Clearly any duplication of the lattice along an axis is also a valid\n", + "repetitive unit to describe exactly the same system.\n", + "This is exactly what a **supercell** is: An $n$-fold repetition along one of the\n", + "axes of the original lattice.\n", + "\n", + "The following code achieves this for aluminium:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m\u001b[1m CondaPkg \u001b[22m\u001b[39m\u001b[0mFound dependencies: /home/runner/.julia/packages/ASEconvert/CNQ1A/CondaPkg.toml\n", + "\u001b[32m\u001b[1m CondaPkg \u001b[22m\u001b[39m\u001b[0mFound dependencies: /home/runner/.julia/packages/PythonCall/wXfah/CondaPkg.toml\n", + "\u001b[32m\u001b[1m CondaPkg \u001b[22m\u001b[39m\u001b[0mDependencies already up to date\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "using ASEconvert\n", + "\n", + "function aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])\n", + " a = 7.65339\n", + " lattice = a * Matrix(I, 3, 3)\n", + " Al = ElementPsp(:Al; psp=load_psp(\"hgh/lda/al-q3\"))\n", + " atoms = [Al, Al, Al, Al]\n", + " positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]\n", + " unit_cell = periodic_system(lattice, atoms, positions)\n", + "\n", + " # Make supercell in ASE:\n", + " # We convert our lattice to the conventions used in ASE, make the supercell\n", + " # and then convert back ...\n", + " supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))\n", + " supercell = pyconvert(AbstractSystem, supercell_ase)\n", + "\n", + " # Unfortunately right now the conversion to ASE drops the pseudopotential information,\n", + " # so we need to reattach it:\n", + " supercell = attach_psp(supercell; Al=\"hgh/lda/al-q3\")\n", + "\n", + " # Construct an LDA model and discretise\n", + " # Note: We disable symmetries explicitly here. Otherwise the problem sizes\n", + " # we are able to run on the CI are too simple to observe the numerical\n", + " # instabilities we want to trigger here.\n", + " model = model_LDA(supercell; temperature=1e-3, symmetries=false)\n", + " PlaneWaveBasis(model; Ecut, kgrid)\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "As part of the code we are using a routine inside the ASE,\n", + "the [atomistic simulation environment](https://wiki.fysik.dtu.dk/ase/index.html)\n", + "for creating the supercell and make use of the two-way interoperability of\n", + "DFTK and ASE. For more details on this aspect see the documentation\n", + "on Input and output formats." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Write an example supercell structure to a file to plot it:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Python: None" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "setup = aluminium_setup(5)\n", + "convert_ase(periodic_system(setup.model)).write(\"al_supercell.png\")" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As we will see in this notebook the modelling of a system generally becomes\n", + "harder if the system becomes larger.\n", + "\n", + "- This sounds like a trivial statement as *per se* the cost per SCF step increases\n", + " as the system (and thus $N$) gets larger.\n", + "- But there is more to it:\n", + " If one is not careful also the *number of SCF iterations* increases\n", + " as the system gets larger.\n", + "- The aim of a proper computational treatment of such supercells is therefore\n", + " to ensure that the **number of SCF iterations remains constant** when the\n", + " system size increases." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For achieving the latter DFTK by default employs the `LdosMixing`\n", + "preconditioner [^HL2021] during the SCF iterations. This mixing approach is\n", + "completely parameter free, but still automatically adapts to the treated\n", + "system in order to efficiently prevent charge sloshing. As a result,\n", + "modelling aluminium slabs indeed takes roughly the same number of SCF iterations\n", + "irrespective of the supercell size:\n", + "\n", + "[^HL2021]:\n", + " M. F. Herbst and A. Levitt.\n", + " *Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory.*\n", + " J. Phys. Cond. Matt *33* 085503 (2021). [ArXiv:2009.01665](https://arxiv.org/abs/2009.01665)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -8.298569559727 -0.85 5.4 144ms\n", + " 2 -8.300206622186 -2.79 -1.26 1.2 123ms\n", + " 3 -8.300436977259 -3.64 -1.89 3.2 102ms\n", + " 4 -8.300459468096 -4.65 -2.74 1.2 79.4ms\n", + " 5 -8.300463607898 -5.38 -3.04 2.4 97.1ms\n", + " 6 -8.300464117288 -6.29 -3.22 1.0 71.0ms\n", + " 7 -8.300464385415 -6.57 -3.37 1.0 77.7ms\n", + " 8 -8.300464519181 -6.87 -3.51 1.0 84.8ms\n", + " 9 -8.300464608359 -7.05 -3.71 1.1 105ms\n", + " 10 -8.300464630886 -7.65 -3.87 1.2 72.4ms\n", + " 11 -8.300464641983 -7.95 -4.20 1.1 67.5ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(1); tol=1e-4);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -16.67003289822 -0.70 6.9 357ms\n", + " 2 -16.67307571354 -2.52 -1.14 1.0 210ms\n", + " 3 -16.67356009242 -3.31 -1.87 2.4 217ms\n", + " 4 -16.67927087373 -2.24 -2.09 2.0 225ms\n", + " 5 -16.67928039986 -5.02 -2.12 1.0 202ms\n", + " 6 -16.67928485526 -5.35 -2.52 2.0 211ms\n", + " 7 -16.67928560946 -6.12 -3.00 2.6 215ms\n", + " 8 -16.67928574478 -6.87 -3.04 2.9 224ms\n", + " 9 -16.67928597513 -6.64 -3.28 1.0 170ms\n", + " 10 -16.67928609747 -6.91 -3.57 1.0 170ms\n", + " 11 -16.67928618146 -7.08 -3.84 1.8 205ms\n", + " 12 -16.67928621943 -7.42 -4.35 1.4 184ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(2); tol=1e-4);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -33.32801282858 -0.56 6.6 1.28s\n", + " 2 -33.33462728547 -2.18 -1.00 1.2 661ms\n", + " 3 -33.33596264861 -2.87 -1.73 8.1 1.05s\n", + " 4 -33.33609990174 -3.86 -2.63 1.2 667ms\n", + " 5 -33.33679572990 -3.16 -2.23 9.6 1.16s\n", + " 6 -33.33682676300 -4.51 -2.29 1.1 646ms\n", + " 7 -33.33694217596 -3.94 -3.39 1.0 622ms\n", + " 8 -33.33694358947 -5.85 -3.59 3.8 885ms\n", + " 9 -33.33694366541 -7.12 -3.71 2.1 676ms\n", + " 10 -33.33694374015 -7.13 -4.02 1.5 633ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(4); tol=1e-4);" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "When switching off explicitly the `LdosMixing`, by selecting `mixing=SimpleMixing()`,\n", + "the performance of number of required SCF steps starts to increase as we increase\n", + "the size of the modelled problem:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -8.298602247270 -0.85 5.8 225ms\n", + " 2 -8.300279902533 -2.78 -1.59 1.0 64.5ms\n", + " 3 -8.300419117183 -3.86 -2.49 2.1 72.7ms\n", + " 4 -8.300356058373 + -4.20 -2.23 4.4 113ms\n", + " 5 -8.300464065388 -3.97 -3.41 1.0 67.1ms\n", + " 6 -8.300464525333 -6.34 -3.70 6.4 168ms\n", + " 7 -8.300464637066 -6.95 -4.16 1.1 73.0ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -33.32783272283 -0.56 7.5 1.31s\n", + " 2 -33.31959593592 + -2.08 -1.27 1.2 577ms\n", + " 3 -17.13735635006 + 1.21 -0.46 6.2 1.25s\n", + " 4 -33.32764033187 1.21 -1.93 6.6 1.15s\n", + " 5 -33.05765518788 + -0.57 -1.30 4.2 1.04s\n", + " 6 -32.81825081173 + -0.62 -1.20 4.5 985ms\n", + " 7 -33.32653347939 -0.29 -1.80 4.1 918ms\n", + " 8 -33.33518132616 -2.06 -2.35 1.9 671ms\n", + " 9 -33.33638732665 -2.92 -2.45 2.6 848ms\n", + " 10 -33.33655341734 -3.78 -2.71 1.8 647ms\n", + " 11 -33.33684497013 -3.54 -3.00 2.5 651ms\n", + " 12 -33.33693327745 -4.05 -3.44 3.0 759ms\n", + " 13 -33.33694301390 -5.01 -3.61 3.6 873ms\n", + " 14 -33.33694351199 -6.30 -4.11 2.2 685ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "For completion let us note that the more traditional `mixing=KerkerMixing()`\n", + "approach would also help in this particular setting to obtain a constant\n", + "number of SCF iterations for an increasing system size (try it!). In contrast\n", + "to `LdosMixing`, however, `KerkerMixing` is only suitable to model bulk metallic\n", + "system (like the case we are considering here). When modelling metallic surfaces\n", + "or mixtures of metals and insulators, `KerkerMixing` fails, while `LdosMixing`\n", + "still works well. See the Modelling a gallium arsenide surface example\n", + "or [^HL2021] for details. Due to the general applicability of `LdosMixing` this\n", + "method is the default mixing approach in DFTK." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/supercells/index.html b/v0.6.16/examples/supercells/index.html new file mode 100644 index 0000000000..2b09426b6a --- /dev/null +++ b/v0.6.16/examples/supercells/index.html @@ -0,0 +1,99 @@ + +Creating and modelling metallic supercells · DFTK.jl

    Creating and modelling metallic supercells

    In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An $n$-fold repetition along one of the axes of the original lattice.

    The following code achieves this for aluminium:

    using DFTK
    +using LinearAlgebra
    +using ASEconvert
    +
    +function aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])
    +    a = 7.65339
    +    lattice = a * Matrix(I, 3, 3)
    +    Al = ElementPsp(:Al; psp=load_psp("hgh/lda/al-q3"))
    +    atoms     = [Al, Al, Al, Al]
    +    positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]
    +    unit_cell = periodic_system(lattice, atoms, positions)
    +
    +    # Make supercell in ASE:
    +    # We convert our lattice to the conventions used in ASE, make the supercell
    +    # and then convert back ...
    +    supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))
    +    supercell     = pyconvert(AbstractSystem, supercell_ase)
    +
    +    # Unfortunately right now the conversion to ASE drops the pseudopotential information,
    +    # so we need to reattach it:
    +    supercell = attach_psp(supercell; Al="hgh/lda/al-q3")
    +
    +    # Construct an LDA model and discretise
    +    # Note: We disable symmetries explicitly here. Otherwise the problem sizes
    +    #       we are able to run on the CI are too simple to observe the numerical
    +    #       instabilities we want to trigger here.
    +    model = model_LDA(supercell; temperature=1e-3, symmetries=false)
    +    PlaneWaveBasis(model; Ecut, kgrid)
    +end;

    As part of the code we are using a routine inside the ASE, the atomistic simulation environment for creating the supercell and make use of the two-way interoperability of DFTK and ASE. For more details on this aspect see the documentation on Input and output formats.

    Write an example supercell structure to a file to plot it:

    setup = aluminium_setup(5)
    +convert_ase(periodic_system(setup.model)).write("al_supercell.png")
    Python: None

    As we will see in this notebook the modelling of a system generally becomes harder if the system becomes larger.

    • This sounds like a trivial statement as per se the cost per SCF step increases as the system (and thus $N$) gets larger.
    • But there is more to it: If one is not careful also the number of SCF iterations increases as the system gets larger.
    • The aim of a proper computational treatment of such supercells is therefore to ensure that the number of SCF iterations remains constant when the system size increases.

    For achieving the latter DFTK by default employs the LdosMixing preconditioner [HL2021] during the SCF iterations. This mixing approach is completely parameter free, but still automatically adapts to the treated system in order to efficiently prevent charge sloshing. As a result, modelling aluminium slabs indeed takes roughly the same number of SCF iterations irrespective of the supercell size:

    M. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. J. Phys. Cond. Matt 33 085503 (2021). ArXiv:2009.01665

    self_consistent_field(aluminium_setup(1); tol=1e-4);
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -8.298711917197                   -0.85    5.2    219ms
    +  2   -8.300225390984       -2.82       -1.25    1.4   80.6ms
    +  3   -8.300438333821       -3.67       -1.88    3.5    102ms
    +  4   -8.300460071255       -4.66       -2.77    1.0   74.6ms
    +  5   -8.300464244419       -5.38       -3.10    2.2   94.9ms
    +  6   -8.300464477009       -6.63       -3.27    1.2   75.0ms
    +  7   -8.300464558754       -7.09       -3.42    1.0   70.9ms
    +  8   -8.300464603139       -7.35       -3.58    1.2    106ms
    +  9   -8.300464630985       -7.56       -3.77    1.2   75.3ms
    + 10   -8.300464635837       -8.31       -3.85    1.2   75.8ms
    + 11   -8.300464641945       -8.21       -4.07    1.0   72.5ms
    self_consistent_field(aluminium_setup(2); tol=1e-4);
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -16.67572073439                   -0.70    6.6    418ms
    +  2   -16.67886178556       -2.50       -1.14    1.0    196ms
    +  3   -16.67923195697       -3.43       -1.87    3.2    238ms
    +  4   -16.67927449591       -4.37       -2.75    1.4    297ms
    +  5   -16.67928521119       -4.97       -3.20    5.2    302ms
    +  6   -16.67928612547       -6.04       -3.50    2.0    212ms
    +  7   -16.67928621046       -7.07       -3.93    2.0    222ms
    +  8   -16.67928621961       -8.04       -4.49    2.5    242ms
    self_consistent_field(aluminium_setup(4); tol=1e-4);
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -33.32777924050                   -0.56    8.2    1.54s
    +  2   -33.33457091048       -2.17       -1.00    1.5    739ms
    +  3   -33.33598784914       -2.85       -1.72    7.4    1.07s
    +  4   -33.33611682653       -3.89       -2.62    1.1    711ms
    +  5   -33.33676655192       -3.19       -2.20    7.9    1.11s
    +  6   -33.33679739730       -4.51       -2.25    3.1    728ms
    +  7   -33.33694200222       -3.84       -3.43    1.4    700ms
    +  8   -33.33694334004       -5.87       -3.45    5.8    996ms
    +  9   -33.33694338169       -7.38       -3.48    1.0    622ms
    + 10   -33.33694374410       -6.44       -4.05    1.0    662ms

    When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:

    self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -8.298742291758                   -0.85    5.6    149ms
    +  2   -8.300294919941       -2.81       -1.59    1.0   61.7ms
    +  3   -8.300422533442       -3.89       -2.49    3.1   86.1ms
    +  4   -8.300358703732   +   -4.19       -2.24    2.4    152ms
    +  5   -8.300464098499       -3.98       -3.42    1.0   61.8ms
    +  6   -8.300464534832       -6.36       -3.73    5.1    149ms
    +  7   -8.300464636832       -6.99       -4.19    2.0   81.2ms
    self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -33.32823088390                   -0.56    7.5    1.34s
    +  2   -33.31640988151   +   -1.93       -1.27    1.9    685ms
    +  3   -15.22260500609   +    1.26       -0.43    6.2    1.36s
    +  4   -33.30779671225        1.26       -1.75    5.4    1.20s
    +  5   -33.17232436258   +   -0.87       -1.28    3.5    992ms
    +  6   -32.69540561211   +   -0.32       -1.16    4.6    1.04s
    +  7   -33.32274806450       -0.20       -1.95    4.8    996ms
    +  8   -33.33619460328       -1.87       -2.49    1.8    715ms
    +  9   -33.33591337769   +   -3.55       -2.47    3.1    899ms
    + 10   -33.33674990323       -3.08       -2.72    1.9    684ms
    + 11   -33.33687224569       -3.91       -2.99    1.8    699ms
    + 12   -33.33692117136       -4.31       -3.31    3.2    885ms
    + 13   -33.33694241417       -4.67       -3.64    2.2    714ms
    + 14   -33.33694344161       -5.99       -3.94    3.5    873ms
    + 15   -33.33694152515   +   -5.72       -3.86    3.4    956ms
    + 16   -33.33694239261       -6.06       -3.94    3.4    882ms
    + 17   -33.33694373359       -5.87       -4.53    1.8    715ms

    For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.

    diff --git a/v0.6.16/examples/surface.png b/v0.6.16/examples/surface.png new file mode 100644 index 0000000000000000000000000000000000000000..9aee441d4f61920aee314ce648294fd37987a637 GIT binary patch literal 42687 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 literal 0 HcmV?d00001 diff --git a/v0.6.16/examples/wannier.ipynb b/v0.6.16/examples/wannier.ipynb new file mode 100644 index 0000000000..4872e1df24 --- /dev/null +++ b/v0.6.16/examples/wannier.ipynb @@ -0,0 +1,1530 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Wannierization using Wannier.jl or Wannier90\n", + "\n", + "DFTK features an interface with the programs\n", + "[Wannier.jl](https://wannierjl.org) and [Wannier90](http://www.wannier.org/),\n", + "in order to compute maximally-localized Wannier functions (MLWFs)\n", + "from an initial self consistent field calculation.\n", + "All processes are handled by calling the routine `wannier_model` (for Wannier.jl) or `run_wannier90` (for Wannier90).\n", + "\n", + "!!! warning \"No guarantees on Wannier interface\"\n", + " This code is at an early stage and has so far not been fully tested.\n", + " Bugs are likely and we welcome issues in case you find any!\n", + "\n", + "This example shows how to obtain the MLWFs corresponding\n", + "to the first five bands of graphene. Since the bands 2 to 11 are entangled,\n", + "15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -11.14942012100 -0.67 8.6 612ms\n", + " 2 -11.15007268270 -3.19 -1.40 1.0 273ms\n", + " 3 -11.15010733054 -4.46 -2.77 3.4 326ms\n", + " 4 -11.15010937495 -5.69 -3.31 4.2 408ms\n", + " 5 -11.15010943166 -7.25 -4.31 3.0 324ms\n", + " 6 -11.15010943372 -8.69 -5.10 4.0 376ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "d = 10u\"Å\"\n", + "a = 2.641u\"Å\" # Graphene Lattice constant\n", + "lattice = [a -a/2 0;\n", + " 0 √3*a/2 0;\n", + " 0 0 d]\n", + "\n", + "C = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\n", + "atoms = [C, C]\n", + "positions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]\n", + "model = model_PBE(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])\n", + "nbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)\n", + "scfres = self_consistent_field(basis; nbandsalg, tol=1e-5);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Plot bandstructure of the system" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=123}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "bands = compute_bands(scfres; kline_density=10)\n", + "plot_bandstructure(bands)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "## Wannierization with Wannier.jl\n", + "\n", + "Now we use the `wannier_model` routine to generate a Wannier.jl model\n", + "that can be used to perform the wannierization procedure.\n", + "For now, this model generation produces file in the Wannier90 convention,\n", + "where all files are named with the same prefix and only differ by\n", + "their extensions. By default all generated input and output files are stored\n", + "in the subfolder \"wannierjl\" under the prefix \"wannier\" (i.e. \"wannierjl/wannier.win\",\n", + "\"wannierjl/wannier.wout\", etc.). A different file prefix can be given with the\n", + "keyword argument `fileprefix` as shown below.\n", + "\n", + "We now produce a simple Wannier model for 5 MLFWs.\n", + "\n", + "For a good MLWF, we need to provide initial projections that resemble the expected shape\n", + "of the Wannier functions.\n", + "Here we will use:\n", + "- 3 bond-centered 2s hydrogenic orbitals for the expected σ bonds\n", + "- 2 atom-centered 2pz hydrogenic orbitals for the expected π bands" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Wannier # Needed to make Wannier.Model available" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "From chemical intuition, we know that the bonds with the lowest energy are:\n", + "- the 3 σ bonds,\n", + "- the π and π* bonds.\n", + "We provide relevant initial projections to help Wannierization\n", + "converge to functions with a similar shape." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "5-element Vector{DFTK.HydrogenicWannierProjection}:\n DFTK.HydrogenicWannierProjection([0.16666666666666666, 0.3333333333333333, 0.0], 2, 0, 0, 6)\n DFTK.HydrogenicWannierProjection([0.16666666666666666, -0.16666666666666669, 0.0], 2, 0, 0, 6)\n DFTK.HydrogenicWannierProjection([-0.33333333333333337, -0.16666666666666669, 0.0], 2, 0, 0, 6)\n DFTK.HydrogenicWannierProjection([0.0, 0.0, 0.0], 2, 1, 0, 6)\n DFTK.HydrogenicWannierProjection([0.3333333333333333, 0.6666666666666666, 0.0], 2, 1, 0, 6)" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)\n", + "pz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)\n", + "projections = [\n", + " # Note: fractional coordinates for the centers!\n", + " # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds\n", + " s_guess((positions[1] + positions[2]) / 2),\n", + " s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),\n", + " s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),\n", + " # 2 atom-centered 2pz hydrogenic orbitals\n", + " pz_guess(positions[1]),\n", + " pz_guess(positions[2]),\n", + "]" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Wannierize:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Reading win file: wannier/graphene.win\n", + " num_wann = 5\n", + " num_bands = 15\n", + " mp_grid = 5 5 1\n", + "\n", + "b-vector shell 1 weight = 1.10422\n", + " 1 -0.47582 -0.27471 0.00000\n", + " 2 0.47582 0.27471 0.00000\n", + " 3 0.00000 -0.54943 0.00000\n", + " 4 0.00000 0.54943 0.00000\n", + " 5 0.47582 -0.27471 0.00000\n", + " 6 -0.47582 0.27471 0.00000\n", + "b-vector shell 2 weight = 1.26651\n", + " 1 0.00000 0.00000 -0.62832\n", + " 2 0.00000 0.00000 0.62832\n", + "\n", + "Finite difference condition satisfied\n", + "\n", + "[ Info: Reading win file: wannier/graphene.win\n", + " num_wann = 5\n", + " num_bands = 15\n", + " mp_grid = 5 5 1\n", + "\n", + "b-vector shell 1 weight = 1.10422\n", + " 1 -0.47582 -0.27471 0.00000\n", + " 2 0.47582 0.27471 0.00000\n", + " 3 0.00000 -0.54943 0.00000\n", + " 4 0.00000 0.54943 0.00000\n", + " 5 0.47582 -0.27471 0.00000\n", + " 6 -0.47582 0.27471 0.00000\n", + "b-vector shell 2 weight = 1.26651\n", + " 1 0.00000 0.00000 -0.62832\n", + " 2 0.00000 0.00000 0.62832\n", + "\n", + "Finite difference condition satisfied\n", + "\n", + "[ Info: Reading mmn file: wannier/graphene.mmn\n", + " header = Generated by DFTK at 2023-12-26T11:19:56.699\n", + " n_bands = 15\n", + " n_bvecs = 8\n", + " n_kpts = 25\n", + "\n", + "[ Info: Reading wannier/graphene.amn\n", + " header = Generated by DFTK at 2023-12-26T11:19:53.474\n", + " n_bands = 15\n", + " n_wann = 5\n", + " n_kpts = 25\n", + "\n", + "[ Info: Reading wannier/graphene.eig\n", + " n_bands = 15\n", + " n_kpts = 25\n", + "\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "lattice: Å\n a1: 2.64100 0.00000 0.00000\n a2: -1.32050 2.28717 0.00000\n a3: 0.00000 0.00000 10.00000\n\natoms: fractional\n C: 0.00000 0.00000 0.00000\n C: 0.33333 0.66667 0.00000\n\nn_bands: 15\nn_wann : 5\nkgrid : 5 5 1\nn_kpts : 25\nn_bvecs: 8\n\nb-vectors:\n [bx, by, bz] / Å⁻¹ weight\n 1 -0.47582 -0.27471 0.00000 1.10422\n 2 0.47582 0.27471 0.00000 1.10422\n 3 0.00000 -0.54943 0.00000 1.10422\n 4 0.00000 0.54943 0.00000 1.10422\n 5 0.47582 -0.27471 0.00000 1.10422\n 6 -0.47582 0.27471 0.00000 1.10422\n 7 0.00000 0.00000 -0.62832 1.26651\n 8 0.00000 0.00000 0.62832 1.26651" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "wannier_model = Wannier.Model(scfres;\n", + " fileprefix=\"wannier/graphene\",\n", + " n_bands=scfres.n_bands_converge,\n", + " n_wannier=5,\n", + " projections,\n", + " dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Once we have the `wannier_model`, we can use the functions in the Wannier.jl package:\n", + "\n", + "Compute MLWF:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Initial spread\n", + " WF center [rx, ry, rz]/Å spread/Ų\n", + " 1 0.00000 0.76239 0.00000 0.62113\n", + " 2 0.66025 -0.38120 -0.00000 0.62113\n", + " 3 -0.66025 -0.38120 -0.00000 0.62113\n", + " 4 0.00000 0.00000 0.00000 1.19369\n", + " 5 0.00000 1.52478 -0.00000 1.19369\n", + "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", + " ΩI = 3.81156\n", + " Ω̃ = 0.43920\n", + " ΩOD = 0.43823\n", + " ΩD = 0.00097\n", + " Ω = 4.25077\n", + "\n", + "\n", + "[ Info: Initial spread (with states freezed)\n", + " WF center [rx, ry, rz]/Å spread/Ų\n", + " 1 -0.00000 0.76239 -0.00000 0.64218\n", + " 2 0.66025 -0.38120 -0.00000 0.64218\n", + " 3 -0.66025 -0.38120 -0.00000 0.64218\n", + " 4 0.00000 0.00000 0.00000 1.13077\n", + " 5 -0.00000 1.52478 -0.00000 1.13077\n", + "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", + " ΩI = 3.46548\n", + " Ω̃ = 0.72262\n", + " ΩOD = 0.71487\n", + " ΩD = 0.00775\n", + " Ω = 4.18810\n", + "\n", + "\n", + "Iter Function value Gradient norm \n", + " 0 4.188096e+00 1.401803e+00\n", + " * time: 0.0015659332275390625\n", + " 1 3.807531e+00 8.825686e-02\n", + " * time: 0.2052748203277588\n", + " 2 3.768218e+00 2.015968e-02\n", + " * time: 0.21198797225952148\n", + " 3 3.765765e+00 2.446949e-03\n", + " * time: 0.21869802474975586\n", + " 4 3.765726e+00 2.711489e-04\n", + " * time: 0.22534489631652832\n", + " 5 3.765725e+00 3.155847e-05\n", + " * time: 0.2348618507385254\n", + " 6 3.765725e+00 1.434390e-05\n", + " * time: 0.2443559169769287\n", + " 7 3.765725e+00 1.360446e-06\n", + " * time: 0.25096702575683594\n", + "[ Info: Final spread\n", + " WF center [rx, ry, rz]/Å spread/Ų\n", + " 1 -0.00000 0.76239 0.00000 0.64174\n", + " 2 0.66025 -0.38120 0.00000 0.64174\n", + " 3 -0.66025 -0.38120 0.00000 0.64174\n", + " 4 0.00000 0.00000 0.00000 0.92025\n", + " 5 -0.00000 1.52478 -0.00000 0.92025\n", + "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", + " ΩI = 3.02222\n", + " Ω̃ = 0.74351\n", + " ΩOD = 0.73886\n", + " ΩD = 0.00465\n", + " Ω = 3.76573\n", + "\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": " * Status: success\n\n * Candidate solution\n Final objective value: 3.765725e+00\n\n * Found with\n Algorithm: L-BFGS\n\n * Convergence measures\n |x - x'| = 1.07e-05 ≰ 0.0e+00\n |x - x'|/|x'| = 1.07e-05 ≰ 0.0e+00\n |f(x) - f(x')| = 2.58e-09 ≰ 0.0e+00\n |f(x) - f(x')|/|f(x')| = 6.86e-10 ≤ 1.0e-07\n |g(x)| = 1.36e-06 ≤ 1.0e-05\n\n * Work counters\n Seconds run: 0 (vs limit Inf)\n Iterations: 7\n f(x) calls: 17\n ∇f(x) calls: 18\n" + }, + "metadata": {} + } + ], + "cell_type": "code", + "source": [ + "U = disentangle(wannier_model, max_iter=200);" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Inspect localization before and after Wannierization:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " WF center [rx, ry, rz]/Å spread/Ų\n 1 -0.00000 0.76239 0.00000 0.64174\n 2 0.66025 -0.38120 0.00000 0.64174\n 3 -0.66025 -0.38120 0.00000 0.64174\n 4 0.00000 0.00000 0.00000 0.92025\n 5 -0.00000 1.52478 -0.00000 0.92025\nSum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n ΩI = 3.02222\n Ω̃ = 0.74351\n ΩOD = 0.73886\n ΩD = 0.00465\n Ω = 3.76573\n" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "omega(wannier_model)\n", + "omega(wannier_model, U)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Build a Wannier interpolation model:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\nrecip_lattice: Å⁻¹\n a1: 2.37909 1.37357 -0.00000\n a2: 0.00000 2.74714 0.00000\n a3: 0.00000 -0.00000 0.62832\nkgrid : 5 5 1\nn_kpts : 25\n\nlattice: Å\n a1: 2.64100 0.00000 0.00000\n a2: -1.32050 2.28717 0.00000\n a3: 0.00000 0.00000 10.00000\ngrid = 5 5 1\nn_rvecs = 31\nusing MDRS interpolation\n\nKPath{3} (6 points, 3 paths, 12 points in paths):\n points: :M => [0.5, 0.0, 0.0]\n :A => [0.0, 0.0, 0.5]\n :H => [0.333333, 0.333333, 0.5]\n :K => [0.333333, 0.333333, 0.0]\n :Γ => [0.0, 0.0, 0.0]\n :L => [0.5, 0.0, 0.5]\n paths: [:Γ, :M, :K, :Γ, :A, :L, :H, :A]\n [:L, :M]\n [:H, :K]\n basis: [1.258962, 0.726862, -0.0]\n [0.0, 1.453724, 0.0]\n [0.0, -0.0, 0.332492]" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "kpath = irrfbz_path(model)\n", + "interp_model = Wannier.InterpModel(wannier_model; kpath=kpath)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "And so on...\n", + "Refer to the Wannier.jl documentation for further examples." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "(Delete temporary files when done.)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "rm(\"wannier\", recursive=true)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "### Custom initial guesses\n", + "\n", + "We can also provide custom initial guesses for Wannierization,\n", + "by passing a callable function in the `projections` array.\n", + "The function receives the basis and a list of points (fractional coordinates in reciprocal space),\n", + "and returns the Fourier transform of the initial guess function evaluated at each point.\n", + "\n", + "For example, we could use Gaussians for the σ and pz guesses with the following code:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "pz_guess (generic function with 1 method)" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "s_guess(center) = DFTK.GaussianWannierProjection(center)\n", + "function pz_guess(center)\n", + " # Approximate with two Gaussians offset by 0.5 Å from the center of the atom\n", + " offset = model.inv_lattice * [0, 0, austrip(0.5u\"Å\")]\n", + " center1 = center + offset\n", + " center2 = center - offset\n", + " # Build the custom projector\n", + " (basis, qs) -> DFTK.GaussianWannierProjection(center1)(basis, qs) - DFTK.GaussianWannierProjection(center2)(basis, qs)\n", + "end\n", + "# Feed to Wannier via the `projections` as before..." + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "This example assumes that Wannier.jl version 0.3.2 is used,\n", + "and may need to be updated to accomodate for changes in Wannier.jl.\n", + "\n", + "Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently,\n", + "for example the max number of iterations is passed to `disentangle` in Wannier.jl,\n", + "but as `num_iter` to `run_wannier90`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Wannierization with Wannier90\n", + "\n", + "We can use the `run_wannier90` routine to generate all required files and perform the wannierization procedure:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using wannier90_jll # Needed to make run_wannier90 available\n", + "run_wannier90(scfres;\n", + " fileprefix=\"wannier/graphene\",\n", + " n_wannier=5,\n", + " projections,\n", + " num_print_cycles=25,\n", + " num_iter=200,\n", + " #\n", + " dis_win_max=19.0,\n", + " dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1, # 1 eV above Fermi level\n", + " dis_num_iter=300,\n", + " dis_mix_ratio=1.0,\n", + " #\n", + " wannier_plot=true,\n", + " wannier_plot_format=\"cube\",\n", + " wannier_plot_supercell=5,\n", + " write_xyz=true,\n", + " translate_home_cell=true,\n", + " );" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "As can be observed standard optional arguments for the disentanglement\n", + "can be passed directly to `run_wannier90` as keyword arguments." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "(Delete temporary files.)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "rm(\"wannier\", recursive=true)" + ], + "metadata": {}, + "execution_count": 12 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/examples/wannier/549c7c55.svg b/v0.6.16/examples/wannier/549c7c55.svg new file mode 100644 index 0000000000..4959d70d51 --- /dev/null +++ b/v0.6.16/examples/wannier/549c7c55.svg @@ -0,0 +1,487 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/examples/wannier/index.html b/v0.6.16/examples/wannier/index.html new file mode 100644 index 0000000000..b58c6a2328 --- /dev/null +++ b/v0.6.16/examples/wannier/index.html @@ -0,0 +1,201 @@ + +Wannierization using Wannier.jl or Wannier90 · DFTK.jl

    Wannierization using Wannier.jl or Wannier90

    DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).

    No guarantees on Wannier interface

    This code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!

    This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.

    using DFTK
    +using Plots
    +using Unitful
    +using UnitfulAtomic
    +
    +d = 10u"Å"
    +a = 2.641u"Å"  # Graphene Lattice constant
    +lattice = [a  -a/2    0;
    +           0  √3*a/2  0;
    +           0     0    d]
    +
    +C = ElementPsp(:C; psp=load_psp("hgh/pbe/c-q4"))
    +atoms     = [C, C]
    +positions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]
    +model  = model_PBE(lattice, atoms, positions)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])
    +nbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)
    +scfres = self_consistent_field(basis; nbandsalg, tol=1e-5);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -11.14942757558                   -0.67    8.4    470ms
    +  2   -11.15007193212       -3.19       -1.40    1.2    299ms
    +  3   -11.15010727197       -4.45       -2.77    3.6    267ms
    +  4   -11.15010936974       -5.68       -3.32    4.6    393ms
    +  5   -11.15010942816       -7.23       -4.33    3.0    312ms
    +  6   -11.15010943374       -8.25       -4.84    3.8    368ms
    +  7   -11.15010943376      -10.75       -5.30    3.2    260ms

    Plot bandstructure of the system

    bands = compute_bands(scfres; kline_density=10)
    +plot_bandstructure(bands)
    Example block output

    Wannierization with Wannier.jl

    Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder "wannierjl" under the prefix "wannier" (i.e. "wannierjl/wannier.win", "wannierjl/wannier.wout", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.

    We now produce a simple Wannier model for 5 MLFWs.

    For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:

    • 3 bond-centered 2s hydrogenic orbitals for the expected σ bonds
    • 2 atom-centered 2pz hydrogenic orbitals for the expected π bands
    using Wannier # Needed to make Wannier.Model available

    From chemical intuition, we know that the bonds with the lowest energy are:

    • the 3 σ bonds,
    • the π and π* bonds.

    We provide relevant initial projections to help Wannierization converge to functions with a similar shape.

    s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)
    +pz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)
    +projections = [
    +    # Note: fractional coordinates for the centers!
    +    # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds
    +    s_guess((positions[1] + positions[2]) / 2),
    +    s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),
    +    s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),
    +    # 2 atom-centered 2pz hydrogenic orbitals
    +    pz_guess(positions[1]),
    +    pz_guess(positions[2]),
    +]
    5-element Vector{DFTK.HydrogenicWannierProjection}:
    + DFTK.HydrogenicWannierProjection([0.16666666666666666, 0.3333333333333333, 0.0], 2, 0, 0, 6)
    + DFTK.HydrogenicWannierProjection([0.16666666666666666, -0.16666666666666669, 0.0], 2, 0, 0, 6)
    + DFTK.HydrogenicWannierProjection([-0.33333333333333337, -0.16666666666666669, 0.0], 2, 0, 0, 6)
    + DFTK.HydrogenicWannierProjection([0.0, 0.0, 0.0], 2, 1, 0, 6)
    + DFTK.HydrogenicWannierProjection([0.3333333333333333, 0.6666666666666666, 0.0], 2, 1, 0, 6)

    Wannierize:

    wannier_model = Wannier.Model(scfres;
    +    fileprefix="wannier/graphene",
    +    n_bands=scfres.n_bands_converge,
    +    n_wannier=5,
    +    projections,
    +    dis_froz_max=ustrip(auconvert(u"eV", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level
    lattice: Å
    +  a1:  2.64100  0.00000  0.00000
    +  a2: -1.32050  2.28717  0.00000
    +  a3:  0.00000  0.00000 10.00000
    +
    +atoms: fractional
    +   C:  0.00000  0.00000  0.00000
    +   C:  0.33333  0.66667  0.00000
    +
    +n_bands: 15
    +n_wann : 5
    +kgrid  : 5 5 1
    +n_kpts : 25
    +n_bvecs: 8
    +
    +b-vectors:
    +         [bx, by, bz] / Å⁻¹                weight
    +  1      -0.47582   -0.27471    0.00000    1.10422
    +  2       0.47582    0.27471    0.00000    1.10422
    +  3       0.00000   -0.54943    0.00000    1.10422
    +  4       0.00000    0.54943    0.00000    1.10422
    +  5       0.47582   -0.27471    0.00000    1.10422
    +  6      -0.47582    0.27471    0.00000    1.10422
    +  7       0.00000    0.00000   -0.62832    1.26651
    +  8       0.00000    0.00000    0.62832    1.26651

    Once we have the wannier_model, we can use the functions in the Wannier.jl package:

    Compute MLWF:

    U = disentangle(wannier_model, max_iter=200);
    [ Info: Initial spread
    +  WF     center [rx, ry, rz]/Š             spread/Ų
    +   1    -0.00000     0.76239     0.00000     0.62113
    +   2     0.66025    -0.38120     0.00000     0.62113
    +   3    -0.66025    -0.38120     0.00000     0.62113
    +   4    -0.00000    -0.00000    -0.00000     1.19369
    +   5    -0.00000     1.52478     0.00000     1.19369
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.81157
    +   Ω̃   =     0.43920
    +   ΩOD =     0.43823
    +   ΩD  =     0.00097
    +   Ω   =     4.25077
    +
    +
    +[ Info: Initial spread (with states freezed)
    +  WF     center [rx, ry, rz]/Š             spread/Ų
    +   1    -0.00000     0.76239     0.00000     0.64218
    +   2     0.66025    -0.38120     0.00000     0.64218
    +   3    -0.66025    -0.38120     0.00000     0.64218
    +   4     0.00000    -0.00000    -0.00000     1.13078
    +   5    -0.00000     1.52478     0.00000     1.13078
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.46548
    +   Ω̃   =     0.72262
    +   ΩOD =     0.71487
    +   ΩD  =     0.00775
    +   Ω   =     4.18810
    +
    +
    +Iter     Function value   Gradient norm
    +     0     4.188102e+00     1.401803e+00
    + * time: 0.0014531612396240234
    +     1     3.807537e+00     8.825714e-02
    + * time: 0.008116006851196289
    +     2     3.768224e+00     2.015972e-02
    + * time: 0.01477503776550293
    +     3     3.765770e+00     2.446962e-03
    + * time: 0.021395206451416016
    +     4     3.765731e+00     2.711480e-04
    + * time: 0.028003215789794922
    +     5     3.765731e+00     3.155842e-05
    + * time: 0.037446022033691406
    +     6     3.765731e+00     1.434278e-05
    + * time: 0.046894073486328125
    +     7     3.765731e+00     1.359900e-06
    + * time: 0.053503990173339844
    +[ Info: Final spread
    +  WF     center [rx, ry, rz]/Š             spread/Ų
    +   1    -0.00000     0.76239    -0.00000     0.64174
    +   2     0.66025    -0.38120    -0.00000     0.64174
    +   3    -0.66025    -0.38120    -0.00000     0.64174
    +   4     0.00000    -0.00000    -0.00000     0.92025
    +   5    -0.00000     1.52478     0.00000     0.92025
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.02222
    +   Ω̃   =     0.74351
    +   ΩOD =     0.73886
    +   ΩD  =     0.00465
    +   Ω   =     3.76573

    Inspect localization before and after Wannierization:

    omega(wannier_model)
    +omega(wannier_model, U)
      WF     center [rx, ry, rz]/Š             spread/Ų
    +   1    -0.00000     0.76239    -0.00000     0.64174
    +   2     0.66025    -0.38120    -0.00000     0.64174
    +   3    -0.66025    -0.38120    -0.00000     0.64174
    +   4     0.00000    -0.00000    -0.00000     0.92025
    +   5    -0.00000     1.52478     0.00000     0.92025
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.02222
    +   Ω̃   =     0.74351
    +   ΩOD =     0.73886
    +   ΩD  =     0.00465
    +   Ω   =     3.76573
    +

    Build a Wannier interpolation model:

    kpath = irrfbz_path(model)
    +interp_model = Wannier.InterpModel(wannier_model; kpath=kpath)
    
    +recip_lattice: Å⁻¹
    +  a1:  2.37909  1.37357 -0.00000
    +  a2:  0.00000  2.74714  0.00000
    +  a3:  0.00000 -0.00000  0.62832
    +kgrid  : 5 5 1
    +n_kpts : 25
    +
    +lattice: Å
    +  a1:  2.64100  0.00000  0.00000
    +  a2: -1.32050  2.28717  0.00000
    +  a3:  0.00000  0.00000 10.00000
    +grid    = 5 5 1
    +n_rvecs = 31
    +using MDRS interpolation
    +
    +KPath{3} (6 points, 3 paths, 12 points in paths):
    + points: :M => [0.5, 0.0, 0.0]
    +         :A => [0.0, 0.0, 0.5]
    +         :H => [0.333333, 0.333333, 0.5]
    +         :K => [0.333333, 0.333333, 0.0]
    +         :Γ => [0.0, 0.0, 0.0]
    +         :L => [0.5, 0.0, 0.5]
    +  paths: [:Γ, :M, :K, :Γ, :A, :L, :H, :A]
    +         [:L, :M]
    +         [:H, :K]
    +  basis: [1.258962, 0.726862, -0.0]
    +         [0.0, 1.453724, 0.0]
    +         [0.0, -0.0, 0.332492]

    And so on... Refer to the Wannier.jl documentation for further examples.

    (Delete temporary files when done.)

    rm("wannier", recursive=true)

    Custom initial guesses

    We can also provide custom initial guesses for Wannierization, by passing a callable function in the projections array. The function receives the basis and a list of points (fractional coordinates in reciprocal space), and returns the Fourier transform of the initial guess function evaluated at each point.

    For example, we could use Gaussians for the σ and pz guesses with the following code:

    s_guess(center) = DFTK.GaussianWannierProjection(center)
    +function pz_guess(center)
    +    # Approximate with two Gaussians offset by 0.5 Å from the center of the atom
    +    offset = model.inv_lattice * [0, 0, austrip(0.5u"Å")]
    +    center1 = center + offset
    +    center2 = center - offset
    +    # Build the custom projector
    +    (basis, qs) -> DFTK.GaussianWannierProjection(center1)(basis, qs) - DFTK.GaussianWannierProjection(center2)(basis, qs)
    +end
    +# Feed to Wannier via the `projections` as before...
    pz_guess (generic function with 1 method)

    This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.

    Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.

    Wannierization with Wannier90

    We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:

    using wannier90_jll  # Needed to make run_wannier90 available
    +run_wannier90(scfres;
    +              fileprefix="wannier/graphene",
    +              n_wannier=5,
    +              projections,
    +              num_print_cycles=25,
    +              num_iter=200,
    +              #
    +              dis_win_max=19.0,
    +              dis_froz_max=ustrip(auconvert(u"eV", scfres.εF))+1, # 1 eV above Fermi level
    +              dis_num_iter=300,
    +              dis_mix_ratio=1.0,
    +              #
    +              wannier_plot=true,
    +              wannier_plot_format="cube",
    +              wannier_plot_supercell=5,
    +              write_xyz=true,
    +              translate_home_cell=true,
    +             );

    As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.

    (Delete temporary files.)

    rm("wannier", recursive=true)
    diff --git a/v0.6.16/features/index.html b/v0.6.16/features/index.html new file mode 100644 index 0000000000..8c14756bae --- /dev/null +++ b/v0.6.16/features/index.html @@ -0,0 +1,2 @@ + +DFTK features · DFTK.jl

    DFTK features

    • Runs out of the box on Linux, macOS and Windows

    Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

    diff --git a/v0.6.16/guide/installation/index.html b/v0.6.16/guide/installation/index.html new file mode 100644 index 0000000000..fa10e9ed5d --- /dev/null +++ b/v0.6.16/guide/installation/index.html @@ -0,0 +1,5 @@ + +Installation · DFTK.jl

    Installation

    In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.6 is required for DFTK.

    Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:

    import Pkg
    +Pkg.add("DFTK")

    which will install the latest DFTK release. Alternatively (if you like to be fully up to date) install the master branch:

    import Pkg
    +Pkg.add(name="DFTK", rev="master")

    DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box.

    That's it. With this you are all set to run the code in the Tutorial or the examples directory.

    DFTK version compatibility

    We follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.

    While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are

    You can install these packages using

    import Pkg
    +Pkg.add(["AtomsIO", "AtomsIOPython", "ASEconvert"])
    Python dependencies in Julia

    There are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.

    Installation for DFTK development

    If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.

    diff --git a/v0.6.16/guide/introductory_resources/index.html b/v0.6.16/guide/introductory_resources/index.html new file mode 100644 index 0000000000..fbe68f9784 --- /dev/null +++ b/v0.6.16/guide/introductory_resources/index.html @@ -0,0 +1,2 @@ + +Introductory resources · DFTK.jl

    Introductory resources

    This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.

    Workshop material and tutorials

    Textbooks

    Recordings

    diff --git a/v0.6.16/guide/periodic_problems.ipynb b/v0.6.16/guide/periodic_problems.ipynb new file mode 100644 index 0000000000..9b9027fd3d --- /dev/null +++ b/v0.6.16/guide/periodic_problems.ipynb @@ -0,0 +1,1252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Problems and plane-wave discretisations" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this example we want to show how DFTK can be used to solve simple one-dimensional\n", + "periodic problems. Along the lines this notebook serves as a concise introduction into\n", + "the underlying theory and jargon for solving periodic problems using plane-wave\n", + "discretizations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Periodicity and lattices\n", + "A periodic problem is characterized by being invariant to certain translations.\n", + "For example the $\\sin$ function is periodic with periodicity $2π$, i.e.\n", + "$$\n", + " \\sin(x) = \\sin(x + 2πm) \\quad ∀ m ∈ \\mathbb{Z},\n", + "$$\n", + "This is nothing else than saying that any translation by an integer multiple of $2π$\n", + "keeps the $\\sin$ function invariant. More formally, one can use the\n", + "translation operator $T_{2πm}$ to write this as:\n", + "$$\n", + " T_{2πm} \\, \\sin(x) = \\sin(x - 2πm) = \\sin(x).\n", + "$$\n", + "\n", + "Whenever such periodicity exists one can exploit it to save computational work.\n", + "Consider a problem in which we want to find a function $f : \\mathbb{R} → \\mathbb{R}$,\n", + "but *a priori* the solution is known to be periodic with periodicity $a$. As a consequence\n", + "of said periodicity it is sufficient to determine the values of $f$ for all $x$ from the\n", + "interval $[-a/2, a/2)$ to uniquely define $f$ on the full real axis. Naturally exploiting\n", + "periodicity in a computational procedure thus greatly reduces the required amount of work.\n", + "\n", + "Let us introduce some jargon: The periodicity of our problem implies that we may define\n", + "a **lattice**\n", + "```\n", + " -3a/2 -a/2 +a/2 +3a/2\n", + " ... |---------|---------|---------| ...\n", + " a a a\n", + "```\n", + "with lattice constant $a$. Each cell of the lattice is an identical periodic image of\n", + "any of its neighbors. For finding $f$ it is thus sufficient to consider only the\n", + "problem inside a **unit cell** $[-a/2, a/2)$ (this is the convention used by DFTK, but this is arbitrary, and for instance $[0,a)$ would have worked just as well).\n", + "\n", + "## Periodic operators and the Bloch transform\n", + "Not only functions, but also operators can feature periodicity.\n", + "Consider for example the **free-electron Hamiltonian**\n", + "$$\n", + " H = -\\frac12 Δ.\n", + "$$\n", + "In free-electron model (which gives rise to this Hamiltonian) electron motion is only\n", + "by their own kinetic energy. As this model features no potential which could make one point\n", + "in space more preferred than another, we would expect this model to be periodic.\n", + "If an operator is periodic with respect to a lattice such as the one defined above,\n", + "then it commutes with all lattice translations. For the free-electron case $H$\n", + "one can easily show exactly that, i.e.\n", + "$$\n", + " T_{ma} H = H T_{ma} \\quad ∀ m ∈ \\mathbb{Z}.\n", + "$$\n", + "We note in passing that the free-electron model is actually very special in the sense that\n", + "the choice of $a$ is completely arbitrary here. In other words $H$ is periodic\n", + "with respect to any translation. In general, however, periodicity is only\n", + "attained with respect to a finite number of translations $a$ and we will take this\n", + "viewpoint here.\n", + "\n", + "**Bloch's theorem** now tells us that for periodic operators,\n", + "the solutions to the eigenproblem\n", + "$$\n", + " H ψ_{kn} = ε_{kn} ψ_{kn}\n", + "$$\n", + "satisfy a factorization\n", + "$$\n", + " ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x)\n", + "$$\n", + "into a plane wave $e^{i k⋅x}$ and a lattice-periodic function\n", + "$$\n", + " T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \\quad ∀ m ∈ \\mathbb{Z}.\n", + "$$\n", + "In this $n$ is a labeling integer index and $k$ is a real number,\n", + "whose details will be clarified in the next section.\n", + "The index $n$ is sometimes also called the **band index** and\n", + "functions $ψ_{kn}$ satisfying this factorization are also known as\n", + "**Bloch functions** or **Bloch states**.\n", + "\n", + "Consider the application of $2H = -Δ = - \\frac{d^2}{d x^2}$\n", + "to such a Bloch wave. First we notice for any function $f$\n", + "$$\n", + " -i∇ \\left( e^{i k⋅x} f \\right)\n", + " = -i\\frac{d}{dx} \\left( e^{i k⋅x} f \\right)\n", + " = k e^{i k⋅x} f + e^{i k⋅x} (-i∇) f = e^{i k⋅x} (-i∇ + k) f.\n", + "$$\n", + "Using this result twice one shows that applying $-Δ$ yields\n", + "$$\n", + "\\begin{aligned}\n", + " -\\Delta \\left(e^{i k⋅x} u_{kn}(x)\\right)\n", + " &= -i∇ ⋅ \\left[-i∇ \\left(u_{kn}(x) e^{i k⋅x} \\right) \\right] \\\\\n", + " &= -i∇ ⋅ \\left[e^{i k⋅x} (-i∇ + k) u_{kn}(x) \\right] \\\\\n", + " &= e^{i k⋅x} (-i∇ + k)^2 u_{kn}(x) \\\\\n", + " &= e^{i k⋅x} 2H_k u_{kn}(x),\n", + "\\end{aligned}\n", + "$$\n", + "where we defined\n", + "$$\n", + " H_k = \\frac12 (-i∇ + k)^2.\n", + "$$\n", + "The action of this operator on a function $u_{kn}$ is given by\n", + "$$\n", + " H_k u_{kn} = e^{-i k⋅x} H e^{i k⋅x} u_{kn},\n", + "$$\n", + "which in particular implies that\n", + "$$\n", + " H_k u_{kn} = ε_{kn} u_{kn} \\quad ⇔ \\quad H (e^{i k⋅x} u_{kn}) = ε_{kn} (e^{i k⋅x} u_{kn}).\n", + "$$\n", + "To seek the eigenpairs of $H$ we may thus equivalently\n", + "find the eigenpairs of *all* $H_k$.\n", + "The point of this is that the eigenfunctions $u_{kn}$ of $H_k$\n", + "are periodic (unlike the eigenfunctions $ψ_{kn}$ of $H$).\n", + "In contrast to $ψ_{kn}$ the functions $u_{kn}$ can thus be fully\n", + "represented considering the eigenproblem only on the unit cell.\n", + "\n", + "A detailed mathematical analysis shows that the transformation from $H$\n", + "to the set of all $H_k$ for a suitable set of values for $k$ (details below)\n", + "is actually a unitary transformation, the so-called **Bloch transform**.\n", + "This transform brings the Hamiltonian into the symmetry-adapted basis for\n", + "translational symmetry, which are exactly the Bloch functions.\n", + "Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries\n", + "(like the point group symmetry in molecules), the Bloch transform also makes\n", + "the Hamiltonian $H$ block-diagonal[^1]:\n", + "$$\n", + " T_B H T_B^{-1} ⟶ \\left( \\begin{array}{cccc} H_1&&&0 \\\\ &H_2\\\\&&H_3\\\\0&&&\\ddots \\end{array} \\right)\n", + "$$\n", + "with each block $H_k$ taking care of one value $k$.\n", + "This block-diagonal structure under the basis of Bloch functions lets us\n", + "completely describe the spectrum of $H$ by looking only at the spectrum\n", + "of all $H_k$ blocks.\n", + "\n", + "[^1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian\n", + " is not a matrix but an operator and the number of blocks is infinite.\n", + " The mathematically precise term is that the Bloch transform reveals the fibers\n", + " of the Hamiltonian.\n", + "\n", + "## The Brillouin zone\n", + "\n", + "We now consider the parameter $k$ of the Hamiltonian blocks in detail.\n", + "\n", + "- As discussed $k$ is a real number. It turns out, however, that some of\n", + " these $k∈\\mathbb{R}$ give rise to operators related by unitary transformations\n", + " (again due to translational symmetry).\n", + "- Since such operators have the same eigenspectrum, only one version needs to be considered.\n", + "- The smallest subset from which $k$ is chosen is the **Brillouin zone** (BZ).\n", + "\n", + "- The BZ is the unit cell of the **reciprocal lattice**, which may be constructed from\n", + " the **real-space lattice** by a Fourier transform.\n", + "- In our simple 1D case the reciprocal lattice is just\n", + " ```\n", + " ... |--------|--------|--------| ...\n", + " 2π/a 2π/a 2π/a\n", + " ```\n", + " i.e. like the real-space lattice, but just with a different lattice constant\n", + " $b = 2π / a$.\n", + "- The BZ in our example is thus $B = [-π/a, π/a)$. The members of $B$\n", + " are typically called $k$-points.\n", + "\n", + "## Discretization and plane-wave basis sets\n", + "\n", + "With what we discussed so far the strategy to find all eigenpairs of a periodic\n", + "Hamiltonian $H$ thus reduces to finding the eigenpairs of all $H_k$ with $k ∈ B$.\n", + "This requires *two* discretisations:\n", + "\n", + " - $B$ is infinite (and not countable). To discretize we first only pick a finite number\n", + " of $k$-points. Usually this **$k$-point sampling** is done by picking $k$-points\n", + " along a regular grid inside the BZ, the **$k$-grid**.\n", + " - Each $H_k$ is still an infinite-dimensional operator.\n", + " Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis\n", + " and diagonalize the resulting matrix.\n", + "\n", + "For the second step multiple types of bases are used in practice (finite differences,\n", + "finite elements, Gaussians, ...). In DFTK we currently support only plane-wave\n", + "discretizations.\n", + "\n", + "For our 1D example normalized plane waves are defined as the functions\n", + "$$\n", + "e_{G}(x) = \\frac{e^{i G x}}{\\sqrt{a}} \\qquad G \\in b\\mathbb{Z}\n", + "$$\n", + "and typically one forms basis sets from these by specifying a\n", + "**kinetic energy cutoff** $E_\\text{cut}$:\n", + "$$\n", + "\\left\\{ e_{G} \\, \\big| \\, (G + k)^2 \\leq 2E_\\text{cut} \\right\\}\n", + "$$\n", + "\n", + "## Correspondence of theory to DFTK code\n", + "\n", + "Before solving a few example problems numerically in DFTK, a short overview\n", + "of the correspondence of the introduced quantities to data structures inside DFTK.\n", + "\n", + "- $H$ is represented by a `Hamiltonian` object and variables for hamiltonians are usually called `ham`.\n", + "- $H_k$ by a `HamiltonianBlock` and variables are `hamk`.\n", + "- $ψ_{kn}$ is usually just called `ψ`.\n", + " $u_{kn}$ is not stored (in favor of $ψ_{kn}$).\n", + "- $ε_{kn}$ is called `eigenvalues`.\n", + "- $k$-points are represented by `Kpoint` and respective variables called `kpt`.\n", + "- The basis of plane waves is managed by `PlaneWaveBasis` and variables usually just called `basis`.\n", + "\n", + "## Solving the free-electron Hamiltonian\n", + "\n", + "One typical approach to get physical insight into a Hamiltonian $H$ is to plot\n", + "a so-called **band structure**, that is the eigenvalues of $H_k$ versus $k$.\n", + "In DFTK we achieve this using the following steps:\n", + "\n", + "Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems.\n", + "Therefore quantities related to the problem space are have a fixed\n", + "dimension 3. The convention is that for 1D / 2D problems the\n", + "trailing entries are always zero and ignored in the computation.\n", + "For the lattice we therefore construct a 3x3 matrix with only one entry." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "lattice = zeros(3, 3)\n", + "lattice[1, 1] = 20.;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Step 2: Select a model. In this case we choose a free-electron model,\n", + "which is the same as saying that there is only a Kinetic term\n", + "(and no potential) in the model." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Model(custom, 1D):\n lattice (in Bohr) : [20 , 0 , 0 ]\n [0 , 0 , 0 ]\n [0 , 0 , 0 ]\n unit cell volume : 20 Bohr\n\n num. electrons : 0\n spin polarization : none\n temperature : 0 Ha\n\n terms : Kinetic()" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "model = Model(lattice; terms=[Kinetic()])" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Step 3: Define a plane-wave basis using this model and a cutoff $E_\\text{cut}$\n", + "of 300 Hartree. The $k$-point grid is given as a regular grid in the BZ\n", + "(a so-called **Monkhorst-Pack** grid). Here we select only one $k$-point (1x1x1),\n", + "see the note below for some details on this choice." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "PlaneWaveBasis discretization:\n architecture : DFTK.CPU()\n num. mpi processes : 1\n num. julia threads : 1\n num. blas threads : 2\n num. fft threads : 1\n\n Ecut : 300.0 Ha\n fft_size : (320, 1, 1), 320 total points\n kgrid : MonkhorstPack([1, 1, 1])\n num. red. kpoints : 1\n num. irred. kpoints : 1\n\n Discretized Model(custom, 1D):\n lattice (in Bohr) : [20 , 0 , 0 ]\n [0 , 0 , 0 ]\n [0 , 0 , 0 ]\n unit cell volume : 20 Bohr\n \n num. electrons : 0\n spin polarization : none\n temperature : 0 Ha\n \n terms : Kinetic()" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Step 4: Plot the bands! Select a density of $k$-points for the $k$-grid to use\n", + "for the bandstructure calculation, discretize the problem and diagonalize it.\n", + "Afterwards plot the bands." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:14\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=6}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "using Unitful\n", + "using UnitfulAtomic\n", + "using Plots\n", + "\n", + "plot_bandstructure(basis; n_bands=6, kline_density=100)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Selection of k-point grids in `PlaneWaveBasis` construction\"\n", + " You might wonder why we only selected a single $k$-point (clearly a very crude\n", + " and inaccurate approximation). In this example the `kgrid` parameter specified\n", + " in the construction of the `PlaneWaveBasis`\n", + " is not actually used for plotting the bands. It is only used when solving more\n", + " involved models like density-functional theory (DFT) where the Hamiltonian is\n", + " non-linear. In these cases before plotting the bands the self-consistent field\n", + " equations (SCF) need to be solved first. This is typically done on\n", + " a different $k$-point grid than the grid used for the bands later on.\n", + " In our case we don't need this extra step and therefore the `kgrid` value passed\n", + " to `PlaneWaveBasis` is actually arbitrary." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Adding potentials\n", + "So far so good. But free electrons are actually a little boring,\n", + "so let's add a potential interacting with the electrons.\n", + "\n", + "- The modified problem we will look at consists of diagonalizing\n", + " $$\n", + " H_k = \\frac12 (-i \\nabla + k)^2 + V\n", + " $$\n", + " for all $k \\in B$ with a periodic potential $V$ interacting with the electrons.\n", + "\n", + "- A number of \"standard\" potentials are readily implemented in DFTK and\n", + " can be assembled using the `terms` kwarg of the model.\n", + " This allows to seamlessly construct\n", + "\n", + " * density-functial theory (DFT) models for treating electronic structures\n", + " (see the Tutorial).\n", + " * Gross-Pitaevskii models for bosonic systems\n", + " (see Gross-Pitaevskii equation in one dimension)\n", + " * even some more unusual cases like anyonic models.\n", + "\n", + "We will use `ElementGaussian`, which is an analytic potential describing a Gaussian\n", + "interaction with the electrons to DFTK. See Custom potential for\n", + "how to create a custom potential.\n", + "\n", + "A single potential looks like:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "using LinearAlgebra\n", + "nucleus = ElementGaussian(0.3, 10.0)\n", + "plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "With this element at hand we can easily construct a setting\n", + "where two potentials of this form are located at positions\n", + "$20$ and $80$ inside the lattice $[0, 100]$:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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wYKJEyfW1NQ899xzM2fONOW81NTUjz/+ODMzMz8/Pzs7+9NPPwWAhoaGoUOHHj169Pr16/Hx8VOmTGltbQWAxsZGNze35N8NHTrUyh8TyQcF+PoSt6g3NgfNaagn6aaC/aWYCZHF8RC63333XVxc3OjRo+3s7F599dUNGzbo9X8aCsjOzr5w4cLf/vY3pVL5+OOP29nZ7d27FwDWrFnzyCOPhISEuLi4vPDCC2vWrAGA4ODg5cuX+/v729raLl++vLy8vLi42PR37Ozsev7OwcHB+p8UyURqKXVSwTBPHB80s6fCma8vYe8osjgeEuGVK1f69+9v+rlPnz4tLS0lJSU3FejVq5e9vb3p1/79+1+5cgUALl++3PbCfv36Xb16leP+FCT79u3TaDQBAQGmX7Ozs4OCgiIjI1etWmU0Gi36oZCcfXMZ11SziId6MSmlXGUz3/VAUqe0xB+tqqravHnzrccfeOABtVp9/fr1tnzGMIyjo2NVVVWvXr3ail2/ft3Jyant127dulVVVZmOOzs7tx00Go11dXWurq6mI7m5uUuXLv3f//6nVCoBoF+/frt37+7Zs+fFixefeuqp1tbW1157rd3anj59+t///ndiYqLpVycnp4sXL7q4uNxa0mg0GgwGzKkW1dDQwHcVOud6K9lTZLNqQGt9vTg68UR0hgnAfT6qb84bl4aKKehMozM2NjhibEEdv4zt7OxUqruseWiRRNjc3HzhwoVbj0+YMAEA3N3d6+vrTUdYlm1oaPDw8Lix2I0FAKCmpmbQoEGm43V1daaDtbW1KpWqW7dupl+Liori4uJWrlw5bdo00xFTjygA+Pj4vPXWW++9997tEmFERMTcuXOXLVt2189lSoRtTVVkIW23O6Kw7gJ3nz/1d3e6e1HBENEZXtSXLjnEvhQppqDDRGgdZryMLZIIfX19P//889v9a2ho6PHjx00/nzt3zsHBwdfX96YCOTk5TU1NpoG9s2fPLlq0CADCwsKys7NNZbKzs0NDQxmGAYCysrKEhITFixcvXry43XdUKpU3daIiZC7fXuFWDVXwXQvJGqMmLSwcr6A4BIssh4eBjUceeeTAgQPJycn19fVvvvnm/Pnz7ezsAOD999//4YcfAKBfv34DBgx455139Hr9F198wbKsqSn5xBNPrFu37ty5cxUVFR988METTzwBAJWV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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "using LinearAlgebra\n", + "\n", + "# Define the 1D lattice [0, 100]\n", + "lattice = diagm([100., 0, 0])\n", + "\n", + "# Place them at 20 and 80 in *fractional coordinates*,\n", + "# that is 0.2 and 0.8, since the lattice is 100 wide.\n", + "nucleus = ElementGaussian(0.3, 10.0)\n", + "atoms = [nucleus, nucleus]\n", + "positions = [[0.2, 0, 0], [0.8, 0, 0]]\n", + "\n", + "# Assemble the model, discretize and build the Hamiltonian\n", + "model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\n", + "basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));\n", + "ham = Hamiltonian(basis)\n", + "\n", + "# Extract the total potential term of the Hamiltonian and plot it\n", + "potential = DFTK.total_local_potential(ham)[:, 1, 1]\n", + "rvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis\n", + "x = [r[1] for r in rvecs] # only keep the x coordinate\n", + "plot(x, potential, label=\"\", xlabel=\"x\", ylabel=\"V(x)\")" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "This potential is the sum of two \"atomic\" potentials (the two \"Gaussian\" elements).\n", + "Due to the periodic setting we are considering interactions naturally also occur\n", + "across the unit cell boundary (i.e. wrapping from `100` over to `0`).\n", + "The required periodization of the atomic potential is automatically taken care,\n", + "such that the potential is smooth across the cell boundary at `100`/`0`.\n", + "\n", + "With this setup, let's look at the bands:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:14\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=6}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "plot_bandstructure(basis; n_bands=6, kline_density=500)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "The bands are noticeably different.\n", + " - The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous\n", + " but has gaps.\n", + "\n", + " - The two lowest bands are almost flat. This is because they represent\n", + " two tightly bound and localized electrons inside the two Gaussians.\n", + "\n", + " - The higher the bands are in energy, the more free-electron-like they are.\n", + " In other words the higher the kinetic energy of the electrons, the less they feel\n", + " the effect of the two Gaussian potentials. As it turns out the curvature of the bands,\n", + " (the degree to which they are free-electron-like) is highly related to the delocalization\n", + " of electrons in these bands: The more curved the more delocalized. In some sense\n", + " \"free electrons\" correspond to perfect delocalization." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/guide/periodic_problems.jl b/v0.6.16/guide/periodic_problems.jl new file mode 100644 index 0000000000..0230495ab2 --- /dev/null +++ b/v0.6.16/guide/periodic_problems.jl @@ -0,0 +1,332 @@ +# # [Problems and plane-wave discretisations](@id periodic-problems) +#md # [![](https://mybinder.org/badge_logo.svg)](@__BINDER_ROOT_URL__/guide/@__NAME__.ipynb) +#md # [![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](@__NBVIEWER_ROOT_URL__/guide/@__NAME__.ipynb) + +# In this example we want to show how DFTK can be used to solve simple one-dimensional +# periodic problems. Along the lines this notebook serves as a concise introduction into +# the underlying theory and jargon for solving periodic problems using plane-wave +# discretizations. + +# ## Periodicity and lattices +# A periodic problem is characterized by being invariant to certain translations. +# For example the ``\sin`` function is periodic with periodicity ``2π``, i.e. +# ```math +# \sin(x) = \sin(x + 2πm) \quad ∀ m ∈ \mathbb{Z}, +# ``` +# This is nothing else than saying that any translation by an integer multiple of ``2π`` +# keeps the ``\sin`` function invariant. More formally, one can use the +# translation operator ``T_{2πm}`` to write this as: +# ```math +# T_{2πm} \, \sin(x) = \sin(x - 2πm) = \sin(x). +# ``` +# +# Whenever such periodicity exists one can exploit it to save computational work. +# Consider a problem in which we want to find a function ``f : \mathbb{R} → \mathbb{R}``, +# but *a priori* the solution is known to be periodic with periodicity ``a``. As a consequence +# of said periodicity it is sufficient to determine the values of ``f`` for all ``x`` from the +# interval ``[-a/2, a/2)`` to uniquely define ``f`` on the full real axis. Naturally exploiting +# periodicity in a computational procedure thus greatly reduces the required amount of work. +# +# Let us introduce some jargon: The periodicity of our problem implies that we may define +# a **lattice** +# ``` +# -3a/2 -a/2 +a/2 +3a/2 +# ... |---------|---------|---------| ... +# a a a +# ``` +# with lattice constant ``a``. Each cell of the lattice is an identical periodic image of +# any of its neighbors. For finding ``f`` it is thus sufficient to consider only the +# problem inside a **unit cell** ``[-a/2, a/2)`` (this is the convention used by DFTK, but this is arbitrary, and for instance ``[0,a)`` would have worked just as well). +# +# ## Periodic operators and the Bloch transform +# Not only functions, but also operators can feature periodicity. +# Consider for example the **free-electron Hamiltonian** +# ```math +# H = -\frac12 Δ. +# ``` +# In free-electron model (which gives rise to this Hamiltonian) electron motion is only +# by their own kinetic energy. As this model features no potential which could make one point +# in space more preferred than another, we would expect this model to be periodic. +# If an operator is periodic with respect to a lattice such as the one defined above, +# then it commutes with all lattice translations. For the free-electron case ``H`` +# one can easily show exactly that, i.e. +# ```math +# T_{ma} H = H T_{ma} \quad ∀ m ∈ \mathbb{Z}. +# ``` +# We note in passing that the free-electron model is actually very special in the sense that +# the choice of ``a`` is completely arbitrary here. In other words ``H`` is periodic +# with respect to any translation. In general, however, periodicity is only +# attained with respect to a finite number of translations ``a`` and we will take this +# viewpoint here. +# +# **Bloch's theorem** now tells us that for periodic operators, +# the solutions to the eigenproblem +# ```math +# H ψ_{kn} = ε_{kn} ψ_{kn} +# ``` +# satisfy a factorization +# ```math +# ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x) +# ``` +# into a plane wave ``e^{i k⋅x}`` and a lattice-periodic function +# ```math +# T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \quad ∀ m ∈ \mathbb{Z}. +# ``` +# In this ``n`` is a labeling integer index and ``k`` is a real number, +# whose details will be clarified in the next section. +# The index ``n`` is sometimes also called the **band index** and +# functions ``ψ_{kn}`` satisfying this factorization are also known as +# **Bloch functions** or **Bloch states**. +# +# Consider the application of ``2H = -Δ = - \frac{d^2}{d x^2}`` +# to such a Bloch wave. First we notice for any function ``f`` +# ```math +# -i∇ \left( e^{i k⋅x} f \right) +# = -i\frac{d}{dx} \left( e^{i k⋅x} f \right) +# = k e^{i k⋅x} f + e^{i k⋅x} (-i∇) f = e^{i k⋅x} (-i∇ + k) f. +# ``` +# Using this result twice one shows that applying ``-Δ`` yields +# ```math +# \begin{aligned} +# -\Delta \left(e^{i k⋅x} u_{kn}(x)\right) +# &= -i∇ ⋅ \left[-i∇ \left(u_{kn}(x) e^{i k⋅x} \right) \right] \\ +# &= -i∇ ⋅ \left[e^{i k⋅x} (-i∇ + k) u_{kn}(x) \right] \\ +# &= e^{i k⋅x} (-i∇ + k)^2 u_{kn}(x) \\ +# &= e^{i k⋅x} 2H_k u_{kn}(x), +# \end{aligned} +# ``` +# where we defined +# ```math +# H_k = \frac12 (-i∇ + k)^2. +# ``` +# The action of this operator on a function ``u_{kn}`` is given by +# ```math +# H_k u_{kn} = e^{-i k⋅x} H e^{i k⋅x} u_{kn}, +# ``` +# which in particular implies that +# ```math +# H_k u_{kn} = ε_{kn} u_{kn} \quad ⇔ \quad H (e^{i k⋅x} u_{kn}) = ε_{kn} (e^{i k⋅x} u_{kn}). +# ``` +# To seek the eigenpairs of ``H`` we may thus equivalently +# find the eigenpairs of *all* ``H_k``. +# The point of this is that the eigenfunctions ``u_{kn}`` of ``H_k`` +# are periodic (unlike the eigenfunctions ``ψ_{kn}`` of ``H``). +# In contrast to ``ψ_{kn}`` the functions ``u_{kn}`` can thus be fully +# represented considering the eigenproblem only on the unit cell. +# +# A detailed mathematical analysis shows that the transformation from ``H`` +# to the set of all ``H_k`` for a suitable set of values for ``k`` (details below) +# is actually a unitary transformation, the so-called **Bloch transform**. +# This transform brings the Hamiltonian into the symmetry-adapted basis for +# translational symmetry, which are exactly the Bloch functions. +# Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries +# (like the point group symmetry in molecules), the Bloch transform also makes +# the Hamiltonian ``H`` block-diagonal[^1]: +# ```math +# T_B H T_B^{-1} ⟶ \left( \begin{array}{cccc} H_1&&&0 \\ &H_2\\&&H_3\\0&&&\ddots \end{array} \right) +# ``` +# with each block ``H_k`` taking care of one value ``k``. +# This block-diagonal structure under the basis of Bloch functions lets us +# completely describe the spectrum of ``H`` by looking only at the spectrum +# of all ``H_k`` blocks. +# +# [^1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian +# is not a matrix but an operator and the number of blocks is infinite. +# The mathematically precise term is that the Bloch transform reveals the fibers +# of the Hamiltonian. +# +# ## The Brillouin zone +# +# We now consider the parameter ``k`` of the Hamiltonian blocks in detail. +# +# - As discussed ``k`` is a real number. It turns out, however, that some of +# these ``k∈\mathbb{R}`` give rise to operators related by unitary transformations +# (again due to translational symmetry). +# - Since such operators have the same eigenspectrum, only one version needs to be considered. +# - The smallest subset from which ``k`` is chosen is the **Brillouin zone** (BZ). +# +# - The BZ is the unit cell of the **reciprocal lattice**, which may be constructed from +# the **real-space lattice** by a Fourier transform. +# - In our simple 1D case the reciprocal lattice is just +# ``` +# ... |--------|--------|--------| ... +# 2π/a 2π/a 2π/a +# ``` +# i.e. like the real-space lattice, but just with a different lattice constant +# ``b = 2π / a``. +# - The BZ in our example is thus ``B = [-π/a, π/a)``. The members of ``B`` +# are typically called ``k``-points. +# +# ## Discretization and plane-wave basis sets +# +# With what we discussed so far the strategy to find all eigenpairs of a periodic +# Hamiltonian ``H`` thus reduces to finding the eigenpairs of all ``H_k`` with ``k ∈ B``. +# This requires *two* discretisations: +# +# - ``B`` is infinite (and not countable). To discretize we first only pick a finite number +# of ``k``-points. Usually this **``k``-point sampling** is done by picking ``k``-points +# along a regular grid inside the BZ, the **``k``-grid**. +# - Each ``H_k`` is still an infinite-dimensional operator. +# Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis +# and diagonalize the resulting matrix. +# +# For the second step multiple types of bases are used in practice (finite differences, +# finite elements, Gaussians, ...). In DFTK we currently support only plane-wave +# discretizations. +# +# For our 1D example normalized plane waves are defined as the functions +# ```math +# e_{G}(x) = \frac{e^{i G x}}{\sqrt{a}} \qquad G \in b\mathbb{Z} +# ``` +# and typically one forms basis sets from these by specifying a +# **kinetic energy cutoff** ``E_\text{cut}``: +# ```math +# \left\{ e_{G} \, \big| \, (G + k)^2 \leq 2E_\text{cut} \right\} +# ``` +# +# ## Correspondence of theory to DFTK code +# +# Before solving a few example problems numerically in DFTK, a short overview +# of the correspondence of the introduced quantities to data structures inside DFTK. +# +# - ``H`` is represented by a `Hamiltonian` object and variables for hamiltonians are usually called `ham`. +# - ``H_k`` by a `HamiltonianBlock` and variables are `hamk`. +# - ``ψ_{kn}`` is usually just called `ψ`. +# ``u_{kn}`` is not stored (in favor of ``ψ_{kn}``). +# - ``ε_{kn}`` is called `eigenvalues`. +# - ``k``-points are represented by `Kpoint` and respective variables called `kpt`. +# - The basis of plane waves is managed by `PlaneWaveBasis` and variables usually just called `basis`. +# +# ## Solving the free-electron Hamiltonian +# +# One typical approach to get physical insight into a Hamiltonian ``H`` is to plot +# a so-called **band structure**, that is the eigenvalues of ``H_k`` versus ``k``. +# In DFTK we achieve this using the following steps: +# +# Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. +# Therefore quantities related to the problem space are have a fixed +# dimension 3. The convention is that for 1D / 2D problems the +# trailing entries are always zero and ignored in the computation. +# For the lattice we therefore construct a 3x3 matrix with only one entry. +using DFTK + +lattice = zeros(3, 3) +lattice[1, 1] = 20.; + +# Step 2: Select a model. In this case we choose a free-electron model, +# which is the same as saying that there is only a Kinetic term +# (and no potential) in the model. +model = Model(lattice; terms=[Kinetic()]) + +# Step 3: Define a plane-wave basis using this model and a cutoff ``E_\text{cut}`` +# of 300 Hartree. The ``k``-point grid is given as a regular grid in the BZ +# (a so-called **Monkhorst-Pack** grid). Here we select only one ``k``-point (1x1x1), +# see the note below for some details on this choice. +basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1)) + +# Step 4: Plot the bands! Select a density of ``k``-points for the ``k``-grid to use +# for the bandstructure calculation, discretize the problem and diagonalize it. +# Afterwards plot the bands. + +using Unitful +using UnitfulAtomic +using Plots + +plot_bandstructure(basis; n_bands=6, kline_density=100) + +# !!! note "Selection of k-point grids in `PlaneWaveBasis` construction" +# You might wonder why we only selected a single ``k``-point (clearly a very crude +# and inaccurate approximation). In this example the `kgrid` parameter specified +# in the construction of the `PlaneWaveBasis` +# is not actually used for plotting the bands. It is only used when solving more +# involved models like density-functional theory (DFT) where the Hamiltonian is +# non-linear. In these cases before plotting the bands the self-consistent field +# equations (SCF) need to be solved first. This is typically done on +# a different ``k``-point grid than the grid used for the bands later on. +# In our case we don't need this extra step and therefore the `kgrid` value passed +# to `PlaneWaveBasis` is actually arbitrary. + + +# ## Adding potentials +# So far so good. But free electrons are actually a little boring, +# so let's add a potential interacting with the electrons. +# +# - The modified problem we will look at consists of diagonalizing +# ```math +# H_k = \frac12 (-i \nabla + k)^2 + V +# ``` +# for all ``k \in B`` with a periodic potential ``V`` interacting with the electrons. +# +# - A number of "standard" potentials are readily implemented in DFTK and +# can be assembled using the `terms` kwarg of the model. +# This allows to seamlessly construct +# +# * density-functial theory (DFT) models for treating electronic structures +# (see the [Tutorial](@ref)). +# * Gross-Pitaevskii models for bosonic systems +# (see [Gross-Pitaevskii equation in one dimension](@ref gross-pitaevskii)) +# * even some more unusual cases like anyonic models. +# +# We will use `ElementGaussian`, which is an analytic potential describing a Gaussian +# interaction with the electrons to DFTK. See [Custom potential](@ref custom-potential) for +# how to create a custom potential. +# +# A single potential looks like: + +using Plots +using LinearAlgebra +nucleus = ElementGaussian(0.3, 10.0) +plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50)) + +# With this element at hand we can easily construct a setting +# where two potentials of this form are located at positions +# ``20`` and ``80`` inside the lattice ``[0, 100]``: + +using LinearAlgebra + +## Define the 1D lattice [0, 100] +lattice = diagm([100., 0, 0]) + +## Place them at 20 and 80 in *fractional coordinates*, +## that is 0.2 and 0.8, since the lattice is 100 wide. +nucleus = ElementGaussian(0.3, 10.0) +atoms = [nucleus, nucleus] +positions = [[0.2, 0, 0], [0.8, 0, 0]] + +## Assemble the model, discretize and build the Hamiltonian +model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()]) +basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1)); +ham = Hamiltonian(basis) + +## Extract the total potential term of the Hamiltonian and plot it +potential = DFTK.total_local_potential(ham)[:, 1, 1] +rvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis +x = [r[1] for r in rvecs] # only keep the x coordinate +plot(x, potential, label="", xlabel="x", ylabel="V(x)") + +# This potential is the sum of two "atomic" potentials (the two "Gaussian" elements). +# Due to the periodic setting we are considering interactions naturally also occur +# across the unit cell boundary (i.e. wrapping from `100` over to `0`). +# The required periodization of the atomic potential is automatically taken care, +# such that the potential is smooth across the cell boundary at `100`/`0`. +# +# With this setup, let's look at the bands: + +using Unitful +using UnitfulAtomic + +plot_bandstructure(basis; n_bands=6, kline_density=500) + +# The bands are noticeably different. +# - The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous +# but has gaps. +# +# - The two lowest bands are almost flat. This is because they represent +# two tightly bound and localized electrons inside the two Gaussians. +# +# - The higher the bands are in energy, the more free-electron-like they are. +# In other words the higher the kinetic energy of the electrons, the less they feel +# the effect of the two Gaussian potentials. As it turns out the curvature of the bands, +# (the degree to which they are free-electron-like) is highly related to the delocalization +# of electrons in these bands: The more curved the more delocalized. In some sense +# "free electrons" correspond to perfect delocalization. diff --git a/dev/guide/periodic_problems/1fe64def.svg b/v0.6.16/guide/periodic_problems/0c690b29.svg similarity index 84% rename from dev/guide/periodic_problems/1fe64def.svg rename to v0.6.16/guide/periodic_problems/0c690b29.svg index 3a2d1729bd..2dea0918e9 100644 --- a/dev/guide/periodic_problems/1fe64def.svg +++ b/v0.6.16/guide/periodic_problems/0c690b29.svg @@ -1,46 +1,46 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/periodic_problems/691b50fa.svg b/v0.6.16/guide/periodic_problems/2b711f31.svg similarity index 76% rename from dev/guide/periodic_problems/691b50fa.svg rename to v0.6.16/guide/periodic_problems/2b711f31.svg index af48169e61..0cf5ad5ac8 100644 --- a/dev/guide/periodic_problems/691b50fa.svg +++ b/v0.6.16/guide/periodic_problems/2b711f31.svg @@ -1,135 +1,135 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/periodic_problems/ad9229ab.svg b/v0.6.16/guide/periodic_problems/ad9229ab.svg new file mode 100644 index 0000000000..04125986fb --- /dev/null +++ b/v0.6.16/guide/periodic_problems/ad9229ab.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/periodic_problems/c12bcd7b.svg b/v0.6.16/guide/periodic_problems/c12bcd7b.svg new file mode 100644 index 0000000000..36b2831d43 --- /dev/null +++ b/v0.6.16/guide/periodic_problems/c12bcd7b.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/periodic_problems/index.html b/v0.6.16/guide/periodic_problems/index.html new file mode 100644 index 0000000000..1d9ce72769 --- /dev/null +++ b/v0.6.16/guide/periodic_problems/index.html @@ -0,0 +1,79 @@ + +Problems and plane-wave discretisations · DFTK.jl

    Problems and plane-wave discretisations

    In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.

    Periodicity and lattices

    A periodic problem is characterized by being invariant to certain translations. For example the $\sin$ function is periodic with periodicity $2π$, i.e.

    \[ \sin(x) = \sin(x + 2πm) \quad ∀ m ∈ \mathbb{Z},\]

    This is nothing else than saying that any translation by an integer multiple of $2π$ keeps the $\sin$ function invariant. More formally, one can use the translation operator $T_{2πm}$ to write this as:

    \[ T_{2πm} \, \sin(x) = \sin(x - 2πm) = \sin(x).\]

    Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function $f : \mathbb{R} → \mathbb{R}$, but a priori the solution is known to be periodic with periodicity $a$. As a consequence of said periodicity it is sufficient to determine the values of $f$ for all $x$ from the interval $[-a/2, a/2)$ to uniquely define $f$ on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.

    Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice

            -3a/2      -a/2      +a/2     +3a/2
    +       ... |---------|---------|---------| ...
    +                a         a         a

    with lattice constant $a$. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding $f$ it is thus sufficient to consider only the problem inside a unit cell $[-a/2, a/2)$ (this is the convention used by DFTK, but this is arbitrary, and for instance $[0,a)$ would have worked just as well).

    Periodic operators and the Bloch transform

    Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian

    \[ H = -\frac12 Δ.\]

    In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case $H$ one can easily show exactly that, i.e.

    \[ T_{ma} H = H T_{ma} \quad ∀ m ∈ \mathbb{Z}.\]

    We note in passing that the free-electron model is actually very special in the sense that the choice of $a$ is completely arbitrary here. In other words $H$ is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations $a$ and we will take this viewpoint here.

    Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem

    \[ H ψ_{kn} = ε_{kn} ψ_{kn}\]

    satisfy a factorization

    \[ ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x)\]

    into a plane wave $e^{i k⋅x}$ and a lattice-periodic function

    \[ T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \quad ∀ m ∈ \mathbb{Z}.\]

    In this $n$ is a labeling integer index and $k$ is a real number, whose details will be clarified in the next section. The index $n$ is sometimes also called the band index and functions $ψ_{kn}$ satisfying this factorization are also known as Bloch functions or Bloch states.

    Consider the application of $2H = -Δ = - \frac{d^2}{d x^2}$ to such a Bloch wave. First we notice for any function $f$

    \[ -i∇ \left( e^{i k⋅x} f \right) + = -i\frac{d}{dx} \left( e^{i k⋅x} f \right) + = k e^{i k⋅x} f + e^{i k⋅x} (-i∇) f = e^{i k⋅x} (-i∇ + k) f.\]

    Using this result twice one shows that applying $-Δ$ yields

    \[\begin{aligned} + -\Delta \left(e^{i k⋅x} u_{kn}(x)\right) + &= -i∇ ⋅ \left[-i∇ \left(u_{kn}(x) e^{i k⋅x} \right) \right] \\ + &= -i∇ ⋅ \left[e^{i k⋅x} (-i∇ + k) u_{kn}(x) \right] \\ + &= e^{i k⋅x} (-i∇ + k)^2 u_{kn}(x) \\ + &= e^{i k⋅x} 2H_k u_{kn}(x), +\end{aligned}\]

    where we defined

    \[ H_k = \frac12 (-i∇ + k)^2.\]

    The action of this operator on a function $u_{kn}$ is given by

    \[ H_k u_{kn} = e^{-i k⋅x} H e^{i k⋅x} u_{kn},\]

    which in particular implies that

    \[ H_k u_{kn} = ε_{kn} u_{kn} \quad ⇔ \quad H (e^{i k⋅x} u_{kn}) = ε_{kn} (e^{i k⋅x} u_{kn}).\]

    To seek the eigenpairs of $H$ we may thus equivalently find the eigenpairs of all $H_k$. The point of this is that the eigenfunctions $u_{kn}$ of $H_k$ are periodic (unlike the eigenfunctions $ψ_{kn}$ of $H$). In contrast to $ψ_{kn}$ the functions $u_{kn}$ can thus be fully represented considering the eigenproblem only on the unit cell.

    A detailed mathematical analysis shows that the transformation from $H$ to the set of all $H_k$ for a suitable set of values for $k$ (details below) is actually a unitary transformation, the so-called Bloch transform. This transform brings the Hamiltonian into the symmetry-adapted basis for translational symmetry, which are exactly the Bloch functions. Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries (like the point group symmetry in molecules), the Bloch transform also makes the Hamiltonian $H$ block-diagonal[1]:

    \[ T_B H T_B^{-1} ⟶ \left( \begin{array}{cccc} H_1&&&0 \\ &H_2\\&&H_3\\0&&&\ddots \end{array} \right)\]

    with each block $H_k$ taking care of one value $k$. This block-diagonal structure under the basis of Bloch functions lets us completely describe the spectrum of $H$ by looking only at the spectrum of all $H_k$ blocks.

    The Brillouin zone

    We now consider the parameter $k$ of the Hamiltonian blocks in detail.

    • As discussed $k$ is a real number. It turns out, however, that some of these $k∈\mathbb{R}$ give rise to operators related by unitary transformations (again due to translational symmetry).

    • Since such operators have the same eigenspectrum, only one version needs to be considered.

    • The smallest subset from which $k$ is chosen is the Brillouin zone (BZ).

    • The BZ is the unit cell of the reciprocal lattice, which may be constructed from the real-space lattice by a Fourier transform.

    • In our simple 1D case the reciprocal lattice is just

        ... |--------|--------|--------| ...
      +         2π/a     2π/a     2π/a

      i.e. like the real-space lattice, but just with a different lattice constant $b = 2π / a$.

    • The BZ in our example is thus $B = [-π/a, π/a)$. The members of $B$ are typically called $k$-points.

    Discretization and plane-wave basis sets

    With what we discussed so far the strategy to find all eigenpairs of a periodic Hamiltonian $H$ thus reduces to finding the eigenpairs of all $H_k$ with $k ∈ B$. This requires two discretisations:

    • $B$ is infinite (and not countable). To discretize we first only pick a finite number of $k$-points. Usually this $k$-point sampling is done by picking $k$-points along a regular grid inside the BZ, the $k$-grid.
    • Each $H_k$ is still an infinite-dimensional operator. Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis and diagonalize the resulting matrix.

    For the second step multiple types of bases are used in practice (finite differences, finite elements, Gaussians, ...). In DFTK we currently support only plane-wave discretizations.

    For our 1D example normalized plane waves are defined as the functions

    \[e_{G}(x) = \frac{e^{i G x}}{\sqrt{a}} \qquad G \in b\mathbb{Z}\]

    and typically one forms basis sets from these by specifying a kinetic energy cutoff $E_\text{cut}$:

    \[\left\{ e_{G} \, \big| \, (G + k)^2 \leq 2E_\text{cut} \right\}\]

    Correspondence of theory to DFTK code

    Before solving a few example problems numerically in DFTK, a short overview of the correspondence of the introduced quantities to data structures inside DFTK.

    • $H$ is represented by a Hamiltonian object and variables for hamiltonians are usually called ham.
    • $H_k$ by a HamiltonianBlock and variables are hamk.
    • $ψ_{kn}$ is usually just called ψ. $u_{kn}$ is not stored (in favor of $ψ_{kn}$).
    • $ε_{kn}$ is called eigenvalues.
    • $k$-points are represented by Kpoint and respective variables called kpt.
    • The basis of plane waves is managed by PlaneWaveBasis and variables usually just called basis.

    Solving the free-electron Hamiltonian

    One typical approach to get physical insight into a Hamiltonian $H$ is to plot a so-called band structure, that is the eigenvalues of $H_k$ versus $k$. In DFTK we achieve this using the following steps:

    Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. Therefore quantities related to the problem space are have a fixed dimension 3. The convention is that for 1D / 2D problems the trailing entries are always zero and ignored in the computation. For the lattice we therefore construct a 3x3 matrix with only one entry.

    using DFTK
    +
    +lattice = zeros(3, 3)
    +lattice[1, 1] = 20.;

    Step 2: Select a model. In this case we choose a free-electron model, which is the same as saying that there is only a Kinetic term (and no potential) in the model.

    model = Model(lattice; terms=[Kinetic()])
    Model(custom, 1D):
    +    lattice (in Bohr)    : [20        , 0         , 0         ]
    +                           [0         , 0         , 0         ]
    +                           [0         , 0         , 0         ]
    +    unit cell volume     : 20 Bohr
    +
    +    num. electrons       : 0
    +    spin polarization    : none
    +    temperature          : 0 Ha
    +
    +    terms                : Kinetic()

    Step 3: Define a plane-wave basis using this model and a cutoff $E_\text{cut}$ of 300 Hartree. The $k$-point grid is given as a regular grid in the BZ (a so-called Monkhorst-Pack grid). Here we select only one $k$-point (1x1x1), see the note below for some details on this choice.

    basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))
    PlaneWaveBasis discretization:
    +    architecture         : DFTK.CPU()
    +    num. mpi processes   : 1
    +    num. julia threads   : 1
    +    num. blas  threads   : 2
    +    num. fft   threads   : 1
    +
    +    Ecut                 : 300.0 Ha
    +    fft_size             : (320, 1, 1), 320 total points
    +    kgrid                : MonkhorstPack([1, 1, 1])
    +    num.   red. kpoints  : 1
    +    num. irred. kpoints  : 1
    +
    +    Discretized Model(custom, 1D):
    +        lattice (in Bohr)    : [20        , 0         , 0         ]
    +                               [0         , 0         , 0         ]
    +                               [0         , 0         , 0         ]
    +        unit cell volume     : 20 Bohr
    +    
    +        num. electrons       : 0
    +        spin polarization    : none
    +        temperature          : 0 Ha
    +    
    +        terms                : Kinetic()

    Step 4: Plot the bands! Select a density of $k$-points for the $k$-grid to use for the bandstructure calculation, discretize the problem and diagonalize it. Afterwards plot the bands.

    using Unitful
    +using UnitfulAtomic
    +using Plots
    +
    +plot_bandstructure(basis; n_bands=6, kline_density=100)
    Example block output
    Selection of k-point grids in `PlaneWaveBasis` construction

    You might wonder why we only selected a single $k$-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different $k$-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.

    Adding potentials

    So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.

    • The modified problem we will look at consists of diagonalizing

      \[H_k = \frac12 (-i \nabla + k)^2 + V\]

      for all $k \in B$ with a periodic potential $V$ interacting with the electrons.

    • A number of "standard" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct

    We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.

    A single potential looks like:

    using Plots
    +using LinearAlgebra
    +nucleus = ElementGaussian(0.3, 10.0)
    +plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))
    Example block output

    With this element at hand we can easily construct a setting where two potentials of this form are located at positions $20$ and $80$ inside the lattice $[0, 100]$:

    using LinearAlgebra
    +
    +# Define the 1D lattice [0, 100]
    +lattice = diagm([100., 0, 0])
    +
    +# Place them at 20 and 80 in *fractional coordinates*,
    +# that is 0.2 and 0.8, since the lattice is 100 wide.
    +nucleus   = ElementGaussian(0.3, 10.0)
    +atoms     = [nucleus, nucleus]
    +positions = [[0.2, 0, 0], [0.8, 0, 0]]
    +
    +# Assemble the model, discretize and build the Hamiltonian
    +model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])
    +basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));
    +ham   = Hamiltonian(basis)
    +
    +# Extract the total potential term of the Hamiltonian and plot it
    +potential = DFTK.total_local_potential(ham)[:, 1, 1]
    +rvecs = collect(r_vectors_cart(basis))[:, 1, 1]  # slice along the x axis
    +x = [r[1] for r in rvecs]                        # only keep the x coordinate
    +plot(x, potential, label="", xlabel="x", ylabel="V(x)")
    Example block output

    This potential is the sum of two "atomic" potentials (the two "Gaussian" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.

    With this setup, let's look at the bands:

    using Unitful
    +using UnitfulAtomic
    +
    +plot_bandstructure(basis; n_bands=6, kline_density=500)
    Example block output

    The bands are noticeably different.

    • The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous but has gaps.

    • The two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.

    • The higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense "free electrons" correspond to perfect delocalization.

    • 1Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.
    diff --git a/v0.6.16/guide/tutorial.ipynb b/v0.6.16/guide/tutorial.ipynb new file mode 100644 index 0000000000..7fe7222567 --- /dev/null +++ b/v0.6.16/guide/tutorial.ipynb @@ -0,0 +1,1162 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Tutorial" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "DFTK is a Julia package for playing with plane-wave\n", + "density-functional theory algorithms. In its basic formulation it\n", + "solves periodic Kohn-Sham equations.\n", + "\n", + "This document provides an overview of the structure of the code\n", + "and how to access basic information about calculations.\n", + "Basic familiarity with the concepts of plane-wave density functional theory\n", + "is assumed throughout. Feel free to take a look at the\n", + "[Periodic problems](https://docs.dftk.org/stable/guide/periodic_problems/)\n", + "or the\n", + "[Introductory resources](https://docs.dftk.org/stable/guide/introductory_resources/)\n", + "chapters for some introductory material on the topic.\n", + "\n", + "!!! note \"Convergence parameters in the documentation\"\n", + " We use rough parameters in order to be able\n", + " to automatically generate this documentation very quickly.\n", + " Therefore results are far from converged.\n", + " Tighter thresholds and larger grids should be used for more realistic results.\n", + "\n", + "For our discussion we will use the classic example of\n", + "computing the LDA ground state of the\n", + "[silicon crystal](https://www.materialsproject.org/materials/mp-149).\n", + "Performing such a calculation roughly proceeds in three steps." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "# 1. Define lattice and atomic positions\n", + "a = 5.431u\"angstrom\" # Silicon lattice constant\n", + "lattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors\n", + " [1 0 1.]; # specified column by column\n", + " [1 1 0.]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "By default, all numbers passed as arguments are assumed to be in atomic\n", + "units. Quantities such as temperature, energy cutoffs, lattice vectors, and\n", + "the k-point grid spacing can optionally be annotated with Unitful units,\n", + "which are automatically converted to the atomic units used internally. For\n", + "more details, see the [Unitful package\n", + "documentation](https://painterqubits.github.io/Unitful.jl/stable/) and the\n", + "[UnitfulAtomic.jl package](https://github.com/sostock/UnitfulAtomic.jl)." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.900543746859 -0.70 4.6 2.58s\n", + " 2 -7.905012075650 -2.35 -1.52 1.0 1.20s\n", + " 3 -7.905178004324 -3.78 -2.52 1.0 67.0ms\n", + " 4 -7.905210490743 -4.49 -2.83 2.6 61.5ms\n", + " 5 -7.905211090428 -6.22 -2.97 1.1 75.1ms\n", + " 6 -7.905211518183 -6.37 -4.45 1.0 32.5ms\n", + " 7 -7.905211531049 -7.89 -4.57 2.4 77.6ms\n", + " 8 -7.905211531380 -9.48 -5.14 1.0 54.0ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "# Load HGH pseudopotential for Silicon\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "\n", + "# Specify type and positions of atoms\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# 2. Select model and basis\n", + "model = model_LDA(lattice, atoms, positions)\n", + "kgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid)\n", + "Ecut = 7 # kinetic energy cutoff\n", + "# Ecut = 190.5u\"eV\" # Could also use eV or other energy-compatible units\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "# Note the implicit passing of keyword arguments here:\n", + "# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)\n", + "\n", + "# 3. Run the SCF procedure to obtain the ground state\n", + "scfres = self_consistent_field(basis, tol=1e-5);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "That's it! Now you can get various quantities from the result of the SCF.\n", + "For instance, the different components of the energy:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1020957 \n AtomicLocal -2.1987835\n AtomicNonlocal 1.7296093 \n Ewald -8.3979253\n PspCorrection -0.2946254\n Hartree 0.5530387 \n Xc -2.3986211\n\n total -7.905211531380" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Eigenvalues:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7×8 Matrix{Float64}:\n -0.176942 -0.14744 -0.0911691 … -0.101219 -0.0239769 -0.0184078\n 0.261073 0.116915 0.00482518 0.0611645 -0.0239769 -0.0184078\n 0.261073 0.23299 0.216734 0.121636 0.155532 0.117747\n 0.261073 0.23299 0.216734 0.212134 0.155532 0.117747\n 0.354532 0.335109 0.317102 0.350436 0.285692 0.417258\n 0.354532 0.389829 0.384601 … 0.436926 0.285692 0.417411\n 0.354533 0.389829 0.384601 0.449271 0.627707 0.443806" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "hcat(scfres.eigenvalues...)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "`eigenvalues` is an array (indexed by k-points) of arrays (indexed by\n", + "eigenvalue number). The \"splatting\" operation `...` calls `hcat`\n", + "with all the inner arrays as arguments, which collects them into a\n", + "matrix.\n", + "\n", + "The resulting matrix is 7 (number of computed eigenvalues) by 8\n", + "(number of irreducible k-points). There are 7 eigenvalues per\n", + "k-point because there are 4 occupied states in the system (4 valence\n", + "electrons per silicon atom, two atoms per unit cell, and paired\n", + "spins), and the eigensolver gives itself some breathing room by\n", + "computing some extra states (see the `bands` argument to\n", + "`self_consistent_field` as well as the `AdaptiveBands` documentation).\n", + "There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the\n", + "amount of computations to just the irreducible k-points (see\n", + "[Crystal symmetries](https://docs.dftk.org/stable/developer/symmetries/)\n", + "for details).\n", + "\n", + "We can check the occupations ..." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7×8 Matrix{Float64}:\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "hcat(scfres.occupation...)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "... and density, where we use that the density objects in DFTK are\n", + "indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then\n", + "in the 3-dimensional real-space grid." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\n", + "x = [r[1] for r in rvecs] # only keep the x coordinate\n", + "plot(x, scfres.ρ[1, :, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We can also perform various postprocessing steps:\n", + "We can get the Cartesian forces (in Hartree / Bohr):" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-6.232493937395394e-16, -1.251086115139332e-16, -2.144464681614559e-16]\n [-1.2827351529643588e-16, -5.077318508655806e-16, 1.7873970603572334e-16]" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "compute_forces_cart(scfres)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "As expected, they are numerically zero in this highly symmetric configuration.\n", + "We could also compute a band structure," + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:26\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=44}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "plot_bandstructure(scfres; kline_density=10)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "or plot a density of states, for which we increase the kgrid a bit\n", + "to get smoother plots:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOydd5gc1ZX23w7T05Nz0CjMKIASCAlEEJiMsLCNsXYfA15s4wAW366fD5vdxWtsbOxdr20WY/PZaxvM8gD2Ggx4WXJwJIogAUoglMNogiZPT0/PTKfvj2pqaqpuVd3KVa3z+0vq6XCnp+q+9z3n3HND+XweBEEQBHGsEvZ6AARBEAThJSSEBEEQxDENCSFBEARxTENCSBAEQRzTkBASBEEQxzQkhARBEMQxDQkhQRAEcUxDQkgQBEEc05AQEgRBEMc0JIQEQRDEMY2XQtjd3f0f//EfGk/IZrOuDca35PP5XC7n9Si8hy4GAF2Jrk1HNnk9Cu+hO0KAbgoA+XzeeqNQL4Xw4MGD//M//6PxhPHxcdcG41symczU1JTXo/AeuhgA/GLTL9bcs8brUXhPKpUiLQTdFACAdDqdTqctvgmFRgmCIIhjGhJCgiAI4pgmyv/UTCaTSCTq6urER8bGxkRPGg6Ha2pqxB/19/f39PQsXry4pKTErrESBEEQhO1wOcIdO3asWbOmurq6ublZ+vj69evnzp27cOHChQsXXnjhheLj3/nOdxYvXvzZz3520aJFW7dutXnIBEEQBGEfXEJYV1f3rW9968knn1T+6J577hkcHBwcHNy0qVDMtnPnzttvv/2tt9566623rr322htuuMHO8RIEQRCErXAJYVtb2yWXXNLU1KT8UTqd7uvrkz7yu9/97uKLL25vbwfwpS996S9/+cvRo0dtGStBEARB2I6BHCGTL3/5y0IW8LbbbvvsZz8L4ODBgwsXLhR+2tzcXFlZeejQIVlMVSCXyyWTyc2bN4uPLFq0SJpoJAiCIAinsSSEv/rVr9rb20Oh0DPPPPM3f/M3K1euXLFiRTKZLC0tFZ9TVlY2NjbGfPnAwMC+ffuuueYa4b+hUOjGG2/86Ec/Kj5B7YXHFOl0OpvNWt8oE3ToYgAg7ChNJBJeD8RjxsfHM5lMOHysF73TTYEPbopYLKb2hHg8rluzaUkIOzo6hH9ccskla9aseeGFF1asWNHS0jI0NCQ8ns/nh4aGWltbmS9vamo68cQTN27cqPERVVVV4r8/9Sl885tYvtzKkIOHIITxeNzrgXiP9GI4NhHudvoewuFwWVkZCSHoYuAQQh6shkYF8vn80aNHq6urAZx88sn/+Z//KTy+adOmioqK+fPn2/Ip/f3o6sLy5Xj33XdTqZQt7+l/mpqamIFlgiAIwha4hDCVSv36178+cuRILpe76667KioqrrrqqoGBgR/84AfnnntuLBb7zW9+Mzw8fOmllwK4/PLLv/71r3/nO98577zzvva1r1133XXSSKkVKiowPo50Or1ixYqVK1fa8p4+Z3R0dNGiRdqN6AiCIAgrcAlhJpMRSlquueaazZs319bWXnXVVUJo4pe//CWAZcuWvfHGG/X19QDKy8v/+te/fv/739+4ceP69ev/8R//0a6xlpcjmUQ+n49EIuJujeLmueeeu/32270eBUEQRDHDJYRVVVV33nmn7MHy8vIf/vCHzOcvXrz43nvvtTgyJYIjJAiCIAgbCVK2uaICyaTXgyAIgiCKiyAJoRAaJQiCIAgbCZgQUmiUIAiCsJcgCSHlCAmCIAjbCZgQUmiUIAiCsBd7NtS7g59zhEIznUgkInQVUNLb23vo0KG6urpFixZJH89kMrt37x4fH29vb29sbHRjrARBEISEIAmhn0OjDQ0Ns2fPDofDo6Oj8+fPv+aaa6677jqhBVQymfzSl7709NNPn3DCCfv37581a9YDDzwgyOGmTZs++clP1tTU1NTUvPfee1ddddWPf/xjr38VgiCIY4uACaFvHSGAZ5555oQTTshkMs8///yGDRu6u7v/9V//FcCGDRv279+/d+/e+vr6bDZ7/fXXr1u3btu2bWVlZddff/0111zzjW98A0A2m92/f7/XvwRBEMQxR5ByhGVl/nWEItFo9CMf+cgvf/nLH/3oR+Pj4z09PQ888MDPfvYzoe1OJBK57bbbksmk0DWtu7t7wYIFwgsjkYgsakoQBFH0fPSjeOEFj8cQJEdYWorJSfaPNm/GBydeuMHq1ait1XrCmjVrUqnUjh07EolEWVnZySefLP4oHo+vXr36jTfeuOqqqz73uc9de+21zzzzzIc+9KF169bNmzfP8aETBEH4ib178corOPdcL8cQJCEsK8PEBPtH/+//oavLvZF84xs47zytJ1RVVYXD4VQqNTw8rCyfqa6uHh8fB/Ctb33rvPPOe/TRR++6665/+Id/uPXWW7/61a86NmqCIAjf0dsLz1tHB0kIS0tVhfC++9wd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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))\n", + "plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Note that directly employing the `scfres` also works, but the results\n", + "are much cruder:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOydeZwU5Z3/P33MTE/PfQ9zMDMw3IeicqhRBCWi4h0NajySuJq46+5KEs0vMUajy7roarIbN1lXTZREY0yIRlFQRBAR8UBBjpH7GgbmPvq+6vdHDT1Nd1V1VXWdXd/3H7yG6uqqp6ue5/k83+N5HhvDMCAIgiAIq2LXuwAEQRAEoSckhARBEISlISEkCIIgLA0JIUEQBGFpSAgJgiAIS0NCSBAEQVgaEkKCIAjC0pAQEgRBEJaGhJAgCIKwNCSEBEEQhKXRWQiXLVt2/Phxvk9jsRitAAcgGo3qXQT9ocoAYCA48En7J76wT++C6AzDMFQZQD0DAIUqg85CuGLFikOHDvF9GgwG6U0D8Pms3vEBCIVCkUhE71LozIZDG2Y9M2tn1069C6IzVBlYqGcAEA6Hw+Fwhhch1yhBEARhaUgICYIgCEtDQkgQBEFYGhJCgiAIwtKQEBIEQRCWhoSQIAiCsDQkhARBEISlISEkCIIgLA0JIUEQRuGmm/Dqq3oXgrAeTr0LQBAEAQAHD+LFFzF7tt7lMA8Mw3z++eexWEzvgmhEa2trSUmJGlcmISQIwhAMDgKAx6N3OczD9u3bFyxYMGnSJL0LogUdHR133nnnAw88oMbFSQgJgjAE7MKZXq/e5TAPsVhs4sSJn376qd4F0YJf/OIX6i09TTFCgiAMAQkhoRckhARBGAJWCMk1SmiPWNdod3f3xo0b+/v7Z8yYMX369PjxUCj01ltv9ff3X3TRRfX19fHj+/bte//990eNGrVgwQKHw6FwqQmCyDr8ftjtGBrSuxyE9RBlEe7YsWPMmDHPPPPMunXrLrzwwvvuu489HgqF5s6d+/jjj2/YsGHatGmbN29mj7/11luzZs366KOPfvazn1155ZW0hSZBEGnxelFeTq5RQgdEWYQNDQ0HDhyoqKgAsG3bttNOO+1HP/pRZWXlihUrPB7P559/7nQ6W1tbH3rooTfffBPA/fff/9hjj33nO9/x+XwTJkxYt27dvHnz1P0dBEGYHJ8P1dXkGiV0QJRFWFJSwqoggJqaGgDsjsArV6688sornU4ngGuvvXb16tWhUOjYsWNbtmy59tprAbjd7ksuueSNN95Qq/gEQWQLrBCSRUhoj+TpE7/4xS8uu+yyUaNGAWhvbz/nnHPY4w0NDbFY7Pjx452dnYWFhfFpj/X19W1tbXxX6+/vf/7559999132v42NjYsXL45/ysoteVbD4TD7KKxMOBy2zsRhPiKRCPtvVtaHoSF7RYWto8MWDkeEzwyHw3Y7JfoN1wdDEYlEhoaGAOTl5bndbs5zDhw40N3d3dDQwOpIHK/Xu3fvXpvN1tLSUlRUlPrFWCyWWvPZIzabja9IDocjbW2RJoS//vWvV69evWHDhnix4jdg/4hEItFoNLFMDodD4G2Fw+HBwcHe3t7h0jidiTNFotGo3W4X+IUWIRqNqjeBxiywT8Di3R87FIjFYllZH3w+W1UVPB5b2l8XjUYZhrF4ZcDJRmEotmzZMmfOnJaWlkAgEAqFJk+efN9991166aXsp4cOHbrxxhv379/f2tq6Y8eOCy+88Nlnny0uLgbw0ksv3X333RMmTGAYZteuXf/1X/918803J12cs+azRwQehZh6IkEIn3nmmccff/y9996Ly3htbW1nZyf794kTJwDU1dU5nU6Px+P3+/Pz89njdXV1fNesqqq6++67Z/OsqsQwTE5ODut6tTLhcNjlculdCv1xOBw5OTl6l0JPcnNz2X+zsj4Eg6iqQiiEtL/OZrPZ7XaLVwYAeXl5eheBg/z8/H379gEIBAK///3vr7vuupdeeumKK64Ih8OXXnrp7Nmz169f73Q6BwcHr7rqqttuu23FihWhUOj2229/9dVXFyxYAMDr9fb19aVe2el0ptYNVufYpiEbsUOq559//oEHHli1alVLS0v84Lx581avXs3+vXr16nPOOcflcjU2No4dO/btt98GEI1G16xZQ5kyBEGkxedDSQlCIb3LQSiEy+X63ve+98Mf/vDhhx8GsGrVqo6Ojl/96lesbVNcXPyb3/zm1Vdf3b1798DAgM/nGzNmDPvFgoKChoYGLYsqytjaunXrd7/73blz5z755JPskR/96Eetra033XTTsmXLbr311kmTJj322GMvvPACAJvN9tOf/vT73//+nj17PvzwQ5fLtWjRIhV/AUEQWYHfj9JSBIN6l8PMMAw2bNBuMGG34/zzIeyzO/vss//t3/4tFott37799NNPTwz+TZgwobq6+pNPPrnpppsWLVp03nnnXXPNNeeee+7ChQvLyspU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fvjh6NGj582bx77cJPr7+1etWuVwOBYuXBjPJV67dm0sNrxvbV1d3eTJk7UrsQp4vd5Vq1aFQqGLL764vLw89QSGYfbs2XP48OFzzjmH3faOpbu7++2333a5XAsXLkw8blL27du3YcMG4S5x27Ztdrt95syZ8YPr168Ph8Ps3zU1NdOmTRO6R4Y73CvI4sWLp02bdscdd1RWVq5YsSL1hPPOO6+goCA/P/+3v/1t/OCKFSvKysouOsmnn36qYZGVZ+XKleXl5bfffvuMGTOuvPLK1BOeffbZ3NzcioqKs846K/H4r3/961GjRt15551jx4790Y9+pFV51eLb3/725MmT77zzzqqqqhdffDH1hFdeeaWysvKOO+6YOnXqTTfdxB5ctWpVcXFxvDJs3LhR21JnyokTJ1paWi6//PJvfOMbDQ0NR44cST3nxhtvnDp1KttM/vKXv7AHv/zyy4qKiptvvnn+/PkzZszweDzaFlxh4i932rRp8ZebyJEjR+rr66+99torrrhizJgxJ06cYI+7XK7zzjuPffuPPfaYtqVWmN7e3vHjx19yySWLFy+ura1lZ8sl0tXVVVxcXFlZCWDPnj3x47t3766qqrrxxhsvvvjiKVOmDAwMaFtwhXn99dcrKipuv/32008//Zprrkk94f/+7//YLnH27NmJx8vKys4991y2MjzyyCPCdzGKEH7yyScVFRXsjJCXX355woQJsVgs6ZwDBw5EIpG5c+cmCeHcuXO1LKqqzJgx47nnnmMYxuPx1NXVvf/++0kndHZ2DgwMLF++PFEIfT5feXk52+8fPnzY5XIdPXpUy2Iry/bt24uLi7u7uxmGef3115ubm6PRaOIJsVhs3Lhxr7zyCsMwfX195eXlW7ZsYRhm1apVM2fO1KXMivDzn//8qquuYv+++eabf/CDHySdsGXLlrKysr6+PoZh/vKXv4wfP55tJosXL7733nsZholGo2efffb//u//altwJUl8uf39/fGXm8gPfvCDm2++mf376quv/vnPf87+7XK52tvbNSysijz66KMXX3wx+/edd975/9s786imji6ATyAYNiEkkA0wgChaFaUcEVEssYKgkIKi0CggojlHtFil1lbjqbWitiriwnGrglYRCrUiIIKyVarFCghFZRNECiSgUhAkAsn7/pjzvfNOEjAqi+j8/po37868O0vezSxv7po1axQEuru76+rq4KCHaAhXrlz5xRdfYBgml8t5PF5UVNSQ6TwY2NranjlzBsOw58+fs1gs5X+3Eomkra0tNjZW2RBWV1er+ZR3ZY0wNTXV1dUVfiHL5/NramqqqqoUZCwsLFR+et/Z2ZmRkfH333/jA+ERyr///nv37l1fX18AAJzjSk1NVZAxMTFRPojn1q1b2tracEbU3Nzc3t4+PT19aHQeDFJTU11cXOAUt7u7e0tLC5wKxikvL6+rq/Py8gIAUKnUefPm4RXV1dWVmZl5+/btly9fDr3mb0lqaipsfQCAr6+vcuunpqbOmzcPTpl6enrW1dVVVFQQE2poaPj4+CgnHEEQG9fQ0JDYuDgpKSmLFy+GYYWKun37dnZ29tOnT4dM4UEiNTW1rzJCtLS0VB60lJKSAjsDiURavHjxiO4MdXV1ZWVlsB709fXnz5+vXBwGg9HX2WSFhYXXr19iC3A6AAASqUlEQVRvaWl55YPeFUPY0NBgZmYGw9ra2nQ6XX1PhFKpNDo6etmyZba2trW1tYOm46DT2NhoYGCAL3iYmpqqWQnE2nuthO8mxOKQyWQmk6lQnMbGRhMTEwqFAi+J5ZXJZEeOHAkKCpoyZcrbeykbYhoaGvDFb5WNSKwZCoVibGzc0NDQ3t7e0dHRf8IRRD+NS5RRWV5jY+OTJ09u377d0tLy/PnzQ6bzYKDQGZqammQy2StTdXd3P3ny5H3qDFQqFT9c7LWKQ6fTY2Njd+7caWVlderUqf6Fh26zjFgsdnd3V44/dOjQnDlzZDIZcUmcTCb39vaqky2fz/fx8QEAyOXygICATZs2JSUlDZTOg0FoaOjNmzcVIl1cXKKiohQqQVNTU81KUK49dX4zw0hrayuPx1OO/+mnn9zc3F7ZGfqqqHnz5t2/fx8AgGHY6tWrN2zYkJaWNlhlGARkMhm+F0Bl6/f29irXDGxrPF79bvNuos6vgChDFHj06BGcNEpOThYIBJ6eniP3GDaFzgDnwNVJhWHYB9UZ+qK8vBx2hszMTD6f7+XlxWAw+hIeOkNIp9PPnTunHM/lcgEAbDab+Kf+yZMnHA5HnWzxyVINDQ0/P7+NGzcOkL6DxebNm58/f64QCYf2LBarvb395cuX8O+wRCJhs9nq5Mlms5ubm/FLsVg8e/bsgVN54DEwMFDZGeBUD5vNxncCYxjW3Nys0BnYbPbTp09lMhlsfYlEAnsR3hlIJJKfn9+KFSsGsxADD7EdJRKJ8k+Aw+Hgcx5yubylpYXD4VCpVG1t7ZaWFthbVCYcQfTVuERYLBY+30UsL94B+Hw+AKCiokJhZ/UIQqEzMBgMMvnVr2sdHR0qldrS0mJlZQVGfmdgsVj//fdfd3f3qFGjwOu8EgGhM7i5uenr6z948KAfQzh0U6NaWlqTVQFnAl1cXLKzs+EiX15eHo1Gs7GxAQB0dHR0dnaq+YjCwkJzc/PBK8KAwOVylSsBGgAul8vlcq9duwYAkMlkWVlZcNjU29v77NmzfvJ0cHCQSCRwJrC9vb2goMDFxWUoCvOmaGpqquwM8A+Bi4tLXl4eXOQrKCggk8lw63NnZyfsDBMmTDA0NLxx4wYAoKenJzs7W3l8WVRU9O53BgVcXFwyMjJgODMzE2/E1tZW+NNwcXHJycmB4Rs3bhgaGk6YMIFEIn3yySeZmZnKCUciCo2bk5MDG7enp6e1tRXK8Hi8/stbXl7e1dU14joAkb7KCA3DGyQciVhaWpqZmWVlZYHXfCUSqa2tbW1tfUVneOtNPQODXC53dHT09PSMjIzkcrmHDh2C8cuXL8e3Sx0/flwoFLLZbGdnZ6FQWFxcjGHYunXrwsLC9u7du2LFCn19/ZycnOEqwoBw8uRJDoezf//+RYsW2dnZ9fb2YhiWl5dHJpOhwP3794VCIY/HMzExEQqFhw8fhvFfffXV5MmTo6KinJ2dfX19h60AAwSPx5s/f35kZKS1tfWePXtgpFAoDAoKguHIyEgLC4vIyMiFCxfOmjULThyFh4evW7du7969q1at0tPTS09PHy7934zq6mojI6Ovv/5aJBIZGhqWlZXBeCqVmpaWhmGYXC6fNWvWggULIiMjLS0tDxw4AAVycnIMDQ0jIiLWrFnD4XBaWlqGrQwDwYEDB5QbNy0tjUqlQoGysjJDQ0ORSLR582Z8c2BycrKfn9/u3bu3bNnCZrPXr18/nGV4ax4/fkyn0zdu3Lh9+3YDAwP8wzAOh4N/NrNhw4ZVq1YBAPz9/YVCYVdXF4Zht27dMjAw2LFjx/r16xkMRmNj47CVYSA4duyYmZnZ/v37vb297e3t4SsxOzubQqFAgbKyMqFQ6OLiwmAwhEJhdHQ0hmEZGRm+vr67du3atm2bmZnZ6tWr+3/KO+R9orOzMzY2tqGhYc6cOfhqYm5urpaW1qxZswAA169fr6mpweXd3NwsLCxKSkrgviA2m+3j4/Me+KvLysrKzs5mMpnBwcFwuCwWi9PS0kJCQgAADQ0NxHWvMWPGwLrCMCwpKamwsHD8+PEBAQFaWlrDpf+A0NXVdebMGfilsKenJ4zMz8+XyWSffPIJvExPT79x44aZmdmKFSvgV8NlZWXXrl2TSCRMJvOzzz6Ds0Mji5qamri4OLlc7ufnBydFAABnz57l8XjwL+2LFy9iYmIaGhqcnZ09PDzwhEVFRZcuXdLT0wsMDFR/+uidBTauqalpcHAwbNz6+vqcnJzAwEAoUFFRkZCQoKGhIRAIYEM/efIkOTm5pqZGV1fXyclJ5SL0yKKuru7cuXO9vb2+vr6TJk2CkXFxcU5OTtAX49mzZ6VSKS4fHBwMf/ilpaUXL16kUCgBAQHEbXQjlGvXruXm5rJYrODgYH19fQBAU1PT1atXg4ODAQD19fXETfJcLnf+/Pmtra2XLl16+PAhhUJxdHR0dXXt/xHvkCFEIBAIBGLoeVc+n0AgEAgEYlhAhhCBQCAQHzTIECIQCATigwYZQgQCgUB80CBDiEAgEIgPGmQIEQgEAvFBgwwh4v2hsLAwISFhuLV4Bbm5uVeuXBluLYaB6urqt3GKUllZiR+7g0AMLMgQIt4fEhISQkNDh1uLV3Dw4MEdO3YMtxavTWFhoZUSIpFIzeRyuVwgEODHzT9+/Fg5Nysrq99++62vHEaNGsXn85UPrEcg3p6hO3QbgRhs3N3dWSzWcGvxfiKVSmtra318fD7++GM8khjun4SEhHv37uFDup6entraWjc3N2dnZ6LYuHHj+srBwsLC399fJBJlZ2e/vvoIRH8gQ4gYkbS1tUmlUgaDQfTSMnfu3Llz5ypItra2kkgk6MxWJc+ePZPJZCYmJirvyuXyp0+f0ul03CeOmsBDovs58F59MAxraWmhUCgqnQpBjyVvoCEAoLm5mUQiGRsbE6uxH7y8vOC5Vq/LkSNHvL29jYyMiJE8Hu+bb75RP5Pg4GAej/fPP//AQ9gRiIECTY0iRhhXr16dOnUqlUplsVhmZmaxsbH4rZ07d+JHMgIAampqnJ2daTSakZHRzJkzr169SqPRiCe1xsfHjxs3jk6nMxiMsWPHXr58Gb+1bNkyd3f3pKQkc3NzBoMxevToDRs2wPMI7969S6PRFCbxYmNjaTTaw4cPAQCJiYl2dnYUCoXJZOrp6fn4+IjFYpVlSU9Pp9FoVVVVfcVgGLZ//34Oh8NkMqlUqr29/e3bt3HhCxcuWFhYGBoaMhgMXV3dJUuWqF+NERERRkZGTCYTOvge1Nna6urqmzdvQr+hb8OcOXOMjY3Pnj07IFohEDjIECJGEpmZmZ6enhMnTszPzy8uLvb39w8ODr548SK8297ejpscqVS6YMGC2tra33///d69e4sWLQoODm5tbcVd2Pzyyy8CgcDV1bWgoODOnTvOzs6LFi36888/4d2Ojo7CwsLt27cfPnz49u3bK1eujIqKgpZy2rRppqamp0+fJir2888/29jYjB07FgDQ1NQUFBSUn5//4MGDEydOFBQU+Pv7qywOHDUSvSgrxIhEom+//TY0NLSoqCg/P59Go7m5uT1+/BgAUF5eHhgY6OnpWVpaWl5enpycPGHCBDWrMSUlRSQSCQSCO3fuFBcXx8TEqDnGksvlvQTUfBx0ozNz5kw15ftCQ0NjxowZOTk5b5kPAqHI4LnPQCAGHFtb29mzZ0M33BAPDw9HR0cY3rRpE41Gg+H4+HgAQEZGBi65fv16AMDFixcxDOvp6WGxWER/VTKZzM7OzsfHB17y+XwymVxZWYnf5XK5uBOoPXv2kMlk3MFNVVUViUQ6evSoSp3hRtaGhgZ46e3tPWPGDBhOTk4GADx48AAXJsY0NDRoaWlt27YNv9ve3m5sbLxlyxYMwy5cuAAAkEgk6tYdgYMHD2pqakKvPWqSn5+v/PYQi8XqpF27dq2+vj4xprq6WuXrqLa2FsOwiIiIkydPqswqPDxcS0sLOmZCIAYKtEaIGDGIxeLS0tKQkBDidgkOh3Pjxg0MwxRWuUpLS7W1tYnuV7y8vA4ePIjfFYvFVlZW169fxwW4XG5ZWRl+aW1tje/d0NDQmDBhQn19PbwMCgoSiURxcXHh4eEAgLNnz1IoFD8/PzxtSUlJWlpaU1NTd3c39CBaXV39ur7CoQ9eJpNJVHLMmDFQSVtbW01NzUWLFgmFQg8Pj77WOAEAEokEH71RqVQ9Pb3PP//8+PHjCxcuFAgEBgYGbm5uKlcflVmzZg3R0Ws/K69EWlpaaDSacry/v7+XlxcxBpZCKpVKpVIMw168eKGnp0cUoNPpcNCsMkME4s1AhhAxYpBIJACA+Ph4fC4UoqWl1dHRAX034ojFYoU9IERTAbM6evToyZMniamIr12FVy2FQuns7IRhFovl6uoaExMTHh6OYdj58+eJO0E2b968b9++OXPmTJw40cjICM5ztrW1vVl5RSKRgo2H5uejjz5KSkr64YcfgoKCNDQ0HBwcIiIilPcKAQAcHR0fPXoEw0eOHFm7dq2RkdGyZct27dpVVlamr69va2urpiGcPn360qVLX7cgZDJZ5Tzq1KlTBQKByiTZ2dm3bt1qbm5ms9nERcGenh4AwEh3t4l410CGEDFiMDAwAADs2LFj48aNrxQ2MzNrbm6WyWSampowpqmpCb8L3/snTpzoa/XulQQFBfn7+xcVFbW1tdXU1ERHR8P4tra2ffv2bd++fdu2bTAmOzv71KlTKjMhk8kAAKKRaG9vV1AyJydn2rRpKpN7e3t7e3uLxeKsrKx9+/YtXLiwvLycy+UqiKWkpLx8+RKGoefqH3/8cffu3RkZGdDl9WDDZDKfPXumPGrvB2Nj4xMnTgAApkyZUldXhxfq6dOnurq6Cn96EIi3BG2WQYwYLCwsuFxuUlKSXC5/pbC9vX13d/elS5fwGOKhM3Z2dgYGBr/++usbK+Pj40On08+cOXPmzBkOh4PPwdbV1cnlcnt7e1yyn3NkTE1NAQBwrykkLy8PDzs7O5NIpMTExP41YbFYy5YtO3HihFQqvXv3rrLA5MmT7f8PHBYXFRXZ2toOjRUEAEyfPl0qlRI3x74SW1tbGGCz2XBuGVJSUuLg4DDA+iE+eNCIEDFiIJFIu3fvFggEAQEBW7dutbS0lEgkN2/efPjwIT78wlmwYMH06dNDQkKamppsbGxSU1OJK4s6OjrfffddeHh4WFhYWFiYqalpY2Njbm5uZ2dnWFiYOsqMGjVq6dKlcXFxUql07dq1+Lhz7Nixo0ePPnjw4LRp0/T09OLi4mJiYvrKZOLEiWPGjPn++++tra2pVGp8fDzxq4zx48eHhITs3bt39OjRAoHAxMSktrY2PT19zJgxS5YsSUxMrK+v9/T0tLCwaGtri4mJ0dLSwu1H/zg4OIhEoujo6OXLl+vr6zc2Nubk5AQGBqqT9g3g8Xiampr5+fnjx48nxpeWliociTdp0qTJkyf3lc/Lly8LCwtf69NDBEIthnevDgLxupw7dw4OpCB0Oj0iIgLeIu4axTCsubnZ399fX19fT09v8eLFcGT2xx9/4AKHDh0yNjbGs2Kz2ceOHYO3+Hy+k5MT8bl8Pn/27NnEmL/++gsmvH//PjE+MTERX3IbP3483L96+fJleJe4axTDsOvXr+M6zJw58/jx44Cwj7S7u3vz5s26urq4ktbW1leuXMEwLCEhgag8h8OJj49Xsw67urpCQ0N1dHTw5JMmTeo/Cdw1evr0aTUfoQCfz3dzc8Mv+9o1unXrVgzDtm3bdvjwYSjp6upaVFQEw0lJSWQyub6+/s10QCD6goRh2NvYUQRi6JHL5ZWVle3t7SYmJubm5nClDfz/X11fB6ycOnVq1apV9fX1ZmZmeKRMJisvL+/s7GSz2aampm9wOItKOjs7KysrdXR0bGxsFBbG4Lwu8UHd3d3l5eXa2toKAyYcqVRaUVHR09NjamrKZrPxeAzD6urqmpubjYyMLC0t8XpQkxcvXjx69Kijo4PD4RDrpC9kMpmGhob663xE8vLyPv3008rKSisrKzw3ZbH+8/fw8KDRaOfPn38DBRCIfkCGEPHeUlBQYGVlBVfFSkpK+Hw+k8kknsyCGEq8vb1pNJrCQQTqc+fOndmzZ9+7dw+eWoBADCDIECLeW7788svo6Ghzc/Pe3t76+vpx48alpKTY2NgMt17vKF1dXbm5uSpv2dnZvf1p5s+fP3/27JnyplY1aW1t7erqet1vMREIdUCGEPHeIpPJiouLq6qqpFKplZWVk5MT+v6sH+rr61V+hggAOHz4sLu7+xDrg0AMGcgQIhAIBOKDBn1HiEAgEIgPGmQIEQgEAvFBgwwhAoFAID5o/gdY1F4bDJ6QmwAAAABJRU5ErkJggg==", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())" + ], + "metadata": {}, + "execution_count": 10 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.9.4" + }, + "kernelspec": { + "name": "julia-1.9", + "display_name": "Julia 1.9.4", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.16/guide/tutorial.jl b/v0.6.16/guide/tutorial.jl new file mode 100644 index 0000000000..0ce10ec04e --- /dev/null +++ b/v0.6.16/guide/tutorial.jl @@ -0,0 +1,114 @@ +# # Tutorial +#md # [![](https://mybinder.org/badge_logo.svg)](@__BINDER_ROOT_URL__/guide/@__NAME__.ipynb) +#md # [![](https://img.shields.io/badge/show-nbviewer-579ACA.svg)](@__NBVIEWER_ROOT_URL__/guide/@__NAME__.ipynb) + +#nb # DFTK is a Julia package for playing with plane-wave +#nb # density-functional theory algorithms. In its basic formulation it +#nb # solves periodic Kohn-Sham equations. +# +# This document provides an overview of the structure of the code +# and how to access basic information about calculations. +# Basic familiarity with the concepts of plane-wave density functional theory +# is assumed throughout. Feel free to take a look at the +#md # [Periodic problems](@ref periodic-problems) +#nb # [Periodic problems](https://docs.dftk.org/stable/guide/periodic_problems/) +# or the +#md # [Introductory resources](@ref introductory-resources) +#nb # [Introductory resources](https://docs.dftk.org/stable/guide/introductory_resources/) +# chapters for some introductory material on the topic. +# +# !!! note "Convergence parameters in the documentation" +# We use rough parameters in order to be able +# to automatically generate this documentation very quickly. +# Therefore results are far from converged. +# Tighter thresholds and larger grids should be used for more realistic results. +# +# For our discussion we will use the classic example of +# computing the LDA ground state of the +# [silicon crystal](https://www.materialsproject.org/materials/mp-149). +# Performing such a calculation roughly proceeds in three steps. + +using DFTK +using Plots +using Unitful +using UnitfulAtomic + +## 1. Define lattice and atomic positions +a = 5.431u"angstrom" # Silicon lattice constant +lattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors + [1 0 1.]; # specified column by column + [1 1 0.]]; + +# By default, all numbers passed as arguments are assumed to be in atomic +# units. Quantities such as temperature, energy cutoffs, lattice vectors, and +# the k-point grid spacing can optionally be annotated with Unitful units, +# which are automatically converted to the atomic units used internally. For +# more details, see the [Unitful package +# documentation](https://painterqubits.github.io/Unitful.jl/stable/) and the +# [UnitfulAtomic.jl package](https://github.com/sostock/UnitfulAtomic.jl). + +## Load HGH pseudopotential for Silicon +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4")) + +## Specify type and positions of atoms +atoms = [Si, Si] +positions = [ones(3)/8, -ones(3)/8] + +## 2. Select model and basis +model = model_LDA(lattice, atoms, positions) +kgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid) +Ecut = 7 # kinetic energy cutoff +## Ecut = 190.5u"eV" # Could also use eV or other energy-compatible units +basis = PlaneWaveBasis(model; Ecut, kgrid) +## Note the implicit passing of keyword arguments here: +## this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid) + +## 3. Run the SCF procedure to obtain the ground state +scfres = self_consistent_field(basis, tol=1e-5); + +# That's it! Now you can get various quantities from the result of the SCF. +# For instance, the different components of the energy: +scfres.energies + +# Eigenvalues: +hcat(scfres.eigenvalues...) +# `eigenvalues` is an array (indexed by k-points) of arrays (indexed by +# eigenvalue number). The "splatting" operation `...` calls `hcat` +# with all the inner arrays as arguments, which collects them into a +# matrix. +# +# The resulting matrix is 7 (number of computed eigenvalues) by 8 +# (number of irreducible k-points). There are 7 eigenvalues per +# k-point because there are 4 occupied states in the system (4 valence +# electrons per silicon atom, two atoms per unit cell, and paired +# spins), and the eigensolver gives itself some breathing room by +# computing some extra states (see the `bands` argument to +# `self_consistent_field` as well as the [`AdaptiveBands`](@ref) documentation). +# There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the +# amount of computations to just the irreducible k-points (see +#md # [Crystal symmetries](@ref) +#nb # [Crystal symmetries](https://docs.dftk.org/stable/developer/symmetries/) +# for details). +# +# We can check the occupations ... +hcat(scfres.occupation...) +# ... and density, where we use that the density objects in DFTK are +# indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then +# in the 3-dimensional real-space grid. +rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis +x = [r[1] for r in rvecs] # only keep the x coordinate +plot(x, scfres.ρ[1, :, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2) + +# We can also perform various postprocessing steps: +# We can get the Cartesian forces (in Hartree / Bohr): +compute_forces_cart(scfres) +# As expected, they are numerically zero in this highly symmetric configuration. +# We could also compute a band structure, +plot_bandstructure(scfres; kline_density=10) +# or plot a density of states, for which we increase the kgrid a bit +# to get smoother plots: +bands = compute_bands(scfres, MonkhorstPack(6, 6, 6)) +plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac()) +# Note that directly employing the `scfres` also works, but the results +# are much cruder: +plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac()) diff --git a/v0.6.16/guide/tutorial/1ba2a556.svg b/v0.6.16/guide/tutorial/1ba2a556.svg new file mode 100644 index 0000000000..d23fb2f506 --- /dev/null +++ b/v0.6.16/guide/tutorial/1ba2a556.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/tutorial/541d21f0.svg b/v0.6.16/guide/tutorial/541d21f0.svg new file mode 100644 index 0000000000..78b3ae660f --- /dev/null +++ b/v0.6.16/guide/tutorial/541d21f0.svg @@ -0,0 +1,220 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/tutorial/a1be6357.svg b/v0.6.16/guide/tutorial/a1be6357.svg new file mode 100644 index 0000000000..98773f0fa2 --- /dev/null +++ b/v0.6.16/guide/tutorial/a1be6357.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/tutorial/baa778d4.svg b/v0.6.16/guide/tutorial/baa778d4.svg new file mode 100644 index 0000000000..d4c685e221 --- /dev/null +++ b/v0.6.16/guide/tutorial/baa778d4.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.16/guide/tutorial/index.html b/v0.6.16/guide/tutorial/index.html new file mode 100644 index 0000000000..baa2264460 --- /dev/null +++ b/v0.6.16/guide/tutorial/index.html @@ -0,0 +1,65 @@ + +Tutorial · DFTK.jl

    Tutorial

    This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.

    Convergence parameters in the documentation

    We use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

    For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.

    using DFTK
    +using Plots
    +using Unitful
    +using UnitfulAtomic
    +
    +# 1. Define lattice and atomic positions
    +a = 5.431u"angstrom"          # Silicon lattice constant
    +lattice = a / 2 * [[0 1 1.];  # Silicon lattice vectors
    +                   [1 0 1.];  # specified column by column
    +                   [1 1 0.]];

    By default, all numbers passed as arguments are assumed to be in atomic units. Quantities such as temperature, energy cutoffs, lattice vectors, and the k-point grid spacing can optionally be annotated with Unitful units, which are automatically converted to the atomic units used internally. For more details, see the Unitful package documentation and the UnitfulAtomic.jl package.

    # Load HGH pseudopotential for Silicon
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +
    +# Specify type and positions of atoms
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +# 2. Select model and basis
    +model = model_LDA(lattice, atoms, positions)
    +kgrid = [4, 4, 4]     # k-point grid (Regular Monkhorst-Pack grid)
    +Ecut = 7              # kinetic energy cutoff
    +# Ecut = 190.5u"eV"  # Could also use eV or other energy-compatible units
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +# Note the implicit passing of keyword arguments here:
    +# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)
    +
    +# 3. Run the SCF procedure to obtain the ground state
    +scfres = self_consistent_field(basis, tol=1e-5);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.900501918323                   -0.70    4.6   54.1ms
    +  2   -7.905001506251       -2.35       -1.52    1.0   24.1ms
    +  3   -7.905177500112       -3.75       -2.52    1.1   24.4ms
    +  4   -7.905210491034       -4.48       -2.83    2.8   34.0ms
    +  5   -7.905211074257       -6.23       -2.97    1.0   24.3ms
    +  6   -7.905211517859       -6.35       -4.66    1.0   24.3ms
    +  7   -7.905211530858       -7.89       -4.46    3.1   93.0ms
    +  8   -7.905211531381       -9.28       -5.23    1.0   25.2ms

    That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:

    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1020961 
    +    AtomicLocal         -2.1987860
    +    AtomicNonlocal      1.7296110 
    +    Ewald               -8.3979253
    +    PspCorrection       -0.2946254
    +    Hartree             0.5530393 
    +    Xc                  -2.3986213
    +
    +    total               -7.905211531381

    Eigenvalues:

    hcat(scfres.eigenvalues...)
    7×8 Matrix{Float64}:
    + -0.176942  -0.147441  -0.0911694   …  -0.101219   -0.0239772  -0.0184081
    +  0.261073   0.116914   0.00482497      0.0611642  -0.0239772  -0.0184081
    +  0.261073   0.232989   0.216733        0.121636    0.155531    0.117747
    +  0.261073   0.232989   0.216733        0.212134    0.155531    0.117747
    +  0.354532   0.335109   0.317102        0.350436    0.285692    0.417258
    +  0.354532   0.389828   0.384601    …   0.436926    0.285692    0.417509
    +  0.354532   0.389828   0.384601        0.449247    0.627551    0.443806

    eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number). The "splatting" operation ... calls hcat with all the inner arrays as arguments, which collects them into a matrix.

    The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).

    We can check the occupations ...

    hcat(scfres.occupation...)
    7×8 Matrix{Float64}:
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    + 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    + 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

    ... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.

    rvecs = collect(r_vectors(basis))[:, 1, 1]  # slice along the x axis
    +x = [r[1] for r in rvecs]                   # only keep the x coordinate
    +plot(x, scfres.ρ[1, :, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
    Example block output

    We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):

    compute_forces_cart(scfres)
    2-element Vector{StaticArraysCore.SVector{3, Float64}}:
    + [-6.881805506738347e-16, -1.6906990676015545e-17, 5.860316529766965e-16]
    + [1.313260474425575e-16, -5.077086301828396e-16, -7.299632566230879e-16]

    As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,

    plot_bandstructure(scfres; kline_density=10)
    Example block output

    or plot a density of states, for which we increase the kgrid a bit to get smoother plots:

    bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))
    +plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())
    Example block output

    Note that directly employing the scfres also works, but the results are much cruder:

    plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())
    Example block output
    diff --git a/v0.6.16/index.html b/v0.6.16/index.html new file mode 100644 index 0000000000..d6284266d0 --- /dev/null +++ b/v0.6.16/index.html @@ -0,0 +1,2 @@ + +Home · DFTK.jl

    DFTK.jl: The density-functional toolkit.

    The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.

    If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.

    Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

    Getting started

    First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.

    Convergence parameters in the documentation

    In the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

    If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!

    diff --git a/v0.6.16/publications/index.html b/v0.6.16/publications/index.html new file mode 100644 index 0000000000..961173a6d1 --- /dev/null +++ b/v0.6.16/publications/index.html @@ -0,0 +1,10 @@ + +Publications · DFTK.jl

    Publications

    Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is

    @article{DFTKjcon,
    +  author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},
    +  doi = {10.21105/jcon.00069},
    +  journal = {Proc. JuliaCon Conf.},
    +  title = {DFTK: A Julian approach for simulating electrons in solids},
    +  volume = {3},
    +  pages = {69},
    +  year = {2021},
    +}

    Additionally the following publications describe DFTK or one of its algorithms:

    Research conducted with DFTK

    The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.

    diff --git a/v0.6.16/school2022/index.html b/v0.6.16/school2022/index.html new file mode 100644 index 0000000000..f38375acb3 --- /dev/null +++ b/v0.6.16/school2022/index.html @@ -0,0 +1,2 @@ + +DFTK School 2022 · DFTK.jl
    diff --git a/v0.6.16/search_index.js b/v0.6.16/search_index.js new file mode 100644 index 0000000000..d212f2898e --- /dev/null +++ b/v0.6.16/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"EditURL = \"../../../examples/gaas_surface.jl\"","category":"page"},{"location":"examples/gaas_surface/#Modelling-a-gallium-arsenide-surface","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"section"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"miller = (1, 1, 0) # Surface Miller indices\nn_GaAs = 2 # Number of GaAs layers\nn_vacuum = 4 # Number of vacuum layers\nEcut = 5 # Hartree\nkgrid = (4, 4, 1); # Monkhorst-Pack mesh\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use ASE to build the structure:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using ASEconvert\n\na = 5.6537 # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)\ngaas = ase.build.bulk(\"GaAs\", \"zincblende\"; a)\nsurface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Get the amount of vacuum in Ångström we need to add","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum\nsurface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Write an image of the surface and embed it as a nice illustration:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"ase.io.write(\"surface.png\", surface * pytuple((3, 3, 1)), rotation=\"-90x, 30y, -75z\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use the pyconvert function from PythonCall to convert to an AtomsBase-compatible system. These two functions not only support importing ASE atoms into DFTK, but a few more third-party data structures as well. Typically the imported atoms use a bare Coulomb potential, such that appropriate pseudopotentials need to be attached in a post-step:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using DFTK\nsystem = attach_psp(pyconvert(AbstractSystem, surface);\n Ga=\"hgh/pbe/ga-q3.hgh\",\n As=\"hgh/pbe/as-q5.hgh\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"We model this surface with (quite large a) temperature of 0.01 Hartree to ease convergence. Try lowering the SCF convergence tolerance (tol) or the temperature or try mixing=KerkerMixing() to see the full challenge of this system.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],\n temperature=0.001, smearing=DFTK.Smearing.Gaussian())\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n\nscfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"scfres.energies","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"EditURL = \"../../../examples/geometry_optimization.jl\"","category":"page"},{"location":"examples/geometry_optimization/#Geometry-optimization","page":"Geometry optimization","title":"Geometry optimization","text":"","category":"section"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the H_2 molecule. We setup H_2 in an LDA model just like in the Tutorial for silicon.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"using DFTK\nusing Optim\nusing LinearAlgebra\nusing Printf\n\nkgrid = [1, 1, 1] # k-point grid\nEcut = 5 # kinetic energy cutoff in Hartree\ntol = 1e-8 # tolerance for the optimization routine\na = 10 # lattice constant in Bohr\nlattice = a * I(3)\nH = ElementPsp(:H; psp=load_psp(\"hgh/lda/h-q1\"));\natoms = [H, H];\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We define a Bloch wave and a density to be used as global variables so that we can transfer the solution from one iteration to another and therefore reduce the optimization time.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"ψ = nothing\nρ = nothing","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"First, we create a function that computes the solution associated to the position x ℝ^6 of the atoms in reduced coordinates (cf. Reduced and cartesian coordinates for more details on the coordinates system). They are stored as a vector: x[1:3] represents the position of the first atom and x[4:6] the position of the second. We also update ψ and ρ for the next iteration.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function compute_scfres(x)\n model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n global ψ, ρ\n if isnothing(ρ)\n ρ = guess_density(basis)\n end\n is_converged = ScfConvergenceForce(tol / 10)\n scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n ψ = scfres.ψ\n ρ = scfres.ρ\n scfres\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Then, we create the function we want to optimize: fg! is used to update the value of the objective function F, namely the energy, and its gradient G, here computed with the forces (which are, by definition, the negative gradient of the energy).","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function fg!(F, G, x)\n scfres = compute_scfres(x)\n if !isnothing(G)\n grad = compute_forces(scfres)\n G .= -[grad[1]; grad[2]]\n end\n scfres.energies.total\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Now, we can optimize on the 6 parameters x = [x1, y1, z1, x2, y2, z2] in reduced coordinates, using LBFGS(), the default minimization algorithm in Optim. We start from x0, which is a first guess for the coordinates. By default, optimize traces the output of the optimization algorithm during the iterations. Once we have the minimizer xmin, we compute the bond length in Cartesian coordinates.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"x0 = vcat(lattice \\ [0., 0., 0.], lattice \\ [1.4, 0., 0.])\nxres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),\n Optim.Options(; show_trace=true, f_tol=tol))\nxmin = Optim.minimizer(xres)\ndmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])\n@printf \"\\nOptimal bond length for Ecut=%.2f: %.3f Bohr\\n\" Ecut dmin","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"note: Degrees of freedom\nWe used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as H_2O). In the particular case of H_2, we could use only the internal degree of freedom which, in this case, is just the bond length.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"EditURL = \"../../../examples/convergence_study.jl\"","category":"page"},{"location":"examples/convergence_study/#Performing-a-convergence-study","page":"Performing a convergence study","title":"Performing a convergence study","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of k-points in each dimension of the Brillouin zone.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using DFTK\nusing LinearAlgebra\nusing Statistics\n\nfunction run_scf(; a=5.0, Ecut, nkpt, tol)\n atoms = [ElementPsp(:Pt; psp=load_psp(\"hgh/lda/Pt-q10\"))]\n position = [zeros(3)]\n lattice = a * Matrix(I, 3, 3)\n\n model = model_LDA(lattice, atoms, position; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n println(\"nkpt = $nkpt Ecut = $Ecut\")\n self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))\nend;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-2 # Tolerance to which we target to converge\nnkpts = 1:7 # K-point range checked for convergence\nEcuts = 10:2:24; # Energy cutoff range checked for convergence\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the first step we converge in the number of k-points employed in each dimension of the Brillouin zone …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_kgrid(nkpts; Ecut, tol)\n energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])\nend\nresult = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)\nnkpt_conv = result.nkpt_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot the obtained convergence:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using Plots\nplot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"k-grid\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"We continue to do the convergence in Ecut using the suggested k-point grid.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_Ecut(Ecuts; nkpt, tol)\n energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])\nend\nresult = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)\nEcut_conv = result.Ecut_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot it:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"Ecut\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/#A-more-realistic-example.","page":"Performing a convergence study","title":"A more realistic example.","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Repeating the above exercise for more realistic settings, namely …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-4 # Tolerance to which we target to converge\nnkpts = 1:20 # K-point range checked for convergence\nEcuts = 20:1:50;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"…one obtains the following two plots for the convergence in kpoints and Ecut.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"\n","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"EditURL = \"../../../examples/energy_cutoff_smearing.jl\"","category":"page"},{"location":"examples/energy_cutoff_smearing/#Energy-cutoff-smearing","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"","category":"section"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"H_k u_k = ε_k u_k","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"for each k-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis mathcalB_k^E_c=x e^iG x G mathcalR^* k+G^2 2E_c whose size highly depends on the choice of k-point, cell size or cutoff energy rm E_c (the Ecut parameter of DFTK). As a result, energy bands computed along a k-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"using DFTK\nusing Statistics\n\na0 = 10.26 # Experimental lattice constant of silicon in bohr\na_list = range(a0 - 1/2, a0 + 1/2; length=20)\n\nfunction compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n model = model_PBE(lattice, atoms, positions; kinetic_blowup)\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n self_consistent_field(basis; callback=identity, kwargs...).energies.total\nend\n\nEcut = 5 # Very low Ecut to display big irregularities\nkgrid = (2, 2, 2) # Very sparse k-grid to speed up convergence\nE0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"To be compared with the same computation for a high Ecut=100. The naive approximation of the energy is shifted for the legibility of the plot.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,\n -7.848576991754026, -7.850892888614151, -7.852921532056932,\n -7.854675317792186, -7.85616622262217, -7.85740584131599,\n -7.858405359984107, -7.859175611288143, -7.859727053496513,\n -7.860069804791132, -7.860213631865354, -7.8601679947736915,\n -7.859942011410533, -7.859544518721661, -7.858984032385052,\n -7.858268793303855, -7.857406769423708]\n\nusing Plots\nshift = mean(abs.(E0_naive .- E0_ref))\np = plot(a_list, E0_naive .- shift, label=\"Ecut=5\", xlabel=\"lattice parameter a (bohr)\",\n ylabel=\"Ground state energy (Ha)\", color=1)\nplot!(p, a_list, E0_ref, label=\"Ecut=100\", color=2)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as \"energy cutoff smearing\". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide C^2 regularity of the energy bands.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"[CHV2022]: ","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Let us lauch the computation again with the modified kinetic term.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"note: Abinit energy cutoff smearing option\nFor the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring C^1 regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]\na0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])\n\nshift = mean(abs.(E0_modified .- E0_ref)) # Shift for legibility of the plot\nplot!(p, a_list, E0_modified .- shift, label=\"Ecut=5 + BlowupCHV\", color=3)\nvline!(p, [a0], label=\"experimental a0\", linestyle=:dash, linecolor=:black)\nvline!(p, [a0_naive], label=\"a0 Ecut=5\", linestyle=:dash, color=1)\nvline!(p, [a0_ref], label=\"a0 Ecut=100\", linestyle=:dash, color=2)\nvline!(p, [a0_modified], label=\"a0 Ecut=5 + BlowupCHV\", linestyle=:dash, color=3)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter a, even with the low Ecut=5 Ha.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"println(\"Error of approximation of the reference a0 with modified kinetic term:\"*\n \" $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%\")","category":"page"},{"location":"publications/#Publications","page":"Publications","title":"Publications","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"@article{DFTKjcon,\n author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},\n doi = {10.21105/jcon.00069},\n journal = {Proc. JuliaCon Conf.},\n title = {DFTK: A Julian approach for simulating electrons in solids},\n volume = {3},\n pages = {69},\n year = {2021},\n}","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"Additionally the following publications describe DFTK or one of its algorithms:","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"E. Cancès, M. Hassan and L. Vidal. Modified-Operator Method for the Calculation of Band Diagrams of Crystalline Materials. Mathematics of Computation (2023). ArXiv:2210.00442. (Supplementary material and computational scripts.\nE. Cancès, M. F. Herbst, G. Kemlin, A. Levitt and B. Stamm. Numerical stability and efficiency of response property calculations in density functional theory Letters in Mathematical Physics, 113, 21 (2023). ArXiv:2210.04512. (Supplementary material and computational scripts).\nM. F. Herbst and A. Levitt. A robust and efficient line search for self-consistent field iterations Journal of Computational Physics, 459, 111127 (2022). ArXiv:2109.14018. (Supplementary material and computational scripts).\nM. F. Herbst, A. Levitt and E. Cancès. DFTK: A Julian approach for simulating electrons in solids. JuliaCon Proceedings, 3, 69 (2021).\nM. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. Journal of Physics: Condensed Matter, 33, 085503 (2021). ArXiv:2009.01665. (Supplementary material and computational scripts).","category":"page"},{"location":"publications/#Research-conducted-with-DFTK","page":"Publications","title":"Research conducted with DFTK","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"J. Cazalis. Dirac cones for a mean-field model of graphene (Submitted). ArXiv:2207.09893. (Computational script).\nE. Cancès, L. Garrigue, D. Gontier. A simple derivation of moiré-scale continuous models for twisted bilayer graphene Physical Review B, 107, 155403 (2023). ArXiv:2206.05685.\nG. Dusson, I. Sigal and B. Stamm. Analysis of the Feshbach-Schur method for the Fourier spectral discretizations of Schrödinger operators Mathematics of Computation, 92, 217 (2023). ArXiv:2008.10871.\nE. Cancès, G. Dusson, G. Kemlin and A. Levitt. Practical error bounds for properties in plane-wave electronic structure calculations SIAM Journal on Scientific Computing, 44, B1312 (2022). ArXiv:2111.01470. (Supplementary material and computational scripts).\nE. Cancès, G. Kemlin and A. Levitt. Convergence analysis of direct minimization and self-consistent iterations SIAM Journal on Matrix Analysis and Applications, 42, 243 (2021). ArXiv:2004.09088. (Computational script).\nM. F. Herbst, A. Levitt and E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations. Faraday Discussions, 224, 227 (2020). ArXiv:2004.13549. (Reference implementation).","category":"page"},{"location":"school2022/#DFTK-School-2022","page":"DFTK School 2022","title":"DFTK School 2022","text":"","category":"section"},{"location":"tricks/parallelization/#Timings-and-parallelization","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"This section summarizes the options DFTK offers to monitor and influence performance of the code.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2])\n\nDFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)","category":"page"},{"location":"tricks/parallelization/#Timing-measurements","page":"Timings and parallelization","title":"Timing measurements","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For example to measure the timing of an SCF:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)\n\nDFTK.timer","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"note: Timing measurements and stack traces\nTiming measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.","category":"page"},{"location":"tricks/parallelization/#Rough-timing-estimates","page":"Timings and parallelization","title":"Rough timing estimates","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"function estimate_time_per_scf_step(basis::PlaneWaveBasis)\n # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.\n time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3\n\n (time_per_FFT_per_grid_point\n * prod(basis.fft_size)\n * length(basis.kpoints)\n * div(basis.model.n_electrons, DFTK.filled_occupation(basis.model), RoundUp)\n * 8 # mean number of FFT steps per state per k-point per iteration\n )\nend\n\n\"Time per SCF (s): $(estimate_time_per_scf_step(basis))\"","category":"page"},{"location":"tricks/parallelization/#Options-for-parallelization","page":"Timings and parallelization","title":"Options for parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"At the moment DFTK offers two ways to parallelize a calculation, firstly shared-memory parallelism using threading and secondly multiprocessing using MPI (via the MPI.jl Julia interface). MPI-based parallelism is currently only over k-points, such that it cannot be used for calculations with only a single k-point. Otherwise combining both forms of parallelism is possible as well.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The scaling of both forms of parallelism for a number of test cases is demonstrated in the following figure. These values were obtained using DFTK version 0.1.17 and Julia 1.6 and the precise scalings will likely be different depending on architecture, DFTK or Julia version. The rough trends should, however, be similar.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The MPI-based parallelization strategy clearly shows a superior scaling and should be preferred if available.","category":"page"},{"location":"tricks/parallelization/#MPI-based-parallelism","page":"Timings and parallelization","title":"MPI-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Currently DFTK uses MPI to distribute on k-points only. This implies that calculations with only a single k-point cannot use make use of this. For details on setting up and configuring MPI with Julia see the MPI.jl documentation.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"First disable all threading inside DFTK, by adding the following to your script running the DFTK calculation:\nusing DFTK\ndisable_threading()\nRun Julia in parallel using the mpiexecjl wrapper script from MPI.jl:\nmpiexecjl -np 16 julia myscript.jl\nIn this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"As usual with MPI printing will be garbled. You can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"at the top of your script to disable printing on all processes but one.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"info: MPI-based parallelism not fully supported\nWhile standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.","category":"page"},{"location":"tricks/parallelization/#Thread-based-parallelism","page":"Timings and parallelization","title":"Thread-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Threading in DFTK currently happens on multiple layers distributing the workload over different k-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:\nusing DFTK\nsetup_threading()\nThis disables FFT threading and sets the number of BLAS threads to the number of Julia threads.\nRun Julia passing the desired number of threads using the flag -t:\njulia -t 8 myscript.jl","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For some cases (e.g. a single k-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.","category":"page"},{"location":"tricks/parallelization/#Advanced-threading-tweaks","page":"Timings and parallelization","title":"Advanced threading tweaks","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.","category":"page"},{"location":"tricks/parallelization/#BLAS-threads","page":"Timings and parallelization","title":"BLAS threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using LinearAlgebra\nBLAS.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"or (from Julia 1.6) simply BLAS.get_num_threads().","category":"page"},{"location":"tricks/parallelization/#Julia-threads","page":"Timings and parallelization","title":"Julia threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over k-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().","category":"page"},{"location":"tricks/parallelization/#FFT-threads","page":"Timings and parallelization","title":"FFT threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using FFTW\nFFTW.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"EditURL = \"../../../examples/error_estimates_forces.jl\"","category":"page"},{"location":"examples/error_estimates_forces/#Practical-error-bounds-for-the-forces","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"This is a simple example showing how to compute error estimates for the forces on a rm TiO_2 molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"[CDKL2021]: E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"using DFTK\nusing Printf\nusing LinearAlgebra\nusing ForwardDiff\nusing LinearMaps\nusing IterativeSolvers","category":"page"},{"location":"examples/error_estimates_forces/#Setup","page":"Practical error bounds for the forces","title":"Setup","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We setup manually the rm TiO_2 configuration from Materials Project.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ti = ElementPsp(:Ti; psp=load_psp(\"hgh/lda/ti-q4.hgh\"))\nO = ElementPsp(:O; psp=load_psp(\"hgh/lda/o-q6.hgh\"))\natoms = [Ti, Ti, O, O, O, O]\npositions = [[0.5, 0.5, 0.5], # Ti\n [0.0, 0.0, 0.0], # Ti\n [0.19542, 0.80458, 0.5], # O\n [0.80458, 0.19542, 0.5], # O\n [0.30458, 0.30458, 0.0], # O\n [0.69542, 0.69542, 0.0]] # O\nlattice = [[8.79341 0.0 0.0];\n [0.0 8.79341 0.0];\n [0.0 0.0 5.61098]];\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We apply a small displacement to one of the rm Ti atoms to get nonzero forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"positions[1] .+= [-0.022, 0.028, 0.035]","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We build a model with one k-point only, not too high Ecut_ref and small tolerance to limit computational time. These parameters can be increased for more precise results.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"model = model_LDA(lattice, atoms, positions)\nkgrid = [1, 1, 1]\nEcut_ref = 35\nbasis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)\ntol = 1e-5;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Computations","page":"Practical error bounds for the forces","title":"Computations","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute the reference solution P_* from which we will compute the references forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)\nψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute a variational approximation of the reference solution with smaller Ecut. ψr, ρr and Er are the quantities computed with Ecut and then extended to the reference grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"note: Choice of convergence parameters\nBe careful to choose Ecut not too close to Ecut_ref. Note also that the current choice Ecut_ref = 35 is such that the reference solution is not converged and Ecut = 15 is such that the asymptotic regime (crucial to validate the approach) is barely established.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ecut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol, callback=identity)\nψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)\nρr = compute_density(basis_ref, ψr, scfres.occupation)\nEr, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then compute several quantities that we need to evaluate the error bounds.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the residual R(P), and remove the virtual orbitals, as required in src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)\nres, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)\nψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the error P-P_* on the associated orbitals ϕ-ψ after aligning them: this is done by solving min ϕ - ψU for U unitary matrix of size NN (N being the number of electrons) whose solution is U = S(S^*S)^-12 where S is the overlap matrix ψ^*ϕ.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function compute_error(basis, ϕ, ψ)\n map(zip(ϕ, ψ)) do (ϕk, ψk)\n S = ψk'ϕk\n U = S*(S'S)^(-1/2)\n ϕk - ψk*U\n end\nend\nerr = compute_error(basis_ref, ψr, ψ_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1R(P) with boldsymbol M^-1 defined in [CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]\nmap(zip(P, ψr)) do (Pk, ψk)\n DFTK.precondprep!(Pk, ψk)\nend\nfunction apply_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_inv_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n op(x) = apply_M(φk, Pk, x, n)\n function f_ldiv!(x, y)\n x .= DFTK.proj_tangent_kpt(y, φk)\n x ./= (Pk.mean_kin[n] .+ Pk.kin)\n DFTK.proj_tangent_kpt!(x, φk)\n end\n J = LinearMap{eltype(φk)}(op, size(δφnk, 1))\n δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),\n verbose=false, reltol=0, abstol=1e-15)\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_metric(φ, P, δφ, A::Function)\n map(enumerate(δφ)) do (ik, δφk)\n Aδφk = similar(δφk)\n φk = φ[ik]\n for n = 1:size(δφk,2)\n Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)\n end\n Aδφk\n end\nend\nMres = apply_metric(ψr, P, res, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We can now compute the modified residual R_rm Schur(P) using a Schur complement to approximate the error on low-frequencies[CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"beginbmatrix\n(boldsymbol Ω + boldsymbol K)_11 (boldsymbol Ω + boldsymbol K)_12 \n0 boldsymbol M_22\nendbmatrix\nbeginbmatrix\nP_1 - P_*1 P_2-P_*2\nendbmatrix =\nbeginbmatrix\nR_1 R_2\nendbmatrix","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the projection of the residual onto the high and low frequencies:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"resLF = DFTK.transfer_blochwave(res, basis_ref, basis)\nresHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1_22R_2(P):","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"e2 = apply_metric(ψr, P, resHF, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the right hand side of the Schur system:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"# Rayleigh coefficients needed for `apply_Ω`\nΛ = map(enumerate(ψr)) do (ik, ψk)\n Hk = hamr.blocks[ik]\n Hψk = Hk * ψk\n ψk'Hψk\nend\nΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)\nΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)\nrhs = resLF - ΩpKe2;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Solve the Schur system to compute R_rm Schur(P): this is the most costly step, but inverting boldsymbolΩ + boldsymbolK on the small space has the same cost than the full SCF cycle on the small grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)\ne1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ\ne1 = DFTK.transfer_blochwave(e1, basis, basis_ref)\nres_schur = e1 + Mres;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Error-estimates","page":"Practical error bounds for the forces","title":"Error estimates","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We start with different estimations of the forces:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the reference solution","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f_ref = compute_forces(scfres_ref)\nforces = Dict(\"F(P_*)\" => f_ref)\nrelerror = Dict(\"F(P_*)\" => 0.0)\ncompute_relerror(f) = norm(f - f_ref) / norm(f_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the variational solution and relative error without any post-processing:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f = compute_forces(scfres)\nforces[\"F(P)\"] = f\nrelerror[\"F(P)\"] = compute_relerror(f);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then try to improve F(P) using the first order linearization:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"F(P) = F(P_*) + rm dF(P)(P-P_*)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"To this end, we use the ForwardDiff.jl package to compute rm dF(P) using automatic differentiation.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function df(basis, occupation, ψ, δψ, ρ)\n δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)\n ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)\nend;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument if we have access to the actual error P-P_*. Usually this is of course not the case, but this is the \"best\" improvement we can hope for with a linearisation, so we are aiming for this precision.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)\nforces[\"F(P) - df(P)⋅(P-P_*)\"] = f - df_err\nrelerror[\"F(P) - df(P)⋅(P-P_*)\"] = compute_relerror(f - df_err);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument when replacing the error P-P_* by the modified residual R_rm Schur(P). The latter quantity is computable in practice.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_schur = df(basis_ref, occ, ψr, res_schur, ρr)\nforces[\"F(P) - df(P)⋅Rschur(P)\"] = f - df_schur\nrelerror[\"F(P) - df(P)⋅Rschur(P)\"] = compute_relerror(f - df_schur);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Summary of all forces on the first atom (Ti)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"for (key, value) in pairs(forces)\n @printf(\"%30s = [%7.5f, %7.5f, %7.5f] (rel. error: %7.5f)\\n\",\n key, (value[1])..., relerror[key])\nend","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Notice how close the computable expression F(P) - rm dF(P)R_rm Schur(P) is to the best linearization ansatz F(P) - rm dF(P)(P-P_*).","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"EditURL = \"../../../examples/collinear_magnetism.jl\"","category":"page"},{"location":"examples/collinear_magnetism/#Collinear-spin-and-magnetic-systems","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"","category":"section"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using DFTK\n\na = 5.42352 # Bohr\nlattice = a / 2 * [[-1 1 1];\n [ 1 -1 1];\n [ 1 1 -1]]\natoms = [ElementPsp(:Fe; psp=load_psp(\"hgh/lda/Fe-q8.hgh\"))]\npositions = [zeros(3)];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"To get the ground-state energy we use an LDA model and rather moderate discretisation parameters.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"kgrid = [3, 3, 3] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 15 # kinetic energy cutoff in Hartree\nmodel_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)\nbasis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)\n\nscfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres_nospin.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel d-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of s-electrons, 1 pair of d-electrons and 4 unpaired d-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"magnetic_moments = [4];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"tip: Units of the magnetisation and magnetic moments in DFTK\nUnlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton μ_B, which in atomic units has the value frac12. Since μ_B is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nρ0 = guess_density(basis, magnetic_moments)\nscfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: Model and magnetic moments\nDFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In direct comparison we notice the first, spin-paired calculation to be a little higher in energy","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"println(\"No magnetization: \", scfres_nospin.energies.total)\nprintln(\"Magnetic case: \", scfres.energies.total)\nprintln(\"Difference: \", scfres.energies.total - scfres_nospin.energies.total);\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the d-orbitals these differ rather drastically. For example for the first k-point:","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"iup = 1\nidown = iup + length(scfres.basis.kpoints) ÷ 2\n@show scfres.occupation[iup][1:7]\n@show scfres.occupation[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the eigenvalues differ","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"@show scfres.eigenvalues[iup][1:7]\n@show scfres.eigenvalues[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: ``k``-points in collinear calculations\nFor collinear calculations the kpoints field of the PlaneWaveBasis object contains each k-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up k-points and then all spin-down k-points, such that iup and idown index the same k-point, but differing spins.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Plots\nbands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6)) # Increase kgrid to get nicer DOS.\nplot_dos(bands_666)","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the band structure shows clear differences between both spin components.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Unitful\nusing UnitfulAtomic\nbands_kpath = compute_bands(scfres; kline_density=6)\nplot_bandstructure(bands_kpath)","category":"page"},{"location":"developer/data_structures/#Data-structures","page":"Data structures","title":"Data structures","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4]\nEcut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol=1e-4);","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.","category":"page"},{"location":"developer/data_structures/#Model-datastructure","page":"Data structures","title":"Model datastructure","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[2]: If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"typeof.(model.term_types)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"DFTK computes energies for all terms of the model individually, which are available in scfres.energies:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"scfres.energies","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For now the following energy terms are available in DFTK:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Kinetic energy\nLocal potential energy, either given by analytic potentials or specified by the type of atoms.\nNonlocal potential energy, for norm-conserving pseudopotentials\nNuclei energies (Ewald or pseudopotential correction)\nHartree energy\nExchange-correlation energy\nPower nonlinearities (useful for Gross-Pitaevskii type models)\nMagnetic field energy\nEntropy term","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"model_LDA: LDA model using the Teter parametrisation\nmodel_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])\nmodel_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).","category":"page"},{"location":"developer/data_structures/#PlaneWaveBasis-and-plane-wave-discretisations","page":"Data structures","title":"PlaneWaveBasis and plane-wave discretisations","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the k-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"PlaneWaveBasis(model; Ecut, kgrid)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis by default uses symmetry to reduce the number of k-points explicitly treated. For details see Crystal symmetries.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"As mentioned, the periodic parts of Bloch waves are expanded in a set of normalized plane waves e_G:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"beginaligned\n psi_k(x) = e^i k cdot x u_k(x)\n = sum_G in mathcal R^* c_G e^i k cdot x e_G(x)\nendaligned","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where mathcal R^* is the set of reciprocal lattice vectors. The c_G are ell^2-normalized. The summation is truncated to a \"spherical\", k-dependent basis set","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":" S_k = leftG in mathcal R^* middle\n frac 1 2 k+ G^2 le E_textcutright","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where E_textcut is the cutoff energy.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Densities involve terms like psi_k^2 = u_k^2 and therefore products e_-G e_G for G G in S_k. To represent these we use a \"cubic\", k-independent basis set large enough to contain the set G-G G G in S_k. We can obtain the coefficients of densities on the e_G basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For example let us check the normalization of the first eigenfunction at the first k-point in reciprocal space:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψtest = scfres.ψ[1][:, 1]\nsum(abs2.(ψtest))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"We now perform an IFFT to get ψ in real space. The k-point has to be passed because ψ is expressed on the k-dependent basis. Again the function is normalised:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψreal = ifft(basis, basis.kpoints[1], ψtest)\nsum(abs2.(ψreal)) * basis.dvol","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of k points of the basis can be obtained with basis.kpoints.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"basis.kpoints","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The G vectors of the \"spherical\", k-dependent grid can be obtained with G_vectors:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[length(G_vectors(basis, kpoint)) for kpoint in basis.kpoints]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ik = 1\nG_vectors(basis, basis.kpoints[ik])[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of G vectors (Fourier modes) of the \"cubic\", k-independent basis set can be obtained similarly with G_vectors(basis).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(G_vectors(basis)), prod(basis.fft_size)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(G_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Analogously the list of r vectors (real-space grid) can be obtained with r_vectors(basis):","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(r_vectors(basis))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(r_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/#Accessing-Bloch-waves-and-densities","page":"Data structures","title":"Accessing Bloch waves and densities","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the k-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using Plots # hide\nrvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[:, 1, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]\nscatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);\n yscale=:log10, ylims=(1e-12, 1), label=\"\", xlabel=\"Energy\", ylabel=\"|ρ|\")","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to frac 1 2k+G^2 E_rm cut.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"EditURL = \"../../../examples/custom_solvers.jl\"","category":"page"},{"location":"examples/custom_solvers/#Custom-solvers","page":"Custom solvers","title":"Custom solvers","text":"","category":"section"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"using DFTK, LinearAlgebra\n\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# We take very (very) crude parameters\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"We define our custom fix-point solver: simply a damped fixed-point","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_fp_solver(f, x0, max_iter; tol)\n mixing_factor = .7\n x = x0\n fx = f(x)\n for n = 1:max_iter\n inc = fx - x\n if norm(inc) < tol\n break\n end\n x = x + mixing_factor * inc\n fx = f(x)\n end\n (; fixpoint=x, converged=norm(fx-x) < tol)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Our eigenvalue solver just forms the dense matrix and diagonalizes it explicitly (this only works for very small systems)","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_eig_solver(A, X0; maxiter, tol, kwargs...)\n n = size(X0, 2)\n A = Array(A)\n E = eigen(A)\n λ = E.values[1:n]\n X = E.vectors[:, 1:n]\n (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Finally we also define our custom mixing scheme. It will be a mixture of simple mixing (for the first 2 steps) and than default to Kerker mixing. In the mixing interface δF is (ρ_textout - ρ_textin), i.e. the difference in density between two subsequent SCF steps and the mix function returns δρ, which is added to ρ_textin to yield ρ_textnext, the density for the next SCF step.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"struct MyMixing\n n_simple # Number of iterations for simple mixing\nend\nMyMixing() = MyMixing(2)\n\nfunction DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)\n if n_iter <= mixing.n_simple\n return δF # Simple mixing -> Do not modify update at all\n else\n # Use the default KerkerMixing from DFTK\n DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)\n end\nend","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"That's it! Now we just run the SCF with these solvers","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"scfres = self_consistent_field(basis;\n tol=1e-4,\n solver=my_fp_solver,\n eigensolver=my_eig_solver,\n mixing=MyMixing());\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Note that the default convergence criterion is the difference in density. When this gets below tol, the \"driver\" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"EditURL = \"../../../examples/metallic_systems.jl\"","category":"page"},{"location":"examples/metallic_systems/#metallic-systems","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"","category":"section"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\na = 3.01794 # bohr\nb = 5.22722 # bohr\nc = 9.77362 # bohr\nlattice = [[-a -a 0]; [-b b 0]; [0 0 -c]]\nMg = ElementPsp(:Mg; psp=load_psp(\"hgh/pbe/Mg-q2\"))\natoms = [Mg, Mg]\npositions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Next we build the PBE model and discretize it. Since magnesium is a metal we apply a small smearing temperature to ease convergence using the Fermi-Dirac smearing scheme. Note that both the Ecut is too small as well as the minimal k-point spacing kspacing far too large to give a converged result. These have been selected to obtain a fast execution time. By default PlaneWaveBasis chooses a kspacing of 2π * 0.022 inverse Bohrs, which is much more reasonable.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kspacing = 0.945 / u\"angstrom\" # Minimal spacing of k-points,\n# in units of wavevectors (inverse Bohrs)\nEcut = 5 # Kinetic energy cutoff in Hartree\ntemperature = 0.01 # Smearing temperature in Hartree\nsmearing = DFTK.Smearing.FermiDirac() # Smearing method\n# also supported: Gaussian,\n# MarzariVanderbilt,\n# and MethfesselPaxton(order)\n\nmodel = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];\n temperature, smearing)\nkgrid = kgrid_from_maximal_spacing(lattice, kspacing)\nbasis = PlaneWaveBasis(model; Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.occupation[1]","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.energies","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u\"Å\")\nbands = compute_bands(scfres, kgrid_dos)\nplot_dos(bands)","category":"page"},{"location":"developer/gpu_computations/#GPU-computations","page":"GPU computations","title":"GPU computations","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.","category":"page"},{"location":"developer/gpu_computations/#Current-implementation","page":"GPU computations","title":"Current implementation","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())\nPlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"note: GPU API is experimental\nIt is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.","category":"page"},{"location":"developer/gpu_computations/#Pitfalls","page":"GPU computations","title":"Pitfalls","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"There are a few things to keep in mind when doing GPU programming in DFTK.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Transfers to and from a device can be done simply by converting an array to","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"cuda_gpu = DFTK.GPU(CuArray)\ncpu_architecture = DFTK.CPU()\nA = rand(10) # A is on the CPU\nB = DFTK.to_device(cuda_gpu, A) # B is a copy of A on the CUDA GPU\nB .+= 1.\nC = DFTK.to_cpu(B) # C is a copy of B on the CPU\nD = DFTK.to_device(cpu_architecture, B) # Equivalent to the previous line, but\n # should be avoided as it is less clear","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Note: similar could also be used, but then a reference array (one which already lives on the device) needs to be available at call time. This was done previously, with helper functions to easily build new arrays on a given architecture: see for example zeros_like.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Functions which will get executed on the GPU should always have arguments","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"which are isbits (immutable and contains no references to other values). When using map, also make sure that every structure used is also isbits. For example, the following map will fail, as model contains strings and arrays which are not isbits.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n # model is not isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"However, the following map will run on a GPU, as the lattice is a static matrix.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n lattice = model.lattice # lattice is isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"List comprehensions should be avoided, as they always return a CPU Array.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Instead, we should use map which returns an array of the same type as the input one.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Sometimes, creating a new array or making a copy can be necessary to achieve good","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"EditURL = \"../../../examples/scf_callbacks.jl\"","category":"page"},{"location":"examples/scf_callbacks/#Monitoring-self-consistent-field-calculations","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"","category":"section"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"This example discusses a few aspects of the callback function taking again our favourite silicon example.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using DFTK\nusing ASEconvert\n\nsystem = pyconvert(AbstractSystem, ase.build.bulk(\"Si\"))\nmodel = model_LDA(attach_psp(system; Si=\"hgh/pbe/si-q4.hgh\"))\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfSaveCheckpoints, which stores the state of an SCF at each iterations to allow resuming from a failed calculation at a later point. See Saving SCF results on disk and SCF checkpoints for details how to use checkpointing with DFTK.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. This example is a bit artificial, since the norms of all density differences is available as scfres.history_Δρ after the SCF has finished and could be directly plotted, but the following nicely illustrates the use of callbacks in DFTK.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"To enable plotting we first define the empty canvas and an empty container for all the density differences:","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using Plots\np = plot(; yaxis=:log)\ndensity_differences = Float64[];\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using LinearAlgebra\n\nfunction plot_callback(info)\n if info.stage == :finalize\n plot!(p, density_differences, label=\"|ρout - ρin|\", markershape=:x)\n else\n push!(density_differences, norm(info.ρout - info.ρin))\n end\n info\nend\ncallback = ScfDefaultCallback() ∘ plot_callback;\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback. The latter is the function responsible for printing the usual convergence table. Therefore if we simply did callback=plot_callback the SCF would go silent. The chaining of both callbacks (plot_callback for plotting and ScfDefaultCallback() for the convergence table) makes sure both features are enabled. We run the SCF with the chained callback …","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"scfres = self_consistent_field(basis; tol=1e-5, callback);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"… and show the plot","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"p","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"tip: Debugging with callbacks\nVery handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.","category":"page"},{"location":"features/#package-features","page":"DFTK features","title":"DFTK features","text":"","category":"section"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Standard methods and models:\nStandard DFT models (LDA, GGA, meta-GGA): Any functional from the libxc library\nNorm-conserving pseudopotentials: Goedecker-type (GTH, HGH) or numerical (in UPF pseudopotential format), see Pseudopotentials for details.\nBrillouin zone symmetry for k-point sampling using spglib\nStandard smearing functions (including Methfessel-Paxton and Marzari-Vanderbilt cold smearing)\nCollinear spin polarization for magnetic systems\nSelf-consistent field approaches including Kerker mixing, LDOS mixing, adaptive damping\nDirect minimization, Newton solver\nMulti-level threading (k-points eigenvectors, FFTs, linear algebra)\nMPI-based distributed parallelism (distribution over k-points)\nTreat systems of 1000 electrons\nGround-state properties and post-processing:\nTotal energy\nForces, stresses\nDensity of states (DOS), local density of states (LDOS)\nBand structures\nEasy access to all intermediate quantities (e.g. density, Bloch waves)\nUnique features\nSupport for arbitrary floating point types, including Float32 (single precision) or Double64 (from DoubleFloats.jl).\nForward-mode algorithmic differentiation (see Polarizability using automatic differentiation)\nFlexibility to build your own Kohn-Sham model: Anything from analytic potentials, linear Cohen-Bergstresser model, the Gross-Pitaevskii equation, Anyonic models, etc.\nAnalytic potentials (see Tutorial on periodic problems)\n1D / 2D / 3D systems (see Tutorial on periodic problems)\nThird-party integrations:\nSeamless integration with many standard Input and output formats.\nIntegration with ASE and AtomsBase for passing atomic structures (see AtomsBase integration).\nWannierization using Wannier.jl or Wannier90","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Runs out of the box on Linux, macOS and Windows","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"EditURL = \"../../../examples/atomsbase.jl\"","category":"page"},{"location":"examples/atomsbase/#AtomsBase-integration","page":"AtomsBase integration","title":"AtomsBase integration","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using DFTK","category":"page"},{"location":"examples/atomsbase/#Feeding-an-AtomsBase-AbstractSystem-to-DFTK","page":"AtomsBase integration","title":"Feeding an AtomsBase AbstractSystem to DFTK","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"# Construct bulk system and convert to an AbstractSystem\nusing ASEconvert\nsystem_ase = ase.build.bulk(\"Si\")\nsystem = pyconvert(AbstractSystem, system_ase)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model, discretise and solve:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:","category":"page"},{"location":"examples/atomsbase/#Reading-a-system-using-AtomsIO","page":"AtomsBase integration","title":"Reading a system using AtomsIO","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsIO\n\n# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),\n# which directly yields an AbstractSystem.\nsystem = load_system(\"Si.extxyz\")\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"The same could be achieved using ExtXYZ by system = Atoms(read_frame(\"Si.extxyz\")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.","category":"page"},{"location":"examples/atomsbase/#Directly-setting-up-a-system-in-AtomsBase","page":"AtomsBase integration","title":"Directly setting up a system in AtomsBase","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsBase\nusing Unitful\nusing UnitfulAtomic\n\n# Construct a system in the AtomsBase world\na = 10.26u\"bohr\" # Silicon lattice constant\nlattice = a / 2 * [[0, 1, 1.], # Lattice as vector of vectors\n [1, 0, 1.],\n [1, 1, 0.]]\natoms = [:Si => ones(3)/8, :Si => -ones(3)/8]\nsystem = periodic_system(atoms, lattice; fractional=true)\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/#Obtaining-an-AbstractSystem-from-DFTK-data","page":"AtomsBase integration","title":"Obtaining an AbstractSystem from DFTK data","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"second_system = atomic_system(model)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"Similarly DFTK offers a method to the atomic_system and periodic_system functions (from AtomsBase), which enable a seamless conversion of the usual data structures for setting up DFTK calculations into an AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"lattice = 5.431u\"Å\" / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]];\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nthird_system = atomic_system(lattice, atoms, positions)","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"EditURL = \"../../../examples/dielectric.jl\"","category":"page"},{"location":"examples/dielectric/#Eigenvalues-of-the-dielectric-matrix","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"","category":"section"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"We compute a few eigenvalues of the dielectric matrix (q=0, ω=0) iteratively.","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"using DFTK\nusing Plots\nusing KrylovKit\nusing Printf\n\n# Calculation parameters\nkgrid = [1, 1, 1]\nEcut = 5\n\n# Silicon lattice\na = 10.26\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Compute the dielectric operator without symmetries\nmodel = model_LDA(lattice, atoms, positions, symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"Applying ε^ (1- χ_0 K) …","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"function eps_fun(δρ)\n δV = apply_kernel(basis, δρ; ρ=scfres.ρ)\n χ0δV = apply_χ0(scfres, δV)\n δρ - χ0δV\nend;\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"… eagerly diagonalizes the subspace matrix at each iteration","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);\nnothing #hide","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"EditURL = \"../../../examples/graphene.jl\"","category":"page"},{"location":"examples/graphene/#Graphene-band-structure","page":"Graphene band structure","title":"Graphene band structure","text":"","category":"section"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"using DFTK\nusing Unitful\nusing UnitfulAtomic\nusing LinearAlgebra\nusing Plots\n\n# Define the convergence parameters (these should be increased in production)\nL = 20 # height of the simulation box\nkgrid = [6, 6, 1]\nEcut = 15\ntemperature = 1e-3\n\n# Define the geometry and pseudopotential\na = 4.66 # lattice constant\na1 = a*[1/2,-sqrt(3)/2, 0]\na2 = a*[1/2, sqrt(3)/2, 0]\na3 = L*[0 , 0 , 1]\nlattice = [a1 a2 a3]\nC1 = [1/3,-1/3,0.0] # in reduced coordinates\nC2 = -C1\npositions = [C1, C2]\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\n\n# Run SCF\nmodel = model_PBE(lattice, atoms, positions; temperature)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis)\n\n# Construct 2D path through Brillouin zone\nkpath = irrfbz_path(model; dim=2, space_group_number=13) # graphene space group number\nbands = compute_bands(scfres, kpath; kline_density=20)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"EditURL = \"../../../examples/arbitrary_floattype.jl\"","category":"page"},{"location":"examples/arbitrary_floattype/#Arbitrary-floating-point-types","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"","category":"section"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"[HLC2020]: M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"using DFTK\n\n# Setup silicon lattice\na = 10.263141334305942 # lattice constant in Bohr\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Cast to Float32, setup model and basis\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])\n\n# Run the SCF\nscfres = self_consistent_field(basis, tol=1e-3);\nnothing #hide","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"scfres.energies","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.energies.total)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.ρ)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"note: Generic linear algebra routines\nFor more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"EditURL = \"../../../examples/gross_pitaevskii.jl\"","category":"page"},{"location":"examples/gross_pitaevskii/#gross-pitaevskii","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.","category":"page"},{"location":"examples/gross_pitaevskii/#The-model","page":"Gross-Pitaevskii equation in one dimension","title":"The model","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by ψ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":" H ψ = left(-frac12 Δ + V + 2 C ψ^2right) ψ = μ ψ qquad ψ_L^2 = 1","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"where C provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"which is special cased in DFTK to support 1D models.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"pot(x) = (x - a/2)^2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term C ρ(r)^α dr to the total energy functional, thus a potential term α C ρ^α-1. In our case we thus need the parameters","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"C = 1.0\nα = 2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"… and with this build the model","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using DFTK\nusing LinearAlgebra\n\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n ExternalFromReal(r -> pot(r[1])),\n LocalNonlinearity(ρ -> C * ρ^α),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless); # spinless electrons\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We discretize using a moderate Ecut (For 1D values up to 5000 are completely fine) and run a direct minimization algorithm:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS\nscfres.energies","category":"page"},{"location":"examples/gross_pitaevskii/#Internals","page":"Gross-Pitaevskii equation in one dimension","title":"Internals","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We use the opportunity to explore some of DFTK internals.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Extract the converged density and the obtained wave function:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ρ = real(scfres.ρ)[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1]; # first k-point, all G components, first eigenvector\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Check whether ψ is normalised:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"x = a * vec(first.(DFTK.r_vectors(basis)))\nN = length(x)\ndx = a / N # real-space grid spacing\n@assert sum(abs2.(ψ)) * dx ≈ 1.0","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The density is simply built from ψ:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(scfres.ρ - abs2.(ψ))","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We summarize the ground state in a nice plot:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using Plots\n\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)\n@assert E.total == scfres.energies.total","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Now the Hamiltonian contains all the blocks corresponding to k-points. Here, we just have one k-point:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H = ham.blocks[1];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector\nHmat = Array(H) # This is now just a plain Julia matrix,\n# which we can compute and store in this simple 1D example\n@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Let's check that ψ11 is indeed an eigenstate:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Build a finite-differences version of the GPE operator H, as a sanity check:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))\nA[1, end] = A[end, 1] = -1\nK = A / dx^2 / 2\nV = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))\nH_findiff = K + V;\nmaximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"EditURL = \"../../../examples/gross_pitaevskii_2D.jl\"","category":"page"},{"location":"examples/gross_pitaevskii_2D/#Gross-Pitaevskii-equation-with-external-magnetic-field","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"","category":"section"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 15\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential, and magnetic vector potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2\nω = .6\nApot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]\nApot(X) = Apot(X...);\n\n\n# Parameters\nEcut = 20 # Increase this for production\nη = 500\nC = η/2\nα = 2\nn_electrons = 1; # Increase this for fun\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(),\n ExternalFromReal(X -> pot(X...)),\n LocalNonlinearity(ρ -> C * ρ^α),\n Magnetic(Apot),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # spinless electrons\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-5) # Reduce tol for production\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"EditURL = \"../../../examples/pseudopotentials.jl\"","category":"page"},{"location":"examples/pseudopotentials/#Pseudopotentials","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"section"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated (\"frozen\") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"using DFTK\nusing Unitful\nusing Plots\nusing LazyArtifacts\nimport Main: @artifact_str # hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"note: Using the PseudoLibrary in your own calculations\nInstructions for using the PseudoLibrary in your own calculations can be found in its documentation.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"psp_hgh = load_psp(\"hgh/lda/si-q4.hgh\");\npsp_upf = load_psp(artifact\"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf\");\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"First, we'll take a look at the energy cutoff convergence of these two pseudopotentials. For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The converged cutoffs are 26 Ha and 18 Ha for the HGH and UPF pseudos respectively. We see that the HGH pseudopotential is much harder, i.e. it requires a higher energy cutoff, than the UPF PSP. In general, numeric pseudopotentials tend to be softer than analytical pseudos because of the flexibility of sampling arbitrary functions on a grid.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Next, to see that the different pseudopotentials give reasonbly similar results, we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though the convered cutoffs are higher, we perform these calculations with a cutoff of 12 Ha for both PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"function run_bands(psp)\n a = 10.26 # Silicon lattice constant in Bohr\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp)\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n\n # These are (as you saw above) completely unconverged parameters\n model = model_LDA(lattice, atoms, positions; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))\n\n scfres = self_consistent_field(basis; tol=1e-4)\n bandplot = plot_bandstructure(compute_bands(scfres))\n (; scfres, bandplot)\nend;\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_hgh = run_bands(psp_hgh)\nresult_hgh.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_upf = run_bands(psp_upf)\nresult_upf.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"plot(result_hgh.bandplot, result_upf.bandplot, titles=[\"HGH\" \"UPF\"], size=(800, 400))","category":"page"},{"location":"guide/installation/#Installation","page":"Installation","title":"Installation","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.6 is required for DFTK.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add(\"DFTK\")","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"which will install the latest DFTK release. Alternatively (if you like to be fully up to date) install the master branch:","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add(name=\"DFTK\", rev=\"master\")","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"That's it. With this you are all set to run the code in the Tutorial or the examples directory.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: DFTK version compatibility\nWe follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.","category":"page"},{"location":"guide/installation/#Recommended-optional-packages","page":"Installation","title":"Recommended optional packages","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"AtomsIO and AtomsIOPython, which allow you to read (and write) a large range of standard file formats for atomistic structures. In particular AtomsIO is lightweight and highly recommended.\nASEconvert, which integrates DFTK with a number of convenience features of the ASE, the atomistic simulation environment. See Creating and modelling metallic supercells for an example where ASE is used within a DFTK workflow.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"You can install these packages using","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add([\"AtomsIO\", \"AtomsIOPython\", \"ASEconvert\"])","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: Python dependencies in Julia\nThere are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.","category":"page"},{"location":"guide/installation/#Installation-for-DFTK-development","page":"Installation","title":"Installation for DFTK development","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"EditURL = \"scf_checkpoints.jl\"","category":"page"},{"location":"tricks/scf_checkpoints/#Saving-SCF-results-on-disk-and-SCF-checkpoints","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"note: Availability of `load_scfres`, `save_scfres` and checkpointing\nAs JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"warning: DFTK data formats are not yet fully matured\nThe data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing LinearAlgebra\nusing JLD2\n\nd = 2.079 # oxygen-oxygen bondlength\na = 9.0 # size of the simulation box\nlattice = a * I(3)\nO = ElementPsp(:O; psp=load_psp(\"hgh/pbe/O-q6.hgh\"))\natoms = [O, O]\npositions = d / 2a * [[0, 0, 1], [0, 0, -1]]\nmagnetic_moments = [1., 1.]\n\nEcut = 10 # Far too small to be converged\nmodel = model_PBE(lattice, atoms, positions; temperature=0.02, smearing=Smearing.Gaussian(),\n magnetic_moments)\nbasis = PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])\n\nscfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))\nsave_scfres(\"scfres.jld2\", scfres);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"scfres.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The scfres.jld2 file could now be transferred to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing JLD2\nloaded = load_scfres(\"scfres.jld2\")\npropertynames(loaded)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"loaded.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres(\"scfres.jld2\")) directly from the stored data.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that both load_scfres and save_scfres work by transferring all data to/from the master process, which performs the IO operations without parallelisation. Since this can become slow, both functions support optional arguments to speed up the processing. An overview:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"save_scfres(\"scfres.jld2\", scfres; save_ψ=false) avoids saving the Bloch wave, which is usually faster and saves storage space.\nload_scfres(\"scfres.jld2\", basis) avoids reconstructing the basis from the file, but uses the passed basis instead. This save the time of constructing the basis twice and allows to specify parallelisation options (via the passed basis). Usually this is useful for continuing a calculation on a supercomputer or cluster.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"See also the discussion on Input and output formats on JLD2 files.","category":"page"},{"location":"tricks/scf_checkpoints/#Checkpointing-of-SCF-calculations","page":"Saving SCF results on disk and SCF checkpoints","title":"Checkpointing of SCF calculations","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The easiest way to enable checkpointing is to use the kwargs_scf_checkpoints function, which does two things. (1) It sets up checkpointing using the ScfSaveCheckpoints callback and (2) if a checkpoint file is detected, the stored density is used to continue the calculation instead of the usual atomic-orbital based guess. In practice this is done by modifying the keyword arguments passed to # self_consistent_field appropriately, e.g. by using the density or orbitals from the checkpoint file. For example:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\nscfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that the ρ argument is now passed to kwargsscfcheckpoints instead. If we run in the same folder the SCF again (here using a tighter tolerance), the calculation just continues.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\nscfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since only the density is stored in a checkpoint (and not the Bloch waves), the first step needs a slightly elevated number of diagonalizations. Notice, that reconstructing the checkpointargs in this second call is important as the checkpointargs now contain different data, such that the SCF continues from the checkpoint. By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which can be changed using the filename keyword argument of kwargs_scf_checkpoints. Note that the file is not deleted by DFTK, so it is your responsibility to clean it up. Further note that warnings or errors will arise if you try to use a checkpoint, which is incompatible with your calculation.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"We can also inspect the checkpoint file manually using the load_scfres function and use it manually to continue the calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"oldstate = load_scfres(\"dftk_scf_checkpoint.jld2\")\nscfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Some details on what happens under the hood in this mechanism: When using the kwargs_scf_checkpoints function, the ScfSaveCheckpoints callback is employed during the SCF, which causes the density to be stored to the JLD2 file in every iteration. When reading the file, the kwargs_scf_checkpoints transparently patches away the ψ and ρ keyword arguments and replaces them by the data obtained from the file. For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"(Cleanup files generated by this notebook)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"rm(\"dftk_scf_checkpoint.jld2\")\nrm(\"scfres.jld2\")","category":"page"},{"location":"api/#API-reference","page":"API reference","title":"API reference","text":"","category":"section"},{"location":"api/","page":"API reference","title":"API reference","text":"This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.","category":"page"},{"location":"api/","page":"API reference","title":"API reference","text":"Modules = [DFTK, DFTK.Smearing]","category":"page"},{"location":"api/#DFTK.timer","page":"API reference","title":"DFTK.timer","text":"TimerOutput object used to store DFTK timings.\n\n\n\n\n\n","category":"constant"},{"location":"api/#DFTK.AbstractArchitecture","page":"API reference","title":"DFTK.AbstractArchitecture","text":"Abstract supertype for architectures supported by DFTK.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveBands","page":"API reference","title":"DFTK.AdaptiveBands","text":"Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveDiagtol","page":"API reference","title":"DFTK.AdaptiveDiagtol","text":"Algorithm for the tolerance used for the next diagonalization. This function takes ρnext - ρin and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Applyχ0Model","page":"API reference","title":"DFTK.Applyχ0Model","text":"Full χ0 application, optionally dropping terms or disabling Sternheimer. All keyword arguments passed to apply_χ0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicLocal","page":"API reference","title":"DFTK.AtomicLocal","text":"Atomic local potential defined by model.atoms.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicNonlocal","page":"API reference","title":"DFTK.AtomicNonlocal","text":"Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. textEnergy = sum_a sum_ij sum_n f_n ψ_np_ai D_ij p_ajψ_n\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupAbinit","page":"API reference","title":"DFTK.BlowupAbinit","text":"Blow-up function as used in Abinit.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupCHV","page":"API reference","title":"DFTK.BlowupCHV","text":"Blow-up function as proposed in https://arxiv.org/abs/2210.00442 The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupIdentity","page":"API reference","title":"DFTK.BlowupIdentity","text":"Default blow-up corresponding to the standard kinetic energies.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DielectricMixing","page":"API reference","title":"DFTK.DielectricMixing","text":"We use a simplification of the Resta model DOI 10.1103/physrevb.16.2717 and set χ_0(q) = fracC_0 G^24π (1 - C_0 G^2 k_TF^2) where C_0 = 1 - ε_r with ε_r being the macroscopic relative permittivity. We neglect K_textxc, such that J^-1 frack_TF^2 - C_0 G^2ε_r k_TF^2 - C_0 G^2\n\nBy default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to ρ and ρ_textspin in the same way.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DielectricModel","page":"API reference","title":"DFTK.DielectricModel","text":"A localised dielectric model for χ_0:\n\nsqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\n\nwhere C_0 = 1 - ε_r, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DivAgradOperator","page":"API reference","title":"DFTK.DivAgradOperator","text":"Nonlocal \"divAgrad\" operator -½ (A ) where A is a scalar field on the real-space grid. The -½ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for A=1).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ElementCohenBergstresser-Tuple{Any}","page":"API reference","title":"DFTK.ElementCohenBergstresser","text":"ElementCohenBergstresser(\n key;\n lattice_constant\n) -> ElementCohenBergstresser\n\n\nElement where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).\n\nkey may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementCoulomb-Tuple{Any}","page":"API reference","title":"DFTK.ElementCoulomb","text":"ElementCoulomb(key; mass) -> ElementCoulomb\n\n\nElement interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementGaussian-Tuple{Any, Any}","page":"API reference","title":"DFTK.ElementGaussian","text":"ElementGaussian(α, L; symbol) -> ElementGaussian\n\n\nElement interacting with electrons via a Gaussian potential. Symbol is non-mandatory.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementPsp-Tuple{Any}","page":"API reference","title":"DFTK.ElementPsp","text":"ElementPsp(key; psp, mass)\n\n\nElement interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Energies","page":"API reference","title":"DFTK.Energies","text":"A simple struct to contain a vector of energies, and utilities to print them in a nice format.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Entropy","page":"API reference","title":"DFTK.Entropy","text":"Entropy term -TS, where S is the electronic entropy. Turns the energy E into the free energy F=E-TS. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Ewald","page":"API reference","title":"DFTK.Ewald","text":"Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExplicitKpoints","page":"API reference","title":"DFTK.ExplicitKpoints","text":"Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromFourier","page":"API reference","title":"DFTK.ExternalFromFourier","text":"External potential from the (unnormalized) Fourier coefficients V(G) G is passed in cartesian coordinates\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromReal","page":"API reference","title":"DFTK.ExternalFromReal","text":"External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromValues","page":"API reference","title":"DFTK.ExternalFromValues","text":"External potential given as values.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FermiTwoStage","page":"API reference","title":"DFTK.FermiTwoStage","text":"Two-stage Fermi level finding algorithm starting from a Gaussian-smearing guess.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FixedBands","page":"API reference","title":"DFTK.FixedBands","text":"In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FourierMultiplication","page":"API reference","title":"DFTK.FourierMultiplication","text":"Fourier space multiplication, like a kinetic energy term: (Hψ)(G) = multiplier(G) ψ(G).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.GPU-Union{Tuple{Type{T}}, Tuple{T}} where T<:AbstractArray","page":"API reference","title":"DFTK.GPU","text":"Construct a particular GPU architecture by passing the ArrayType\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.GaussianWannierProjection","page":"API reference","title":"DFTK.GaussianWannierProjection","text":"A Gaussian-shaped initial guess. Can be used as an approximation of an s- or σ-like orbital.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Hartree","page":"API reference","title":"DFTK.Hartree","text":"Hartree term: for a decaying potential V the energy would be\n\n1/2 ∫ρ(x)ρ(y)V(x-y) dxdy\n\nwith the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather\n\n1/2 ∫ρ(x)ρ(y) G(x-y) dx dy\n\nwhere G is the Green's function of the periodic Laplacian with zero mean (-Δ G = sum{R} 4π δR, integral of G zero on a unit cell).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.HydrogenicWannierProjection","page":"API reference","title":"DFTK.HydrogenicWannierProjection","text":"A hydrogenic initial guess.\n\nα is the diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerDosMixing","page":"API reference","title":"DFTK.KerkerDosMixing","text":"The same as KerkerMixing, but the Thomas-Fermi wavevector is computed from the current density of states at the Fermi level.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerMixing","page":"API reference","title":"DFTK.KerkerMixing","text":"Kerker mixing: J^-1 fracG^2k_TF^2 + G^2 where k_TF is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for ΔDOS_Ω is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.\n\nNotes:\n\nAbinit calls 1k_TF the dielectric screening length (parameter dielng)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kinetic","page":"API reference","title":"DFTK.Kinetic","text":"Kinetic energy: 1/2 sumn fn ∫ |∇ψn|^2 * blowup(-i∇Ψ).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kpoint","page":"API reference","title":"DFTK.Kpoint","text":"Discretization information for k-point-dependent quantities such as orbitals. More generally, a k-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LazyHcat","page":"API reference","title":"DFTK.LazyHcat","text":"Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LdosModel","page":"API reference","title":"DFTK.LdosModel","text":"Represents the LDOS-based χ_0 model\n\nχ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\n\nwhere D_textloc is the local density of states and D the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LibxcDensities-Tuple{Any, Integer, Any, Any}","page":"API reference","title":"DFTK.LibxcDensities","text":"LibxcDensities(\n basis,\n max_derivative::Integer,\n ρ,\n τ\n) -> DFTK.LibxcDensities\n\n\nCompute density in real space and its derivatives starting from ρ\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LocalNonlinearity","page":"API reference","title":"DFTK.LocalNonlinearity","text":"Local nonlinearity, with energy ∫f(ρ) where ρ is the density\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Magnetic","page":"API reference","title":"DFTK.Magnetic","text":"Magnetic term A(-i). It is assumed (but not checked) that A = 0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.MagneticFieldOperator","page":"API reference","title":"DFTK.MagneticFieldOperator","text":"Magnetic field operator A⋅(-i∇).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Model-Tuple{AtomsBase.AbstractSystem}","page":"API reference","title":"DFTK.Model","text":"Model(system::AbstractSystem; kwargs...)\n\nAtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{AbstractMatrix{T}}, Tuple{T}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,\n smearing, spin_polarization, symmetries)\n\nCreates the physical specification of a model (without any discretization information).\n\nn_electrons is taken from atoms if not specified.\n\nspin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.\n\nmagnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.\n\nsmearing is Fermi-Dirac if temperature is non-zero, none otherwise\n\nThe symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{Model}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(model; [lattice, positions, atoms, kwargs...])\nModel{T}(model; [lattice, positions, atoms, kwargs...])\n\nConstruct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.MonkhorstPack","page":"API reference","title":"DFTK.MonkhorstPack","text":"Perform BZ sampling employing a Monkhorst-Pack grid.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NbandsAlgorithm","page":"API reference","title":"DFTK.NbandsAlgorithm","text":"NbandsAlgorithm subtypes determine how many bands to compute and converge in each SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NonlocalOperator","page":"API reference","title":"DFTK.NonlocalOperator","text":"Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NoopOperator","page":"API reference","title":"DFTK.NoopOperator","text":"Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PairwisePotential-Tuple{Any, Any}","page":"API reference","title":"DFTK.PairwisePotential","text":"PairwisePotential(\n V,\n params;\n max_radius\n) -> PairwisePotential\n\n\nPairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"A plane-wave discretized Model. Normalization conventions:\n\nThings that are expressed in the G basis are normalized so that if x is the vector, then the actual function is sum_G x_G e_G with e_G(x) = e^iG x sqrt(Omega), where Omega is the unit cell volume. This is so that, eg norm(ψ) = 1 gives the correct normalization. This also holds for the density and the potentials.\nQuantities expressed on the real-space grid are in actual values.\n\nifft and fft convert between these representations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PlaneWaveBasis-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a new basis identical to basis, but with a new k-point grid, e.g. an MonkhorstPack or a ExplicitKpoints grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis-Union{Tuple{Model{T}}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PreconditionerNone","page":"API reference","title":"DFTK.PreconditionerNone","text":"No preconditioning\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PreconditionerTPA","page":"API reference","title":"DFTK.PreconditionerTPA","text":"(simplified version of) Tetter-Payne-Allan preconditioning ↑ M.P. Teter, M.C. Payne and D.C. Allan, Phys. Rev. B 40, 12255 (1989).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspCorrection","page":"API reference","title":"DFTK.PspCorrection","text":"Pseudopotential correction energy. TODO discuss the need for this.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspHgh-Tuple{Any}","page":"API reference","title":"DFTK.PspHgh","text":"PspHgh(path[, identifier, description])\n\nConstruct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PspUpf-Tuple{Any}","page":"API reference","title":"DFTK.PspUpf","text":"PspUpf(path[, identifier])\n\nConstruct a Unified Pseudopotential Format pseudopotential from file.\n\nDoes not support:\n\nFully-realtivistic / spin-orbit pseudos\nBare Coulomb / all-electron potentials\nSemilocal potentials\nUltrasoft potentials\nProjector-augmented wave potentials\nGIPAW reconstruction data\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.RealFourierOperator","page":"API reference","title":"DFTK.RealFourierOperator","text":"Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (real, fourier) They also implement mul! and Matrix(op) for exploratory use.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.RealSpaceMultiplication","page":"API reference","title":"DFTK.RealSpaceMultiplication","text":"Real space multiplication by a potential: (Hψ)(r) = V(r) ψ(r).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceDensity","page":"API reference","title":"DFTK.ScfConvergenceDensity","text":"Flag convergence by using the L2Norm of the density change in one SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceEnergy","page":"API reference","title":"DFTK.ScfConvergenceEnergy","text":"Flag convergence as soon as total energy change drops below a tolerance.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceForce","page":"API reference","title":"DFTK.ScfConvergenceForce","text":"Flag convergence on the change in cartesian force between two iterations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfDefaultCallback","page":"API reference","title":"DFTK.ScfDefaultCallback","text":"Default callback function for self_consistent_field methods, which prints a convergence table.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfSaveCheckpoints","page":"API reference","title":"DFTK.ScfSaveCheckpoints","text":"Adds checkpointing to a DFTK self-consistent field calculation. The checkpointing file is silently overwritten. Requires the package for writing the output file (usually JLD2) to be loaded.\n\nfilename: Name of the checkpointing file.\ncompress: Should compression be used on writing (rarely useful)\nsave_ψ: Should the bands also be saved (noteworthy additional cost ... use carefully)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.SimpleMixing","page":"API reference","title":"DFTK.SimpleMixing","text":"Simple mixing: J^-1 1\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.TermNoop","page":"API reference","title":"DFTK.TermNoop","text":"A term with a constant zero energy.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Xc","page":"API reference","title":"DFTK.Xc","text":"Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.χ0Mixing","page":"API reference","title":"DFTK.χ0Mixing","text":"Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).\n\n\n\n\n\n","category":"type"},{"location":"api/#AbstractFFTs.fft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.fft!","text":"fft!(\n f_fourier::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_real::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.fft-Union{Tuple{U}, Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray{U}}} where {T, U}","page":"API reference","title":"AbstractFFTs.fft","text":"fft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_real::AbstractArray{U}\n) -> Any\n\n\nfft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)\n\nPerform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.ifft!","text":"ifft!(\n f_real::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_fourier::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of ifft.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft-Tuple{PlaneWaveBasis, AbstractArray}","page":"API reference","title":"AbstractFFTs.ifft","text":"ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any\n\n\nifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)\n\nPerform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_mass-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_mass","text":"atomic_mass(el::DFTK.Element)\n\n\nReturn the atomic mass of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_symbol-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_symbol","text":"atomic_symbol(_::DFTK.Element) -> Symbol\n\n\nChemical symbol corresponding to an element\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_system","page":"API reference","title":"AtomsBase.atomic_system","text":"atomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector\n) -> AtomsBase.FlexibleSystem\natomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector,\n magnetic_moments::AbstractVector\n) -> AtomsBase.FlexibleSystem\n\n\natomic_system(model::DFTK.Model, magnetic_moments=[])\natomic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#AtomsBase.periodic_system","page":"API reference","title":"AtomsBase.periodic_system","text":"periodic_system(model::Model) -> AtomsBase.FlexibleSystem\nperiodic_system(\n model::Model,\n magnetic_moments\n) -> AtomsBase.FlexibleSystem\n\n\nperiodic_system(model::DFTK.Model, magnetic_moments=[])\nperiodic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#Brillouin.KPaths.irrfbz_path","page":"API reference","title":"Brillouin.KPaths.irrfbz_path","text":"irrfbz_path(model::Model) -> Brillouin.KPaths.KPath\nirrfbz_path(\n model::Model,\n magnetic_moments;\n dim,\n space_group_number\n) -> Brillouin.KPaths.KPath\n\n\nExtract the high-symmetry k-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the k-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.\n\nIf the cell is a supercell of a smaller primitive cell, the standard k-path of the associated primitive cell is returned. So, the high-symmetry k points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.\n\nThe dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).\n\nDue to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.CROP","page":"API reference","title":"DFTK.CROP","text":"CROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real\n) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}\nCROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real,\n warming\n) -> NamedTuple{(:fixpoint, :converged), _A} where _A<:Tuple{Any, Any}\n\n\nCROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.G_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}\n\n\nG_vectors(basis::PlaneWaveBasis)\nG_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of wave vectors G in reduced (integer) coordinates of a basis or a k-point kpt.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors-Tuple{Union{Tuple, AbstractVector}}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any\n\n\nG_vectors([architecture=AbstractArchitecture], fft_size::Tuple)\n\nThe wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors_cart","text":"G_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nG_vectors_cart(basis::PlaneWaveBasis)\nG_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G vectors of a given basis or kpt, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors","text":"Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any\n\n\nGplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_cart-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_cart","text":"Gplusk_vectors_cart(\n basis::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nGplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_in_supercell-Tuple{PlaneWaveBasis, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_in_supercell","text":"Gplusk_vectors_in_supercell(\n basis::PlaneWaveBasis,\n basis_supercell::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nMaps all k+G vectors of an given basis as G vectors of the supercell basis, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.HybridMixing-Tuple{}","page":"API reference","title":"DFTK.HybridMixing","text":"HybridMixing(\n;\n εr,\n kTF,\n localization,\n adjust_temperature,\n kwargs...\n) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D) \n + sqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\nendaligned\n\nwhere C_0 = 1 - ε_r, D_textloc is the local density of states, D is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020 arXiv:2009.01665\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.IncreaseMixingTemperature-Tuple{}","page":"API reference","title":"DFTK.IncreaseMixingTemperature","text":"IncreaseMixingTemperature(\n;\n factor,\n above_ρdiff,\n temperature_max\n) -> DFTK.var\"#callback#686\"{DFTK.var\"#callback#685#687\"{Int64, Float64}}\n\n\nIncrease the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LdosMixing-Tuple{}","page":"API reference","title":"DFTK.LdosMixing","text":"LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\nendaligned\n\nwhere D_textloc is the local density of states, D is the density of states. For details see Herbst, Levitt 2020 arXiv:2009.01665.\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfAcceptImprovingStep-Tuple{}","page":"API reference","title":"DFTK.ScfAcceptImprovingStep","text":"ScfAcceptImprovingStep(\n;\n max_energy_change,\n max_relative_residual\n) -> DFTK.var\"#accept_step#773\"{Float64, Float64}\n\n\nAccept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_K-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.apply_K","text":"apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any\n\n\napply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)\n\nCompute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_kernel-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.apply_kernel","text":"apply_kernel(\n basis::PlaneWaveBasis,\n δρ;\n RPA,\n kwargs...\n) -> Any\n\n\napply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)\n\nComputes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any, AbstractVecOrMat}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(\n symop::SymOp,\n basis,\n kpoint,\n ψk::AbstractVecOrMat\n) -> Tuple{Any, Any}\n\n\nApply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new k-point).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any\n\n\nApply a symmetry operation to a density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_Ω-Tuple{Any, Any, Hamiltonian, Any}","page":"API reference","title":"DFTK.apply_Ω","text":"apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any\n\n\napply_Ω(δψ, ψ, H::Hamiltonian, Λ)\n\nCompute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_χ0-Union{Tuple{TδV}, Tuple{T}, Tuple{Any, Any, Any, T, Any, AbstractArray{TδV}}} where {T, TδV}","page":"API reference","title":"DFTK.apply_χ0","text":"apply_χ0(\n ham,\n ψ,\n occupation,\n εF,\n eigenvalues,\n δV::AbstractArray{TδV};\n occupation_threshold,\n q,\n kwargs_sternheimer...\n) -> Any\n\n\nGet the density variation δρ corresponding to a potential variation δV.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.attach_psp-Tuple{AtomsBase.AbstractSystem, AbstractDict{Symbol, String}}","page":"API reference","title":"DFTK.attach_psp","text":"attach_psp(\n system::AtomsBase.AbstractSystem,\n pspmap::AbstractDict{Symbol, String}\n) -> AtomsBase.FlexibleSystem\n\n\nattach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})\nattach_psp(system::AbstractSystem; psps::String...)\n\nReturn a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.\n\nExamples\n\nSelect pseudopotentials for all silicon and oxygen atoms in the system.\n\njulia> attach_psp(system, Dict(:Si => \"hgh/lda/si-q4\", :O => \"hgh/lda/o-q6\")\n\nSame thing but using the kwargs syntax:\n\njulia> attach_psp(system, Si=\"hgh/lda/si-q4\", O=\"hgh/lda/o-q6\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.band_data_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.band_data_to_dict","text":"band_data_to_dict(\n band_data::NamedTuple;\n kwargs...\n) -> Dict{String, Any}\n\n\nConvert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns meaningful data. All other processors still return a dictionary (to simplify code in calling locations), but the data may be dummy.\n\nSome details on the conventions for the returned data:\n\nεF: Computed Fermi level (if present in band_data)\nlabels: A mapping of high-symmetry k-Point labels to the index in the \"kcoords\" vector of the corresponding k-Point.\neigenvalues, eigenvalues_error, occupation, residual_norms: (n_bands, n_kpoints, n_spin) arrays of the respective data.\nn_iter: (n_kpoints, n_spin) array of the number of iterations the diagonalization routine required.\nkpt_max_n_G: Maximal number of G-vectors used for any k-point.\nkpt_n_G_vectors: (n_kpoints, n_spin) array, the number of valid G-vectors for each k-point, i.e. the extend along the first axis of ψ where data is valid.\nkpt_G_vectors: (3, max_n_G, n_kpoints, n_spin) array of the integer (reduced) coordinates of the G-points used for each k-point.\nψ: (max_n_G, n_bands, n_kpoints, n_spin) arrays where max_n_G is the maximal number of G-vectors used for any k-point. The data is zero-padded, i.e. for k-points which have less G-vectors than maxnG, then there are tailing zeros.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_fft_plans!-Tuple{Array{ComplexF64}}","page":"API reference","title":"DFTK.build_fft_plans!","text":"build_fft_plans!(\n tmp::Array{ComplexF64}\n) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}\n\n\nPlan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_form_factors-Tuple{Any, Array}","page":"API reference","title":"DFTK.build_form_factors","text":"build_form_factors(psp, qs::Array) -> Matrix\n\n\nBuild form factors (Fourier transforms of projectors) for an atom centered at 0.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_projection_vectors_-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, Any, Any}} where T","page":"API reference","title":"DFTK.build_projection_vectors_","text":"build_projection_vectors_(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt::Kpoint,\n psps,\n psp_positions\n) -> Any\n\n\nBuild projection vectors for a atoms array generated by term_nonlocal\n\nbeginaligned\nH_rm at = sum_ij C_ij ketp_i brap_j \nH_rm per = sum_R sum_ij C_ij ketp_i(x-R) brap_j(x-R)\nendaligned\n\nbeginaligned\nbrakete_k(G) middle H_rm pere_k(G)\n = ldots \n = frac1Ω sum_ij C_ij hat p_i(k+G) hat p_j^*(k+G)\nendaligned\n\nwhere hat p_i(q) = _ℝ^3 p_i(r) e^-iqr dr.\n\nWe store frac1sqrt Ω hat p_i(k+G) in proj_vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Tuple{NamedTuple}","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(scfres::NamedTuple) -> Any\n\n\nTranspose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:\n\nbasis_supercell and ψ_supercell are computed by the routines above.\nThe supercell occupations vector is the concatenation of all input occupations vectors.\nThe supercell density is computed with supercell occupations and ψ_supercell.\nSupercell energies are the multiplication of input energies by the number of unit cells in the supercell.\n\nOther parameters stay untouched.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n basis::PlaneWaveBasis{T, VT} where VT<:Real\n) -> PlaneWaveBasis\n\n\nConstruct a plane-wave basis whose unit cell is the supercell associated to an input basis k-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T<:Real","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n ψ,\n basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,\n basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real\n) -> Any\n\n\nRe-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at Γ-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cg!-Union{Tuple{T}, Tuple{AbstractVector{T}, LinearMaps.LinearMap{T}, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.cg!","text":"cg!(\n x::AbstractArray{T, 1},\n A::LinearMaps.LinearMap{T},\n b::AbstractArray{T, 1};\n precon,\n proj,\n callback,\n tol,\n maxiter,\n miniter\n) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), _A} where _A<:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}\n\n\nImplementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_ionic-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_ionic","text":"charge_ionic(el::DFTK.Element) -> Int64\n\n\nReturn the total ionic charge of an atom type (nuclear charge - core electrons)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_nuclear-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_nuclear","text":"charge_nuclear(_::DFTK.Element) -> Int64\n\n\nReturn the total nuclear charge of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cis2pi-Tuple{Any}","page":"API reference","title":"DFTK.cis2pi","text":"cis2pi(x) -> Any\n\n\nFunction to compute exp(2π i x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_amn_kpoint-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_amn_kpoint","text":"compute_amn_kpoint(\n basis::PlaneWaveBasis,\n kpt,\n ψk,\n projections,\n n_bands\n) -> Any\n\n\nCompute the starting matrix for Wannierization.\n\nWannierization searches for a unitary matrix U_m_n. As a starting point for the search, we can provide an initial guess function g for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called A_k_mn, and is computed as follows: A_k_mn = langle ψ_m^k g^textper_n rangle. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.\n\nCenters are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.\n\nGiven an orbital g_n, the periodized orbital is defined by : g^per_n = sumlimits_R in rm lattice g_n( cdot - R). The Fourier coefficient of g^per_n at any G is given by the value of the Fourier transform of g_n in G.\n\nEach projection is a callable object that accepts the basis and some qpoints as an argument, and returns the Fourier transform of g_n at the qpoints.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{Any, Brillouin.KPaths.KPath}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis_or_scfres,\n kpath::Brillouin.KPaths.KPath;\n kline_density,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization, :kinter)}\n\n\nCompute band data along a specific Brillouin.KPath using a kline_density, the number of k-points per inverse bohrs (i.e. overall in units of length).\n\nIf not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{NamedTuple, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n scfres::NamedTuple,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Any, Any, Vector}\n\n\nCompute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis::PlaneWaveBasis,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n n_extra,\n ρ,\n εF,\n eigensolver,\n tol,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), _A} where _A<:Tuple{PlaneWaveBasis, Any, Any, Any, Nothing, Nothing, Vector}\n\n\nCompute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:\n\nkgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.\ntol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.\neigensolver: The diagonalisation method to be employed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_current-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_current","text":"compute_current(\n basis::PlaneWaveBasis,\n ψ,\n occupation\n) -> Vector\n\n\nComputes the probability (not charge) current, ∑ fn Im(ψn* ∇ψn)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_density","text":"compute_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n occupation_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\ncompute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)\n\nCompute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per k-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dos-Tuple{Any, Any, Any}","page":"API reference","title":"DFTK.compute_dos","text":"compute_dos(\n ε,\n basis,\n eigenvalues;\n smearing,\n temperature\n) -> Any\n\n\nTotal density of states at energy ε\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_dynmat","text":"compute_dynmat(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n q,\n ρ,\n ham,\n εF,\n eigenvalues,\n kwargs...\n) -> Any\n\n\nCompute the dynamical matrix in the form of a 3n_rm atoms3n_rm atoms tensor in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_dynmat_cart","text":"compute_dynmat_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCartesian form of compute_dynmat.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_fft_size-Union{Tuple{T}, Tuple{Model{T}, Any}, Tuple{Model{T}, Any, Any}} where T","page":"API reference","title":"DFTK.compute_fft_size","text":"compute_fft_size(\n model::Model{T},\n Ecut\n) -> Tuple{Vararg{Any, _A}} where _A\ncompute_fft_size(\n model::Model{T},\n Ecut,\n kgrid;\n ensure_smallprimes,\n algorithm,\n factors,\n kwargs...\n) -> Tuple{Vararg{Any, _A}} where _A\n\n\nDetermine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).\n\nOptionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.\n\nThe function will determine the smallest parallelepiped containing the wave vectors G^22 leq E_textcut textsupersampling^2. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.\n\nIf factors is not empty, ensure that the resulting fft_size contains all the factors\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_forces","text":"compute_forces(scfres) -> Any\n\n\nCompute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_forces_cart","text":"compute_forces_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCompute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_inverse_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_inverse_lattice","text":"compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the inverse of the lattice. Takes special care of 1D or 2D cases.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_kernel-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_kernel","text":"compute_kernel(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n kwargs...\n) -> Any\n\n\ncompute_kernel(basis::PlaneWaveBasis; kwargs...)\n\nComputes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks\n\nleft(beginarraycc\n K_αα K_αβ\n K_βα K_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_ldos-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_ldos","text":"compute_ldos(\n ε,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues,\n ψ;\n smearing,\n temperature,\n weight_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\nLocal density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, Number}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n εF::Number;\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}\n\n\nCompute occupation given eigenvalues and Fermi level\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, AbstractFermiAlgorithm}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector\n) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}\ncompute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n fermialg::AbstractFermiAlgorithm;\n tol_n_elec,\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), _A} where _A<:Tuple{Any, Number}\n\n\nCompute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_recip_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_recip_lattice","text":"compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_stresses_cart-Tuple{Any}","page":"API reference","title":"DFTK.compute_stresses_cart","text":"compute_stresses_cart(scfres) -> Any\n\n\nCompute the stresses of an obtained SCF solution. The stress tensor is given by\n\nleft( beginarrayccc\nσ_xx σ_xy σ_xz \nσ_yx σ_yy σ_yz \nσ_zx σ_zy σ_zz\nright) = frac1Ω left fracdE (I+ϵ) * LdMright_ϵ=0\n\nwhere ϵ is the strain. See O. Nielsen, R. Martin Phys. Rev. B. 32, 3792 (1985) for details. In Voigt notation one would use the vector σ_xx σ_yy σ_zz σ_zy σ_zx σ_yx.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint}} where T","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_out::Kpoint\n) -> Any\n\n\nReturn a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nReturn a list of sparse matrices (one per k-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_unit_cell_volume-Tuple{Any}","page":"API reference","title":"DFTK.compute_unit_cell_volume","text":"compute_unit_cell_volume(lattice) -> Any\n\n\nCompute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δHψ_sα-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_δHψ_sα","text":"compute_δHψ_sα(\n basis::PlaneWaveBasis,\n ψ,\n q,\n s,\n α;\n kwargs...\n) -> Any\n\n\nAssemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δocc!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.compute_δocc!","text":"compute_δocc!(\n δocc,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n εF,\n ε,\n δHψ\n) -> NamedTuple{(:δocc, :δεF), _A} where _A<:Tuple{Any, Any}\n\n\nCompute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δψ!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 5}}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.compute_δψ!","text":"compute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ\n)\ncompute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ,\n ε_minus_q;\n ψ_extra,\n q,\n kwargs_sternheimer...\n)\n\n\nPerform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_χ0-Tuple{Any}","page":"API reference","title":"DFTK.compute_χ0","text":"compute_χ0(ham; temperature) -> Any\n\n\nCompute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:\n\nleft(beginarraycc\n (χ_0)_αα (χ_0)_αβ \n (χ_0)_βα (χ_0)_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cos2pi-Tuple{Any}","page":"API reference","title":"DFTK.cos2pi","text":"cos2pi(x) -> Any\n\n\nFunction to compute cos(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{Any, Any}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psps, psp_positions) -> Any\n\n\ncount_n_proj(psps, psp_positions)\n\nNumber of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any\n\n\ncount_n_proj(psp, l)\n\nNumber of projector functions for angular momentum l, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj(psp)\n\nNumber of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(\n psp::DFTK.NormConservingPsp,\n l::Integer\n) -> Any\n\n\ncount_n_proj_radial(psp, l)\n\nNumber of projector radial functions at angular momentum l.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj_radial(psp)\n\nNumber of projector radial functions at all angular momenta up to psp.lmax.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.create_supercell-NTuple{4, Any}","page":"API reference","title":"DFTK.create_supercell","text":"create_supercell(\n lattice,\n atoms,\n positions,\n supercell_size\n) -> NamedTuple{(:lattice, :atoms, :positions), _A} where _A<:Tuple{Any, Any, Any}\n\n\nConstruct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.datadir_psp-Tuple{}","page":"API reference","title":"DFTK.datadir_psp","text":"datadir_psp() -> String\n\n\nReturn the data directory with pseudopotential files\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_fermialg-Tuple{DFTK.Smearing.SmearingFunction}","page":"API reference","title":"DFTK.default_fermialg","text":"default_fermialg(\n _::DFTK.Smearing.SmearingFunction\n) -> FermiBisection\n\n\nDefault selection of a Fermi level determination algorithm\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_symmetries-NTuple{6, Any}","page":"API reference","title":"DFTK.default_symmetries","text":"default_symmetries(\n lattice,\n atoms,\n positions,\n magnetic_moments,\n spin_polarization,\n terms;\n tol_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nDefault logic to determine the symmetry operations to be used in the model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_wannier_centers-Tuple{Any}","page":"API reference","title":"DFTK.default_wannier_centers","text":"default_wannier_centers(n_wannier) -> Any\n\n\nDefault random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.determine_spin_polarization-Tuple{Any}","page":"API reference","title":"DFTK.determine_spin_polarization","text":"determine_spin_polarization(magnetic_moments) -> Symbol\n\n\n:none if no element has a magnetic moment, else :collinear or :full.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diagonalize_all_kblocks-Tuple{Any, Hamiltonian, Int64}","page":"API reference","title":"DFTK.diagonalize_all_kblocks","text":"diagonalize_all_kblocks(\n eigensolver,\n ham::Hamiltonian,\n nev_per_kpoint::Int64;\n ψguess,\n prec_type,\n interpolate_kpoints,\n tol,\n miniter,\n maxiter,\n n_conv_check\n) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}\n\n\nFunction for diagonalising each k-Point blow of ham one step at a time. Some logic for interpolating between k-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single k-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diameter-Tuple{AbstractMatrix}","page":"API reference","title":"DFTK.diameter","text":"diameter(lattice::AbstractMatrix) -> Any\n\n\nCompute the diameter of the unit cell\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.direct_minimization-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.direct_minimization","text":"direct_minimization(\n basis::PlaneWaveBasis;\n kwargs...\n) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :ψ, :eigenvalues, :occupation, :εF, :optim_res), _A} where _A<:Tuple{Any, PlaneWaveBasis, Any, Bool, Any, Any, Vector{Any}, Vector, Nothing, Optim.MultivariateOptimizationResults{Optim.LBFGS{DFTK.DMPreconditioner, LineSearches.InitialStatic{Float64}, LineSearches.BackTracking{Float64, Int64}, typeof(DFTK.precondprep!)}, _A, _B, _C, _D, Bool} where {_A, _B, _C, _D}}\n\n\nComputes the ground state by direct minimization. kwargs... are passed to Optim.Options(). Note that the resulting ψ are not necessarily eigenvectors of the Hamiltonian.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.disable_threading-Tuple{}","page":"API reference","title":"DFTK.disable_threading","text":"disable_threading() -> Union{Nothing, Bool}\n\n\nConvenience function to disable all threading in DFTK and assert that Julia threading is off as well.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.divergence_real-Tuple{Any, Any}","page":"API reference","title":"DFTK.divergence_real","text":"divergence_real(operand, basis) -> Any\n\n\nCompute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, AbstractArray, Any}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges::AbstractArray,\n positions;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n S,\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n η\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nCompute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.\n\nFor now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n S,\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n max_radius\n) -> NamedTuple{(:energy, :forces), _A} where _A<:Tuple{Any, Any}\n\n\nCompute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).\n\nThe potential is expected to decrease quickly at infinity.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_psp_correction-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.energy_psp_correction","text":"energy_psp_correction(\n lattice::AbstractArray{T, 2},\n atoms,\n atom_groups\n) -> Any\n\n\nCompute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.enforce_real!-Tuple{Any, PlaneWaveBasis}","page":"API reference","title":"DFTK.enforce_real!","text":"enforce_real!(\n fourier_coeffs,\n basis::PlaneWaveBasis\n) -> AbstractArray\n\n\nEnsure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.estimate_integer_lattice_bounds-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.estimate_integer_lattice_bounds","text":"estimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ\n) -> Any\nestimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ,\n shift;\n tol\n) -> Any\n\n\nEstimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_fourier-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_fourier","text":"eval_psp_density_core_fourier(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Real\n\n\neval_psp_density_core_fourier(psp, q)\n\nEvaluate the atomic core charge density in reciprocal space: ρval(q) = ∫{R^3} ρcore(r) e^{-iqr} dr = 4π ∫{R+} ρcore(r) sin(qr)/qr r^2 dr\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_real-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_real","text":"eval_psp_density_core_real(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Any\n\n\neval_psp_density_core_real(psp, r)\n\nEvaluate the atomic core charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_fourier","text":"eval_psp_density_valence_fourier(\n psp::DFTK.NormConservingPsp,\n q::AbstractVector\n) -> Real\n\n\neval_psp_density_valence_fourier(psp, q)\n\nEvaluate the atomic valence charge density in reciprocal space: ρval(q) = ∫{R^3} ρval(r) e^{-iqr} dr = 4π ∫{R+} ρval(r) sin(qr)/qr r^2 dr\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_real","text":"eval_psp_density_valence_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_density_valence_real(psp, r)\n\nEvaluate the atomic valence charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_energy_correction","page":"API reference","title":"DFTK.eval_psp_energy_correction","text":"eval_psp_energy_correction([T=Float64,] psp, n_electrons)\n\nEvaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.\n\nNotice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.\n\nThe energy correction is defined as the limit of the Fourier-transform of the local potential as q to 0, using the same correction as in the Fourier-transform of the local potential: math \\lim_{q \\to 0} 4π N_{\\rm elec} ∫_{ℝ_+} (V(r) - C(r)) \\frac{\\sin(qr)}{qr} r^2 dr + F[C(r)] = 4π N_{\\rm elec} ∫_{ℝ_+} (V(r) + Z/r) r^2 dr\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.eval_psp_local_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_fourier","text":"eval_psp_local_fourier(\n psp::DFTK.NormConservingPsp,\n q::AbstractVector\n) -> Any\n\n\neval_psp_local_fourier(psp, q)\n\nEvaluate the local part of the pseudopotential in reciprocal space:\n\nbeginaligned\nV_rm loc(q) = _ℝ^3 V_rm loc(r) e^-iqr dr \n = 4π _ℝ_+ V_rm loc(r) fracsin(qr)q r dr\nendaligned\n\nIn practice, the local potential should be corrected using a Coulomb-like term C(r) = -Zr to remove the long-range tail of V_rm loc(r) from the integral:\n\nbeginaligned\nV_rm loc(q) = _ℝ^3 (V_rm loc(r) - C(r)) e^-iqr dr + FC(r) \n = 4π _ℝ_+ (V_rm loc(r) + Zr) fracsin(qr)qr r^2 dr - Zq^2\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_local_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_real","text":"eval_psp_local_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_local_real(psp, r)\n\nEvaluate the local part of the pseudopotential in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_fourier","text":"eval_psp_projector_fourier(\n psp::DFTK.NormConservingPsp,\n q::AbstractVector\n)\n\n\neval_psp_projector_fourier(psp, i, l, q)\n\nEvaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus q:\n\nbeginaligned\np(q) = _ℝ^3 p_il(r) e^-iqr dr \n = 4π _ℝ_+ r^2 p_il(r) j_l(qr) dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_real-Tuple{DFTK.NormConservingPsp, Any, Any, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_real","text":"eval_psp_projector_real(\n psp::DFTK.NormConservingPsp,\n i,\n l,\n r::AbstractVector\n) -> Any\n\n\neval_psp_projector_real(psp, i, l, r)\n\nEvaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.filled_occupation-Tuple{Any}","page":"API reference","title":"DFTK.filled_occupation","text":"filled_occupation(model) -> Int64\n\n\nMaximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.find_equivalent_kpt-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.find_equivalent_kpt","text":"find_equivalent_kpt(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kcoord,\n spin;\n tol\n) -> NamedTuple{(:index, :ΔG), _A} where _A<:Tuple{Int64, Any}\n\n\nFind the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.gather_kpts","text":"gather_kpts(\n basis::PlaneWaveBasis\n) -> Union{Nothing, PlaneWaveBasis}\n\n\nGather the distributed k-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only for debugging or to extract data for serialisation to disk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts_block!-Union{Tuple{A}, Tuple{Any, PlaneWaveBasis, AbstractVector{A}}} where A","page":"API reference","title":"DFTK.gather_kpts_block!","text":"gather_kpts_block!(\n dest,\n basis::PlaneWaveBasis,\n kdata::AbstractArray{A, 1}\n) -> Any\n\n\nGather the distributed data of a quantity depending on k-Points on the master process and save it in dest as a dense (size(kdata[1])..., n_kpoints) array. On the other (non-master) processes nothing is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gaussian_valence_charge_density_fourier-Union{Tuple{T}, Tuple{DFTK.Element, T}} where T<:Real","page":"API reference","title":"DFTK.gaussian_valence_charge_density_fourier","text":"gaussian_valence_charge_density_fourier(\n el::DFTK.Element,\n q::Real\n) -> Real\n\n\nGaussian valence charge density using Abinit's coefficient table, in Fourier space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.guess_density","page":"API reference","title":"DFTK.guess_density","text":"guess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity\n) -> Any\nguess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity,\n magnetic_moments;\n n_electrons\n) -> Any\n\n\nguess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,\n magnetic_moments=[]; n_electrons=basis.model.n_electrons)\n\nBuild a superposition of atomic densities (SAD) guess density or a rarndom guess density.\n\nThe guess atomic densities are taken as one of the following depending on the input method:\n\n-RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:\n\nhatρ(G) = Z_mathrmvalence expleft(-(2π textlength G)^2right)\n\nValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the\n\npseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.\n\nWhen magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of μ_B.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.hamiltonian_with_total_potential-Tuple{Hamiltonian, Any}","page":"API reference","title":"DFTK.hamiltonian_with_total_potential","text":"hamiltonian_with_total_potential(\n ham::Hamiltonian,\n V\n) -> Hamiltonian\n\n\nReturns a new Hamiltonian with local potential replaced by the given one\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.hankel-Union{Tuple{T}, Tuple{AbstractVector, AbstractVector, Integer, T}} where T<:Real","page":"API reference","title":"DFTK.hankel","text":"hankel(\n r::AbstractVector,\n r2_f::AbstractVector,\n l::Integer,\n q::Real\n) -> Real\n\n\nhankel(r, r2_f, l, q)\n\nCompute the Hankel transform\n\n Hf = 4pi int_0^infty r f(r) j_l(qr) r dr\n\nThe integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate q.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.has_core_density-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.has_core_density","text":"has_core_density(_::DFTK.Element) -> Any\n\n\nCheck presence of model core charge density (non-linear core correction).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.index_G_vectors-Tuple{Tuple, AbstractVector{<:Integer}}","page":"API reference","title":"DFTK.index_G_vectors","text":"index_G_vectors(\n fft_size::Tuple,\n G::AbstractVector{<:Integer}\n) -> Any\n\n\nReturn the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Tuple{Any, PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in,\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Any\n\n\nInterpolate a function expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_kpoint-Tuple{AbstractVecOrMat, PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.interpolate_kpoint","text":"interpolate_kpoint(\n data_in::AbstractVecOrMat,\n basis_in::PlaneWaveBasis,\n kpoint_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpoint_out::Kpoint\n) -> Any\n\n\nInterpolate some data from one k-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irfft-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray}} where T","page":"API reference","title":"DFTK.irfft","text":"irfft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_fourier::AbstractArray\n) -> Any\n\n\nPerform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irreducible_kcoords-Tuple{MonkhorstPack, AbstractVector{<:SymOp}}","page":"API reference","title":"DFTK.irreducible_kcoords","text":"irreducible_kcoords(\n kgrid::MonkhorstPack,\n symmetries::AbstractVector{<:SymOp};\n check_symmetry\n) -> Union{NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, Vector{Float64}}}, NamedTuple{(:kcoords, :kweights), Tuple{Vector{StaticArraysCore.SVector{3, Float64}}, Vector{Float64}}}}\n\n\nConstruct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.is_metal-Tuple{Any, Any}","page":"API reference","title":"DFTK.is_metal","text":"is_metal(eigenvalues, εF; tol) -> Bool\n\n\nis_metal(eigenvalues, εF; tol)\n\nDetermine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.k_to_equivalent_kpq_permutation-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.k_to_equivalent_kpq_permutation","text":"k_to_equivalent_kpq_permutation(\n basis::PlaneWaveBasis,\n qcoord\n) -> Any\n\n\nReturn the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_maximal_spacing-Tuple{Any, Any}","page":"API reference","title":"DFTK.kgrid_from_maximal_spacing","text":"kgrid_from_maximal_spacing(\n lattice,\n spacing;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nBuild a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around 2π * 004 AA^-1).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_minimal_n_kpoints-Tuple{Any, Integer}","page":"API reference","title":"DFTK.kgrid_from_minimal_n_kpoints","text":"kgrid_from_minimal_n_kpoints(\n lattice,\n n_kpoints::Integer;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nSelects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of k-points are used. The distribution of k-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpath_get_kcoords-Union{Tuple{Brillouin.KPaths.KPathInterpolant{D}}, Tuple{D}} where D","page":"API reference","title":"DFTK.kpath_get_kcoords","text":"kpath_get_kcoords(\n kinter::Brillouin.KPaths.KPathInterpolant{D}\n) -> Any\n\n\nReturn kpoint coordinates in reduced coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpq_equivalent_blochwave_to_kpq-NTuple{4, Any}","page":"API reference","title":"DFTK.kpq_equivalent_blochwave_to_kpq","text":"kpq_equivalent_blochwave_to_kpq(\n basis,\n kpt,\n q,\n ψk_plus_q_equivalent\n) -> NamedTuple{(:kpt, :ψk), _A} where _A<:Tuple{Kpoint, Any}\n\n\nCreate the Fourier expansion of ψ_k+q from ψ_k+q, where k+q is in basis.kpoints. while k+q may or may not be inside.\n\nIf ΔG k+q - (k+q), then we have that\n\n _G hatu_k+q(G) e^i(k+q+G)r = _G hatu_k+q(G-ΔG) e^i(k+q+ΔG+G)r\n\nhence\n\n u_k+q(G) = u_k+q(G + ΔG)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.krange_spin-Tuple{PlaneWaveBasis, Integer}","page":"API reference","title":"DFTK.krange_spin","text":"krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any\n\n\nReturn the index range of k-points that have a particular spin component.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kwargs_scf_checkpoints-Tuple{DFTK.AbstractBasis}","page":"API reference","title":"DFTK.kwargs_scf_checkpoints","text":"kwargs_scf_checkpoints(\n basis::DFTK.AbstractBasis;\n filename,\n callback,\n diagtolalg,\n ρ,\n ψ,\n save_ψ,\n kwargs...\n) -> NamedTuple{(:callback, :diagtolalg, :ψ, :ρ), _A} where _A<:Tuple{ComposedFunction{ScfDefaultCallback, ScfSaveCheckpoints}, AdaptiveDiagtol, Any, Any}\n\n\nTransparently handle checkpointing by either returning kwargs for self_consistent_field, which start checkpointing (if no checkpoint file is present) or that continue a checkpointed run (if a checkpoint file can be loaded). filename is the location where the checkpoint is saved, save_ψ determines whether orbitals are saved in the checkpoint as well. The latter is discouraged, since generally slow.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.list_psp","page":"API reference","title":"DFTK.list_psp","text":"list_psp() -> Any\nlist_psp(element; family, functional, core) -> Any\n\n\nlist_psp(element; functional, family, core)\n\nList the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.\n\nExamples\n\njulia> list_psp(; family=\"hgh\")\n\nwill list all HGH-type pseudopotentials and\n\njulia> list_psp(; family=\"hgh\", functional=\"lda\")\n\nwill only list those for LDA (also known as Pade in this context) and\n\njulia> list_psp(:O, core=:semicore)\n\nwill list all oxygen semicore pseudopotentials known to DFTK.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.load_psp-Tuple{AbstractString}","page":"API reference","title":"DFTK.load_psp","text":"load_psp(\n key::AbstractString;\n kwargs...\n) -> Union{PspHgh{Float64}, PspUpf}\n\n\nLoad a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.load_scfres","page":"API reference","title":"DFTK.load_scfres","text":"load_scfres(filename::AbstractString) -> Any\nload_scfres(\n filename::AbstractString,\n basis;\n skip_hamiltonian,\n strict\n) -> Any\n\n\nLoad back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.\n\nIf basis is nothing, the basis is also loaded and reconstructed from the file, in which case architecture=CPU(). If a basis is passed, this one is used, which can be used to continue computation on a slightly different model or to avoid the cost of rebuilding the basis. If the stored basis and the passed basis are inconsistent (e.g. different FFT size, Ecut, k-points etc.) the load_scfres will error out.\n\nBy default the energies and ham (Hamiltonian object) are recomputed. To avoid this, set skip_hamiltonian=true. On errors the routine exits unless strict=false in which case it tries to recover from the file as much data as it can, but then the resulting scfres might not be fully consistent.\n\nwarning: No compatibility guarantees\nNo guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions (including patch versions) or stop working / be removed in the future.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.model_DFT-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}, Xc}","page":"API reference","title":"DFTK.model_DFT","text":"model_DFT(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector},\n xc::Xc;\n extra_terms,\n kwargs...\n) -> Model\n\n\nBuild a DFT model from the specified atoms, with the specified functionals.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_LDA-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_LDA","text":"model_LDA(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an LDA model (Perdew & Wang parametrization) from the specified atoms. DOI:10.1103/PhysRevB.45.13244\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_PBE-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_PBE","text":"model_PBE(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an PBE-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.77.3865\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_SCAN-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_SCAN","text":"model_SCAN(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild a SCAN meta-GGA model from the specified atoms. DOI:10.1103/PhysRevLett.115.036402\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_atomic-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_atomic","text":"model_atomic(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n extra_terms,\n kinetic_blowup,\n kwargs...\n) -> Model\n\n\nConvenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.mpi_nprocs","page":"API reference","title":"DFTK.mpi_nprocs","text":"mpi_nprocs() -> Int64\nmpi_nprocs(comm) -> Int64\n\n\nNumber of processors used in MPI. Can be called without ensuring initialization.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.multiply_ψ_by_blochwave-Tuple{PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.multiply_ψ_by_blochwave","text":"multiply_ψ_by_blochwave(\n basis::PlaneWaveBasis,\n ψ,\n f_real,\n q\n) -> Any\n\n\nmultiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)\n\nReturn the Fourier coefficients for the Bloch waves f^rm real_q ψ_k-q in an element of basis.kpoints equivalent to k-q.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_core-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_core","text":"n_elec_core(el::DFTK.Element) -> Any\n\n\nReturn the number of core electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_valence-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_valence","text":"n_elec_valence(el::DFTK.Element) -> Any\n\n\nReturn the number of valence electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_electrons_from_atoms-Tuple{Any}","page":"API reference","title":"DFTK.n_electrons_from_atoms","text":"n_electrons_from_atoms(atoms) -> Any\n\n\nNumber of valence electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.newton-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.newton","text":"newton(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ0;\n tol,\n tol_cg,\n maxiter,\n callback,\n is_converged\n) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm, :runtime_ns), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String, UInt64}\n\n\nnewton(basis::PlaneWaveBasis{T}, ψ0;\n tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),\n is_converged=ScfConvergenceDensity(tol))\n\nNewton algorithm. Be careful that the starting point needs to be not too far from the solution.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_compatible_fft_size-Tuple{Int64}","page":"API reference","title":"DFTK.next_compatible_fft_size","text":"next_compatible_fft_size(\n size::Int64;\n smallprimes,\n factors\n) -> Int64\n\n\nFind the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_density","page":"API reference","title":"DFTK.next_density","text":"next_density(\n ham::Hamiltonian\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Float64}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm,\n fermialg::AbstractFermiAlgorithm;\n eigensolver,\n ψ,\n eigenvalues,\n occupation,\n kwargs...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), _A} where _A<:Tuple{Vector, Vector, Any, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), _A} where _A<:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}, Int64, Any}\n\n\nObtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.norm2-Tuple{Any}","page":"API reference","title":"DFTK.norm2","text":"norm2(G) -> Any\n\n\nSquare of the ℓ²-norm.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.norm_cplx-Tuple{Any}","page":"API reference","title":"DFTK.norm_cplx","text":"norm_cplx(x) -> Any\n\n\nComplex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.normalize_kpoint_coordinate-Tuple{Real}","page":"API reference","title":"DFTK.normalize_kpoint_coordinate","text":"normalize_kpoint_coordinate(x::Real) -> Any\n\n\nBring k-point coordinates into the range [-0.5, 0.5)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.overlap_Mmn_k_kpb-Tuple{PlaneWaveBasis, Vararg{Any, 5}}","page":"API reference","title":"DFTK.overlap_Mmn_k_kpb","text":"overlap_Mmn_k_kpb(\n basis::PlaneWaveBasis,\n ψ,\n ik,\n ikpb,\n G_shift,\n n_bands\n) -> Any\n\n\nComputes the matrix M^kb_mn = langle u_mk u_nk+b rangle for given k, kpb = k+b.\n\nG_shift is the \"shifting\" vector, correction due to the periodicity conditions imposed on k to ψ_k. It is non zero if kpb is taken in another unit cell of the reciprocal lattice. We use here that: u_n(k + G_rm shift)(r) = e^-i*langle G_rm shiftr rangle u_nk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.phonon_modes-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.phonon_modes","text":"phonon_modes(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n dynmat\n) -> NamedTuple{(:frequencies, :vectors), _A} where _A<:Tuple{Any, Any}\n\n\nSolve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.plot_bandstructure","page":"API reference","title":"DFTK.plot_bandstructure","text":"Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u\"eV\" (electron volts).\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.plot_dos","page":"API reference","title":"DFTK.plot_dos","text":"Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_local_polynomial","page":"API reference","title":"DFTK.psp_local_polynomial","text":"psp_local_polynomial(T, psp::PspHgh) -> Any\npsp_local_polynomial(T, psp::PspHgh, t) -> Any\n\n\nThe local potential of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) (t^2 exp(t^2 2)) where t = r_textloc q and Q is a polynomial of at most degree 8. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_projector_polynomial","page":"API reference","title":"DFTK.psp_projector_polynomial","text":"psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any\npsp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any\n\n\nThe nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) exp(-t^2 2) where t = r_l q and Q is a polynomial. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.qcut_psp_local-Union{Tuple{PspHgh{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.qcut_psp_local","text":"qcut_psp_local(psp::PspHgh{T}) -> Any\n\n\nEstimate an upper bound for the argument q after which abs(eval_psp_local_fourier(psp, q)) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.qcut_psp_projector-Union{Tuple{T}, Tuple{PspHgh{T}, Any, Any}} where T","page":"API reference","title":"DFTK.qcut_psp_projector","text":"qcut_psp_projector(psp::PspHgh{T}, i, l) -> Any\n\n\nEstimate an upper bound for the argument q after which eval_psp_projector_fourier(psp, q) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.r_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors","text":"r_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real\n\n\nr_vectors(basis::PlaneWaveBasis)\n\nThe list of r vectors, in reduced coordinates. By convention, this is in [0,1)^3.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.r_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors_cart","text":"r_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nr_vectors_cart(basis::PlaneWaveBasis)\n\nThe list of r vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.radial_hydrogenic-Union{Tuple{T}, Tuple{AbstractVector{T}, Integer}, Tuple{AbstractVector{T}, Integer, Real}} where T<:Real","page":"API reference","title":"DFTK.radial_hydrogenic","text":"radial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer\n) -> Any\nradial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer,\n α::Real\n) -> Any\n\n\nRadial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.\n\nArguments\n\nr: radial grid\nn: principal quantum number\nα: diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.random_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Integer}} where T","page":"API reference","title":"DFTK.random_density","text":"random_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n n_electrons::Integer\n) -> Any\n\n\nBuild a random charge density normalized to the provided number of electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.read_w90_nnkp-Tuple{String}","page":"API reference","title":"DFTK.read_w90_nnkp","text":"read_w90_nnkp(\n fileprefix::String\n) -> NamedTuple{(:nntot, :nnkpts), Tuple{Int64, Vector{NamedTuple{(:ik, :ikpb, :G_shift), Tuple{Int64, Int64, Vector{Int64}}}}}}\n\n\nRead the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. \"wannier90.x -pp prefix\") Returns:\n\nthe array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).\nthe number 'nntot' of neighbors per k point.\n\nTODO: add the possibility to exclude bands\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.reducible_kcoords-Tuple{MonkhorstPack}","page":"API reference","title":"DFTK.reducible_kcoords","text":"reducible_kcoords(\n kgrid::MonkhorstPack\n) -> NamedTuple{(:kcoords,), Tuple{Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}}\n\n\nConstruct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.run_wannier90","page":"API reference","title":"DFTK.run_wannier90","text":"Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.\n\nwarning: Experimental feature\nCurrently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.save_bands-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_bands","text":"save_bands(\n filename::AbstractString,\n band_data::NamedTuple;\n save_ψ\n)\n\n\nWrite the computed bands to a file. On all processes, but the master one the filename is ignored. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.\n\nwarning: Changes to data format reserved\nNo guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.save_scfres-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_scfres","text":"save_scfres(\n filename::AbstractString,\n scfres::NamedTuple;\n save_ψ,\n extra_data,\n compress,\n save_ρ\n) -> Any\n\n\nSave an scfres obtained from self_consistent_field to a file. On all processes but the master one the filename is ignored. The format is determined from the file extension. Currently the following file extensions are recognized and supported:\n\njld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. Note that this file is also a valid HDF5 file, which can thus similarly be read by external non-Julia libraries such as h5py or similar. See Saving SCF results on disk and SCF checkpoints for details.\nvts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density, optionally bands and some metadata.\njson: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, some information about the basis, eigenvalues, Fermi level etc.\n\nKeyword arguments:\n\nsave_ψ: Save the orbitals as well (may lead to larger files). This is the default for jld2, but false for all other formats, where this is considerably more expensive.\nsave_ρ: Save the density as well (may lead to larger files). This is the default for all but json.\nextra_data: Additional data to place into the file. The data is just copied like fp[\"key\"] = value, where fp is a JLD2.JLDFile, WriteVTK.vtk_grid and so on.\ncompress: Apply compression to array data. Requires the CodecZlib package to be available.\n\nwarning: Changes to data format reserved\nNo guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scatter_kpts_block-Tuple{PlaneWaveBasis, Union{Nothing, AbstractArray}}","page":"API reference","title":"DFTK.scatter_kpts_block","text":"scatter_kpts_block(\n basis::PlaneWaveBasis,\n data::Union{Nothing, AbstractArray}\n) -> Any\n\n\nScatter the data of a quantity depending on k-Points from the master process to the child processes and return it as a Vector{Array}, where the outer vector is a list over all k-points. On non-master processes nothing may be passed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_anderson_solver","page":"API reference","title":"DFTK.scf_anderson_solver","text":"scf_anderson_solver(\n\n) -> DFTK.var\"#anderson#693\"{DFTK.var\"#anderson#692#694\"{Base.Pairs{Symbol, Union{}, Tuple{}, NamedTuple{(), Tuple{}}}, Int64}}\nscf_anderson_solver(m; kwargs...) -> DFTK.var\"#anderson#693\"\n\n\nCreate a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scf_damping_quadratic_model-Tuple{Any, Any}","page":"API reference","title":"DFTK.scf_damping_quadratic_model","text":"scf_damping_quadratic_model(\n info,\n info_next;\n modeltol\n) -> NamedTuple{(:α, :relerror), _A} where _A<:Tuple{Any, Any}\n\n\nUse the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_damping_solver","page":"API reference","title":"DFTK.scf_damping_solver","text":"scf_damping_solver(\n\n) -> DFTK.var\"#fp_solver#689\"{DFTK.var\"#fp_solver#688#690\"}\nscf_damping_solver(\n β\n) -> DFTK.var\"#fp_solver#689\"{DFTK.var\"#fp_solver#688#690\"}\n\n\nCreate a damped SCF solver updating the density as x = β * x_new + (1 - β) * x\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scfres_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.scfres_to_dict","text":"scfres_to_dict(\n scfres::NamedTuple;\n kwargs...\n) -> Dict{String, Any}\n\n\nConvert an scfres to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis as well as the band_data_to_dict functions, which are called by this function and their outputs merged. Only the master process returns meaningful data.\n\nSome details on the conventions for the returned data:\n\nρ: (fftsize[1], fftsize[2], fftsize[3], nspin) array of density on real-space grid.\nenergies: Dictionary / subdirectory containing the energy terms\nconverged: Has the SCF reached convergence\nnorm_Δρ: Most recent change in ρ during an SCF step\noccupation_threshold: Threshold below which orbitals are considered unoccupied\nnbandsconverge: Number of bands that have been fully converged numerically.\nn_iter: Number of iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.select_eigenpairs_all_kblocks-Tuple{Any, Any}","page":"API reference","title":"DFTK.select_eigenpairs_all_kblocks","text":"select_eigenpairs_all_kblocks(eigres, range) -> Any\n\n\nFunction to select a subset of eigenpairs on each k-Point. Works on the Tuple returned by diagonalize_all_kblocks.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.self_consistent_field-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.self_consistent_field","text":"self_consistent_field(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n ρ,\n ψ,\n tol,\n is_converged,\n maxiter,\n mixing,\n damping,\n solver,\n eigensolver,\n diagtolalg,\n nbandsalg,\n fermialg,\n callback,\n compute_consistent_energies,\n response\n) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :runtime_ns), _A} where _A<:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}\n\n\nself_consistent_field(basis; [tol, mixing, damping, ρ, ψ])\n\nSolve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where ρ_textnext = α P^-1 (ρ_textout - ρ_textin).\n\nOverview of parameters:\n\nρ: Initial density\nψ: Initial orbitals\ntol: Tolerance for the density change (ρ_textout - ρ_textin) to flag convergence. Default is 1e-6.\nis_converged: Convergence control callback. Typical objects passed here are ScfConvergenceDensity(tol) (the default), ScfConvergenceEnergy(tol) or ScfConvergenceForce(tol).\nmaxiter: Maximal number of SCF iterations\nmixing: Mixing method, which determines the preconditioner P^-1 in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()\ndamping: Damping parameter α in the above equation. Default is 0.8.\nnbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.\ncallback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.simpson","page":"API reference","title":"DFTK.simpson","text":"simpson(x, y)\n\nIntegrate y(x) over x using Simpson's method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.sin2pi-Tuple{Any}","page":"API reference","title":"DFTK.sin2pi","text":"sin2pi(x) -> Any\n\n\nFunction to compute sin(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any, Any}} where T","page":"API reference","title":"DFTK.solve_ΩplusK","text":"solve_ΩplusK(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n rhs,\n occupation;\n callback,\n tol\n) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), _A} where _A<:Tuple{Any, Bool, Any, Any, Int64}\n\n\nsolve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;\n tol=1e-10, verbose=false) where {T}\n\nReturn δψ where (Ω+K) δψ = rhs\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK_split-Union{Tuple{T}, Tuple{Hamiltonian, AbstractArray{T}, Vararg{Any, 5}}} where T","page":"API reference","title":"DFTK.solve_ΩplusK_split","text":"solve_ΩplusK_split(\n ham::Hamiltonian,\n ρ::AbstractArray{T},\n ψ,\n occupation,\n εF,\n eigenvalues,\n rhs;\n tol,\n tol_sternheimer,\n verbose,\n occupation_threshold,\n q,\n kwargs...\n)\n\n\nSolve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spglib_standardize_cell-Union{Tuple{T}, Tuple{AbstractArray{T}, Any, Any}, Tuple{AbstractArray{T}, Any, Any, Any}} where T","page":"API reference","title":"DFTK.spglib_standardize_cell","text":"spglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\nspglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions,\n magnetic_moments;\n correct_symmetry,\n primitive,\n tol_symmetry\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\n\n\nReturns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.sphericalbesselj_fast-Union{Tuple{T}, Tuple{Integer, T}} where T","page":"API reference","title":"DFTK.sphericalbesselj_fast","text":"sphericalbesselj_fast(l::Integer, x) -> Any\n\n\nsphericalbesselj_fast(l::Integer, x::Number)\n\nReturns the spherical Bessel function of the first kind jl(x). Consistent with https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spin_components-Tuple{Symbol}","page":"API reference","title":"DFTK.spin_components","text":"spin_components(\n spin_polarization::Symbol\n) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}\n\n\nExplicit spin components of the KS orbitals and the density\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.split_evenly-Tuple{Any, Any}","page":"API reference","title":"DFTK.split_evenly","text":"split_evenly(itr, N) -> Any\n\n\nSplit an iterable evenly into N chunks, which will be returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.standardize_atoms","page":"API reference","title":"DFTK.standardize_atoms","text":"standardize_atoms(\n lattice,\n atoms,\n positions\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\nstandardize_atoms(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n kwargs...\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), _A} where _A<:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}\n\n\nApply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetries_preserving_kgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_kgrid","text":"symmetries_preserving_kgrid(symmetries, kcoords) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete BZ grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetries_preserving_rgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_rgrid","text":"symmetries_preserving_rgrid(symmetries, fft_size) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete real-space grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_forces-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_forces","text":"symmetrize_forces(model::Model, forces; symmetries)\n\n\nSymmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i]\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_stresses-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_stresses","text":"symmetrize_stresses(model::Model, stresses; symmetries)\n\n\nSymmetrize the stress tensor, given as a Matrix in cartesian coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_ρ-Union{Tuple{T}, Tuple{Any, AbstractArray{T}}} where T","page":"API reference","title":"DFTK.symmetrize_ρ","text":"symmetrize_ρ(\n basis,\n ρ::AbstractArray{T};\n symmetries,\n do_lowpass\n) -> Any\n\n\nSymmetrize a density by applying all the basis (by default) symmetries and forming the average.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetry_operations","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n lattice,\n atoms,\n positions\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\nsymmetry_operations(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n tol_symmetry,\n check_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nReturn the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetry_operations-Tuple{Integer}","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n hall_number::Integer\n) -> Vector{SymOp{Float64}}\n\n\nReturn the Symmetry operations given a hall_number.\n\nThis function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.\n\nThe definition of hall_number is found at Space group type.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.synchronize_device-Tuple{DFTK.AbstractArchitecture}","page":"API reference","title":"DFTK.synchronize_device","text":"synchronize_device(_::DFTK.AbstractArchitecture)\n\n\nSynchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_cpu-Tuple{AbstractArray}","page":"API reference","title":"DFTK.to_cpu","text":"to_cpu(x::AbstractArray) -> Array\n\n\nTransfer an array from a device (typically a GPU) to the CPU.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_device-Tuple{DFTK.CPU, Any}","page":"API reference","title":"DFTK.to_device","text":"to_device(_::DFTK.CPU, x) -> Any\n\n\nTransfer an array to a particular device (typically a GPU)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Energies}","page":"API reference","title":"DFTK.todict","text":"todict(energies::Energies) -> Dict\n\n\nConvert an Energies struct to a dictionary representation\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Model}","page":"API reference","title":"DFTK.todict","text":"todict(model::Model) -> Dict{String, Any}\n\n\nConvert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).\n\nSome details on the conventions for the returned data:\n\nlattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension\natomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.\natomic_symbols: Atomic symbols if known.\nterms: Some rough information on the terms used for the computation.\nn_electrons: Number of electrons, may be missing if εF is fixed instead\nεF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.todict","text":"todict(basis::PlaneWaveBasis) -> Dict{String, Any}\n\n\nConvert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.\n\nSome details on the conventions for the returned data:\n\ndvol: Volume element for real-space integration\nvariational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.\nkweights: Weights for the k-points, summing to 1.0\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.total_local_potential-Tuple{Hamiltonian}","page":"API reference","title":"DFTK.total_local_potential","text":"total_local_potential(ham::Hamiltonian) -> Any\n\n\nGet the total local potential of the given Hamiltonian, in real space in the spin components.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.transfer_blochwave","text":"transfer_blochwave(\n ψ_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nTransfer Bloch wave between two basis sets. Limited feature set.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Tuple{Any, PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis::PlaneWaveBasis,\n kpt_in,\n kpt_out,\n ΔG\n) -> Any\n\n\nTransfer an array ψk_in expanded on kpt_in, and produce ψ(r) e^i ΔGr expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint}} where T","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_out::Kpoint\n) -> Any\n\n\nTransfer an array ψk defined on basisin k-point kptin to basisout k-point kptout.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_density-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.transfer_density","text":"transfer_density(\n ρ_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nTransfer density (in real space) between two basis sets.\n\nThis function is fast by transferring only the Fourier coefficients from the small basis to the big basis.\n\nNote that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity c_G = c_-G^ast does not fully hold).\n\nNote further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Tuple{PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}\n\n\nCompute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, PlaneWaveBasis{T, VT} where VT<:Real, Kpoint}} where T","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt_out::Kpoint\n) -> Tuple{Any, Any}\n\n\nCompute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.trapezoidal","page":"API reference","title":"DFTK.trapezoidal","text":"trapezoidal(x, y)\n\nIntegrate y(x) over x using trapezoidal method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.unfold_bz-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.unfold_bz","text":"unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis\n\n\n\" Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.versioninfo","page":"API reference","title":"DFTK.versioninfo","text":"versioninfo()\nversioninfo(io::IO)\n\n\nDFTK.versioninfo([io::IO=stdout])\n\nSummary of version and configuration of DFTK and its key dependencies.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.weighted_ksum-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.weighted_ksum","text":"weighted_ksum(basis::PlaneWaveBasis, array) -> Any\n\n\nSum an array over kpoints, taking weights into account\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_eig-Tuple{String, Any}","page":"API reference","title":"DFTK.write_w90_eig","text":"write_w90_eig(fileprefix::String, eigenvalues; n_bands)\n\n\nWrite the eigenvalues in a format readable by Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_win-Tuple{String, PlaneWaveBasis}","page":"API reference","title":"DFTK.write_w90_win","text":"write_w90_win(\n fileprefix::String,\n basis::PlaneWaveBasis;\n bands_plot,\n wannier_plot,\n kwargs...\n)\n\n\nWrite a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_wannier90_files-Tuple{Any, Any}","page":"API reference","title":"DFTK.write_wannier90_files","text":"write_wannier90_files(\n preprocess_call,\n scfres;\n n_bands,\n n_wannier,\n projections,\n fileprefix,\n wannier_plot,\n kwargs...\n)\n\n\nShared file writing code for Wannier.jl and Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ylm_real-Union{Tuple{T}, Tuple{Integer, Integer, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.ylm_real","text":"ylm_real(\n l::Integer,\n m::Integer,\n rvec::AbstractArray{T, 1}\n) -> Any\n\n\nReturns the (l,m) real spherical harmonic Ylm(r). Consistent with https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.zeros_like","page":"API reference","title":"DFTK.zeros_like","text":"zeros_like(X::AbstractArray) -> Any\nzeros_like(\n X::AbstractArray,\n T::Type,\n dims::Integer...\n) -> Any\n\n\nCreate an array of same \"array type\" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.@timing-Tuple","page":"API reference","title":"DFTK.@timing","text":"Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.\n\n\n\n\n\n","category":"macro"},{"location":"api/#DFTK.Smearing.A-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.A","text":"A term in the Hermite delta expansion\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.H-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.H","text":"Standard Hermite function using physicist's convention.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.entropy-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.entropy","text":"Entropy. Note that this is a function of the energy x, not of occupation(x). This function satisfies s' = x f' (see https://www.vasp.at/vasp-workshop/k-points.pdf p. 12 and https://arxiv.org/pdf/1805.07144.pdf p. 18.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation","page":"API reference","title":"DFTK.Smearing.occupation","text":"occupation(S::SmearingFunction, x)\n\nOccupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.Smearing.occupation_derivative-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.occupation_derivative","text":"Derivative of the occupation function, approximation to minus the delta function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation_divided_difference-Tuple{DFTK.Smearing.SmearingFunction, Vararg{Any, 4}}","page":"API reference","title":"DFTK.Smearing.occupation_divided_difference","text":"(f(x) - f(y))/(x - y), computed stably in the case where x and y are close\n\n\n\n\n\n","category":"method"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"EditURL = \"../../../examples/supercells.jl\"","category":"page"},{"location":"examples/supercells/#Creating-and-modelling-metallic-supercells","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"section"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An n-fold repetition along one of the axes of the original lattice.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"The following code achieves this for aluminium:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"using DFTK\nusing LinearAlgebra\nusing ASEconvert\n\nfunction aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])\n a = 7.65339\n lattice = a * Matrix(I, 3, 3)\n Al = ElementPsp(:Al; psp=load_psp(\"hgh/lda/al-q3\"))\n atoms = [Al, Al, Al, Al]\n positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]\n unit_cell = periodic_system(lattice, atoms, positions)\n\n # Make supercell in ASE:\n # We convert our lattice to the conventions used in ASE, make the supercell\n # and then convert back ...\n supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))\n supercell = pyconvert(AbstractSystem, supercell_ase)\n\n # Unfortunately right now the conversion to ASE drops the pseudopotential information,\n # so we need to reattach it:\n supercell = attach_psp(supercell; Al=\"hgh/lda/al-q3\")\n\n # Construct an LDA model and discretise\n # Note: We disable symmetries explicitly here. Otherwise the problem sizes\n # we are able to run on the CI are too simple to observe the numerical\n # instabilities we want to trigger here.\n model = model_LDA(supercell; temperature=1e-3, symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid)\nend;\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As part of the code we are using a routine inside the ASE, the atomistic simulation environment for creating the supercell and make use of the two-way interoperability of DFTK and ASE. For more details on this aspect see the documentation on Input and output formats.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"Write an example supercell structure to a file to plot it:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"setup = aluminium_setup(5)\nconvert_ase(periodic_system(setup.model)).write(\"al_supercell.png\")","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As we will see in this notebook the modelling of a system generally becomes harder if the system becomes larger.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"This sounds like a trivial statement as per se the cost per SCF step increases as the system (and thus N) gets larger.\nBut there is more to it: If one is not careful also the number of SCF iterations increases as the system gets larger.\nThe aim of a proper computational treatment of such supercells is therefore to ensure that the number of SCF iterations remains constant when the system size increases.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For achieving the latter DFTK by default employs the LdosMixing preconditioner [HL2021] during the SCF iterations. This mixing approach is completely parameter free, but still automatically adapts to the treated system in order to efficiently prevent charge sloshing. As a result, modelling aluminium slabs indeed takes roughly the same number of SCF iterations irrespective of the supercell size:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"[HL2021]: ","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"M. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. J. Phys. Cond. Matt 33 085503 (2021). ArXiv:2009.01665","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(2); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.","category":"page"},{"location":"developer/symmetries/#Crystal-symmetries","page":"Crystal symmetries","title":"Crystal symmetries","text":"","category":"section"},{"location":"developer/symmetries/#Theory","page":"Crystal symmetries","title":"Theory","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"In this discussion we will only describe the situation for a monoatomic crystal mathcal C subset mathbb R^3, the extension being easy. A symmetry of the crystal is an orthogonal matrix W and a real-space vector w such that","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"W mathcalC + w = mathcalC","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries where W = 1 and w is a lattice vector are always assumed and ignored in the following.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can define a corresponding unitary operator U on L^2(mathbb R^3) with action","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":" (Uu)(x) = uleft( W x + w right)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that U commutes with the Hamiltonian.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This operator acts on a plane-wave as","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\n(U e^iqcdot x) (x) = e^iq cdot w e^i (W^T q) x\n= e^- i(S q) cdot tau e^i (S q) cdot x\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"where we set","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nS = W^T\ntau = -W^-1w\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"It follows that the Fourier transform satisfies","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"widehatUu(q) = e^- iq cdot tau widehat u(S^-1 q)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(all of these equations being also valid in reduced coordinates). In particular, if e^ikcdot x u_k(x) is an eigenfunction, then by decomposing u_k over plane-waves e^i G cdot x one can see that e^i(S^T k) cdot x (U u_k)(x) is also an eigenfunction: we can choose","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"u_Sk = U u_k","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This is used to reduce the computations needed. For a uniform sampling of the Brillouin zone (the reducible k-points), one can find a reduced set of k-points (the irreducible k-points) such that the eigenvectors at the reducible k-points can be deduced from those at the irreducible k-points.","category":"page"},{"location":"developer/symmetries/#Symmetrization","page":"Crystal symmetries","title":"Symmetrization","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Quantities that are calculated by summing over the reducible k points can be calculated by first summing over the irreducible k points and then symmetrizing. Let mathcalK_textreducible denote the reducible k-points sampling the Brillouin zone, mathcalS be the group of all crystal symmetries that leave this BZ mesh invariant (mathcalSmathcalK_textreducible = mathcalK_textreducible) and mathcalK be the irreducible k-points obtained from mathcalK_textreducible using the symmetries mathcalS. Clearly","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"mathcalK_textred = Sk S in mathcalS k in mathcalK","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let Q be a k-dependent quantity to sum (for instance, energies, densities, forces, etc). Q transforms in a particular way under symmetries: Q(Sk) = S(Q(k)) where the (linear) action of S on Q depends on the particular Q.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nsum_k in mathcalK_textred Q(k)\n= sum_k in mathcalK sum_S text with Sk in mathcalK_textred S(Q(k)) \n= sum_k in mathcalK frac1N_mathcalSk sum_S in mathcalS S(Q(k))\n= frac1N_mathcalS sum_S in mathcalS\n left(sum_k in mathcalK fracN_mathcalSN_mathcalSk Q(k) right)\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Here, N_mathcalS = mathcalS is the total number of symmetry operations and N_mathcalSk denotes the number of operations such that leave k invariant. The latter operations form a subgroup of the group of all symmetry operations, sometimes called the small/little group of k. The factor fracN_mathcalSN_Sk, also equal to the ratio of number of reducible points encoded by this particular irreducible k to the total number of reducible points, determines the weight of each irreducible k point.","category":"page"},{"location":"developer/symmetries/#Example","page":"Crystal symmetries","title":"Example","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using DFTK\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nEcut = 5\nkgrid = [4, 4, 4]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let us demonstrate this in practice. We consider silicon, setup appropriately in the lattice, atoms and positions objects as in Tutorial and to reach a fast execution, we take a small Ecut of 5 and a [4, 4, 4] Monkhorst-Pack grid. First we perform the DFT calculation disabling symmetry handling","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_nosym = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid)\nscfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"and then redo it using symmetry (the default):","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_sym = model_LDA(lattice, atoms, positions)\nbasis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)\nscfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Clearly both yield the same energy but the version employing symmetry is faster, since less k-points are explicitly treated:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(length(basis_sym.kpoints), length(basis_nosym.kpoints))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can also explicitly verify both methods to yield the same density:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using LinearAlgebra # hide\n(norm(scfres_sym.ρ - scfres_nosym.ρ),\n norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries can be used to map reducible to irreducible points:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"ikpt_red = rand(1:length(basis_nosym.kpoints))\n# find a (non-unique) corresponding irreducible point in basis_nosym,\n# and the symmetry that relates them\nikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])\n[basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The eigenvalues match also:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"[scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"EditURL = \"../../../examples/compare_solvers.jl\"","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-DFT-solvers","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"First we setup our problem","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"using DFTK\nusing LinearAlgebra\n\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])\n\n# Convergence we desire in the density\ntol = 1e-6","category":"page"},{"location":"examples/compare_solvers/#Density-based-self-consistent-field","page":"Comparison of DFT solvers","title":"Density-based self-consistent field","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scf = self_consistent_field(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Potential-based-SCF","page":"Comparison of DFT solvers","title":"Potential-based SCF","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scfv = DFTK.scf_potential_mixing(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Direct-minimization","page":"Comparison of DFT solvers","title":"Direct minimization","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_dm = direct_minimization(basis; tol=tol^2);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Newton-algorithm","page":"Comparison of DFT solvers","title":"Newton algorithm","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_start = self_consistent_field(basis; tol=0.5);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Remove the virtual orbitals (which Newton cannot treat yet)","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ\nscfres_newton = newton(basis, ψ; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-results","page":"Comparison of DFT solvers","title":"Comparison of results","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"println(\"|ρ_newton - ρ_scf| = \", norm(scfres_newton.ρ - scfres_scf.ρ))\nprintln(\"|ρ_newton - ρ_scfv| = \", norm(scfres_newton.ρ - scfres_scfv.ρ))\nprintln(\"|ρ_newton - ρ_dm| = \", norm(scfres_newton.ρ - scfres_dm.ρ))","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"EditURL = \"../../../examples/forwarddiff.jl\"","category":"page"},{"location":"examples/forwarddiff/#Polarizability-using-automatic-differentiation","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"","category":"section"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"using DFTK\nusing LinearAlgebra\nusing ForwardDiff\n\n# Construct PlaneWaveBasis given a particular electric field strength\n# Again we take the example of a Helium atom.\nfunction make_basis(ε::T; a=10., Ecut=30) where {T}\n lattice=T(a) * I(3) # lattice is a cube of ``a`` Bohrs\n # Helium at the center of the box\n atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n positions = [[1/2, 1/2, 1/2]]\n\n model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1]) # No k-point sampling on isolated system\nend\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n @assert isdiag(basis.model.lattice)\n a = basis.model.lattice[1, 1]\n rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]\n sum(rr .* ρ) * basis.dvol\nend\n\n# Function to compute the dipole for a given field strength\nfunction compute_dipole(ε; tol=1e-8, kwargs...)\n scfres = self_consistent_field(make_basis(ε; kwargs...); tol)\n dipole(scfres.basis, scfres.ρ)\nend;\nnothing #hide","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"With this in place we can compute the polarizability from finite differences (just like in the previous example):","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability_fd = let\n ε = 0.01\n (compute_dipole(ε) - compute_dipole(0.0)) / ε\nend","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability = ForwardDiff.derivative(compute_dipole, 0.0)\nprintln()\nprintln(\"Polarizability via ForwardDiff: $polarizability\")\nprintln(\"Polarizability via finite difference: $polarizability_fd\")","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"EditURL = \"tutorial.jl\"","category":"page"},{"location":"guide/tutorial/#Tutorial","page":"Tutorial","title":"Tutorial","text":"","category":"section"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"note: Convergence parameters in the documentation\nWe use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\n# 1. Define lattice and atomic positions\na = 5.431u\"angstrom\" # Silicon lattice constant\nlattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors\n [1 0 1.]; # specified column by column\n [1 1 0.]];\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"By default, all numbers passed as arguments are assumed to be in atomic units. Quantities such as temperature, energy cutoffs, lattice vectors, and the k-point grid spacing can optionally be annotated with Unitful units, which are automatically converted to the atomic units used internally. For more details, see the Unitful package documentation and the UnitfulAtomic.jl package.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"# Load HGH pseudopotential for Silicon\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n\n# Specify type and positions of atoms\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# 2. Select model and basis\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 7 # kinetic energy cutoff\n# Ecut = 190.5u\"eV\" # Could also use eV or other energy-compatible units\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n# Note the implicit passing of keyword arguments here:\n# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)\n\n# 3. Run the SCF procedure to obtain the ground state\nscfres = self_consistent_field(basis, tol=1e-5);\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"scfres.energies","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Eigenvalues:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"hcat(scfres.eigenvalues...)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number). The \"splatting\" operation ... calls hcat with all the inner arrays as arguments, which collects them into a matrix.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can check the occupations ...","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"hcat(scfres.occupation...)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[1, :, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"compute_forces_cart(scfres)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_bandstructure(scfres; kline_density=10)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"or plot a density of states, for which we increase the kgrid a bit to get smoother plots:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))\nplot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Note that directly employing the scfres also works, but the results are much cruder:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"EditURL = \"../../../examples/polarizability.jl\"","category":"page"},{"location":"examples/polarizability/#Polarizability-by-linear-response","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"μ = r ρ(r) dr","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"with respect to a small uniform electric field E = -x.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using DFTK\nusing LinearAlgebra\n\na = 10.\nlattice = a * I(3) # cube of ``a`` bohrs\n# Helium at the center of the box\natoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\npositions = [[1/2, 1/2, 1/2]]\n\n\nkgrid = [1, 1, 1] # no k-point sampling for an isolated system\nEcut = 30\ntol = 1e-8\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]\n sum(rr .* ρ) * basis.dvol\nend;\nnothing #hide","category":"page"},{"location":"examples/polarizability/#Using-finite-differences","page":"Polarizability by linear response","title":"Using finite differences","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We first compute the polarizability by finite differences. First compute the dipole moment at rest:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"model = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nres = self_consistent_field(basis; tol)\nμref = dipole(basis, res.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Then in a small uniform field:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"ε = .01\nmodel_ε = model_LDA(lattice, atoms, positions;\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\nbasis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)\nres_ε = self_consistent_field(basis_ε; tol)\nμε = dipole(basis_ε, res_ε.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"polarizability = (με - μref) / ε\n\nprintln(\"Reference dipole: $μref\")\nprintln(\"Displaced dipole: $με\")\nprintln(\"Polarizability : $polarizability\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).","category":"page"},{"location":"examples/polarizability/#Using-linear-response","page":"Polarizability by linear response","title":"Using linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, χ_0 is the independent-particle polarizability, and K the Hartree-exchange-correlation kernel. We denote with δV_rm ext an external perturbing potential (like in this case the uniform electric field). Then:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = χ_0 δV = χ_0 (δV_rm ext + K δρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"which implies","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = (1-χ_0 K)^-1 χ_0 δV_rm ext","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"From this we identify the polarizability operator to be χ = (1-χ_0 K)^-1 χ_0. Numerically, we apply χ to δV = -x by solving a linear equation (the Dyson equation) iteratively.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using KrylovKit\n\n# Apply ``(1- χ_0 K)``\nfunction dielectric_operator(δρ)\n δV = apply_kernel(basis, δρ; res.ρ)\n χ0δV = apply_χ0(res, δV)\n δρ - χ0δV\nend\n\n# `δVext` is the potential from a uniform field interacting with the dielectric dipole\n# of the density.\nδVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]\nδVext = cat(δVext; dims=4)\n\n# Apply ``χ_0`` once to get non-interacting dipole\nδρ_nointeract = apply_χ0(res, δVext)\n\n# Solve Dyson equation to get interacting dipole\nδρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]\n\nprintln(\"Non-interacting polarizability: $(dipole(basis, δρ_nointeract))\")\nprintln(\"Interacting polarizability: $(dipole(basis, δρ))\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"EditURL = \"../../../examples/input_output.jl\"","category":"page"},{"location":"examples/input_output/#Input-and-output-formats","page":"Input and output formats","title":"Input and output formats","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.","category":"page"},{"location":"examples/input_output/#Reading-/-writing-files-supported-by-AtomsIO","page":"Input and output formats","title":"Reading / writing files supported by AtomsIO","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using AtomsIO # Use Julia-only IO parsers\nusing AtomsIOPython # Use python-based IO parsers (e.g. ASE)\nsystem = load_system(\"Fe_afm.pwi\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Next we attach pseudopotential information, since currently the parser is not yet capable to read this information from the file.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using DFTK\nsystem = attach_psp(system, Fe=\"hgh/pbe/fe-q16.hgh\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Finally we make use of DFTK's AtomsBase integration to run the calculation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"model = model_LDA(system; temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))\nρ0 = guess_density(basis, system)\nscfres = self_consistent_field(basis, ρ=ρ0);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"warning: DFTK data formats are not yet fully matured\nThe data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.","category":"page"},{"location":"examples/input_output/#Writing-VTK-files-for-visualization","page":"Input and output formats","title":"Writing VTK files for visualization","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using WriteVTK\nsave_scfres(\"iron_afm.vts\", scfres; save_ψ=true);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.","category":"page"},{"location":"examples/input_output/#Parsable-data-export-using-json","page":"Input and output formats","title":"Parsable data-export using json","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"DFTK.todict(scfres.energies)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nopen(\"iron_afm_energies.json\", \"w\") do io\n JSON3.pretty(io, DFTK.todict(scfres.energies))\nend\nprintln(read(\"iron_afm_energies.json\", String))","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nsave_scfres(\"iron_afm.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"save_bands(\"iron_afm_scfres.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"bands = compute_bands(scfres, kline_density=10)\nsave_bands(\"iron_afm_bands.json\", bands)","category":"page"},{"location":"examples/input_output/#Writing-and-reading-JLD2-files","page":"Input and output formats","title":"Writing and reading JLD2 files","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5). This includes notably h5py to read DFTK output from python.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JLD2\nsave_scfres(\"iron_afm.jld2\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Saving such JLD2 files supports some options, such as save_ψ=false, which avoids saving the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used with save_bands.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Cleanup files generated by this notebook.)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"rm.([\"iron_afm.vts\", \"iron_afm.jld2\",\n \"iron_afm.json\", \"iron_afm_energies.json\", \"iron_afm_scfres.json\",\n \"iron_afm_bands.json\"])","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"EditURL = \"periodic_problems.jl\"","category":"page"},{"location":"guide/periodic_problems/#periodic-problems","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/#Periodicity-and-lattices","page":"Problems and plane-wave discretisations","title":"Periodicity and lattices","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A periodic problem is characterized by being invariant to certain translations. For example the sin function is periodic with periodicity 2π, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" sin(x) = sin(x + 2πm) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This is nothing else than saying that any translation by an integer multiple of 2π keeps the sin function invariant. More formally, one can use the translation operator T_2πm to write this as:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_2πm sin(x) = sin(x - 2πm) = sin(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function f mathbbR mathbbR, but a priori the solution is known to be periodic with periodicity a. As a consequence of said periodicity it is sufficient to determine the values of f for all x from the interval -a2 a2) to uniquely define f on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -3a/2 -a/2 +a/2 +3a/2\n ... |---------|---------|---------| ...\n a a a","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with lattice constant a. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding f it is thus sufficient to consider only the problem inside a unit cell -a2 a2) (this is the convention used by DFTK, but this is arbitrary, and for instance 0a) would have worked just as well).","category":"page"},{"location":"guide/periodic_problems/#Periodic-operators-and-the-Bloch-transform","page":"Problems and plane-wave discretisations","title":"Periodic operators and the Bloch transform","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H = -frac12 Δ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case H one can easily show exactly that, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma H = H T_ma quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We note in passing that the free-electron model is actually very special in the sense that the choice of a is completely arbitrary here. In other words H is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations a and we will take this viewpoint here.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H ψ_kn = ε_kn ψ_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"satisfy a factorization","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" ψ_kn(x) = e^i kx u_kn(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"into a plane wave e^i kx and a lattice-periodic function","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma u_kn(x) = u_kn(x - ma) = u_kn(x) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this n is a labeling integer index and k is a real number, whose details will be clarified in the next section. The index n is sometimes also called the band index and functions ψ_kn satisfying this factorization are also known as Bloch functions or Bloch states.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Consider the application of 2H = -Δ = - fracd^2d x^2 to such a Bloch wave. First we notice for any function f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -i left( e^i kx f right)\n = -ifracddx left( e^i kx f right)\n = k e^i kx f + e^i kx (-i) f = e^i kx (-i + k) f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Using this result twice one shows that applying -Δ yields","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"beginaligned\n -Delta left(e^i kx u_kn(x)right)\n = -i left-i left(u_kn(x) e^i kx right) right \n = -i lefte^i kx (-i + k) u_kn(x) right \n = e^i kx (-i + k)^2 u_kn(x) \n = e^i kx 2H_k u_kn(x)\nendaligned","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"where we defined","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k = frac12 (-i + k)^2","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The action of this operator on a function u_kn is given by","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = e^-i kx H e^i kx u_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"which in particular implies that","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = ε_kn u_kn quad quad H (e^i kx u_kn) = ε_kn (e^i kx u_kn)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"To seek the eigenpairs of H we may thus equivalently find the eigenpairs of all H_k. The point of this is that the eigenfunctions u_kn of H_k are periodic (unlike the eigenfunctions ψ_kn of H). In contrast to ψ_kn the functions u_kn can thus be fully represented considering the eigenproblem only on the unit cell.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A detailed mathematical analysis shows that the transformation from H to the set of all H_k for a suitable set of values for k (details below) is actually a unitary transformation, the so-called Bloch transform. This transform brings the Hamiltonian into the symmetry-adapted basis for translational symmetry, which are exactly the Bloch functions. Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries (like the point group symmetry in molecules), the Bloch transform also makes the Hamiltonian H block-diagonal[1]:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_B H T_B^-1 left( beginarraycccc H_10 H_2H_30ddots endarray right)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with each block H_k taking care of one value k. This block-diagonal structure under the basis of Bloch functions lets us completely describe the spectrum of H by looking only at the spectrum of all H_k blocks.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"[1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.","category":"page"},{"location":"guide/periodic_problems/#The-Brillouin-zone","page":"Problems and plane-wave discretisations","title":"The Brillouin zone","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We now consider the parameter k of the Hamiltonian blocks in detail.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"As discussed k is a real number. It turns out, however, that some of these kmathbbR give rise to operators related by unitary transformations (again due to translational symmetry).\nSince such operators have the same eigenspectrum, only one version needs to be considered.\nThe smallest subset from which k is chosen is the Brillouin zone (BZ).\nThe BZ is the unit cell of the reciprocal lattice, which may be constructed from the real-space lattice by a Fourier transform.\nIn our simple 1D case the reciprocal lattice is just\n ... |--------|--------|--------| ...\n 2π/a 2π/a 2π/a\ni.e. like the real-space lattice, but just with a different lattice constant b = 2π a.\nThe BZ in our example is thus B = -πa πa). The members of B are typically called k-points.","category":"page"},{"location":"guide/periodic_problems/#Discretization-and-plane-wave-basis-sets","page":"Problems and plane-wave discretisations","title":"Discretization and plane-wave basis sets","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With what we discussed so far the strategy to find all eigenpairs of a periodic Hamiltonian H thus reduces to finding the eigenpairs of all H_k with k B. This requires two discretisations:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"B is infinite (and not countable). To discretize we first only pick a finite number of k-points. Usually this k-point sampling is done by picking k-points along a regular grid inside the BZ, the k-grid.\nEach H_k is still an infinite-dimensional operator. Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis and diagonalize the resulting matrix.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For the second step multiple types of bases are used in practice (finite differences, finite elements, Gaussians, ...). In DFTK we currently support only plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For our 1D example normalized plane waves are defined as the functions","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"e_G(x) = frace^i G xsqrta qquad G in bmathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"and typically one forms basis sets from these by specifying a kinetic energy cutoff E_textcut:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"left e_G big (G + k)^2 leq 2E_textcut right","category":"page"},{"location":"guide/periodic_problems/#Correspondence-of-theory-to-DFTK-code","page":"Problems and plane-wave discretisations","title":"Correspondence of theory to DFTK code","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Before solving a few example problems numerically in DFTK, a short overview of the correspondence of the introduced quantities to data structures inside DFTK.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"H is represented by a Hamiltonian object and variables for hamiltonians are usually called ham.\nH_k by a HamiltonianBlock and variables are hamk.\nψ_kn is usually just called ψ. u_kn is not stored (in favor of ψ_kn).\nε_kn is called eigenvalues.\nk-points are represented by Kpoint and respective variables called kpt.\nThe basis of plane waves is managed by PlaneWaveBasis and variables usually just called basis.","category":"page"},{"location":"guide/periodic_problems/#Solving-the-free-electron-Hamiltonian","page":"Problems and plane-wave discretisations","title":"Solving the free-electron Hamiltonian","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"One typical approach to get physical insight into a Hamiltonian H is to plot a so-called band structure, that is the eigenvalues of H_k versus k. In DFTK we achieve this using the following steps:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. Therefore quantities related to the problem space are have a fixed dimension 3. The convention is that for 1D / 2D problems the trailing entries are always zero and ignored in the computation. For the lattice we therefore construct a 3x3 matrix with only one entry.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using DFTK\n\nlattice = zeros(3, 3)\nlattice[1, 1] = 20.;\nnothing #hide","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 2: Select a model. In this case we choose a free-electron model, which is the same as saying that there is only a Kinetic term (and no potential) in the model.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"model = Model(lattice; terms=[Kinetic()])","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 3: Define a plane-wave basis using this model and a cutoff E_textcut of 300 Hartree. The k-point grid is given as a regular grid in the BZ (a so-called Monkhorst-Pack grid). Here we select only one k-point (1x1x1), see the note below for some details on this choice.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 4: Plot the bands! Select a density of k-points for the k-grid to use for the bandstructure calculation, discretize the problem and diagonalize it. Afterwards plot the bands.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\nusing Plots\n\nplot_bandstructure(basis; n_bands=6, kline_density=100)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"note: Selection of k-point grids in `PlaneWaveBasis` construction\nYou might wonder why we only selected a single k-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different k-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.","category":"page"},{"location":"guide/periodic_problems/#Adding-potentials","page":"Problems and plane-wave discretisations","title":"Adding potentials","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The modified problem we will look at consists of diagonalizing\nH_k = frac12 (-i nabla + k)^2 + V\nfor all k in B with a periodic potential V interacting with the electrons.\nA number of \"standard\" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct\ndensity-functial theory (DFT) models for treating electronic structures (see the Tutorial).\nGross-Pitaevskii models for bosonic systems (see Gross-Pitaevskii equation in one dimension)\neven some more unusual cases like anyonic models.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A single potential looks like:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Plots\nusing LinearAlgebra\nnucleus = ElementGaussian(0.3, 10.0)\nplot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this element at hand we can easily construct a setting where two potentials of this form are located at positions 20 and 80 inside the lattice 0 100:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using LinearAlgebra\n\n# Define the 1D lattice [0, 100]\nlattice = diagm([100., 0, 0])\n\n# Place them at 20 and 80 in *fractional coordinates*,\n# that is 0.2 and 0.8, since the lattice is 100 wide.\nnucleus = ElementGaussian(0.3, 10.0)\natoms = [nucleus, nucleus]\npositions = [[0.2, 0, 0], [0.8, 0, 0]]\n\n# Assemble the model, discretize and build the Hamiltonian\nmodel = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));\nham = Hamiltonian(basis)\n\n# Extract the total potential term of the Hamiltonian and plot it\npotential = DFTK.total_local_potential(ham)[:, 1, 1]\nrvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, potential, label=\"\", xlabel=\"x\", ylabel=\"V(x)\")","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This potential is the sum of two \"atomic\" potentials (the two \"Gaussian\" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this setup, let's look at the bands:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\n\nplot_bandstructure(basis; n_bands=6, kline_density=500)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands are noticeably different.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands no longer overlap, meaning that the spectrum of H is no longer continuous but has gaps.\nThe two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.\nThe higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense \"free electrons\" correspond to perfect delocalization.","category":"page"},{"location":"guide/introductory_resources/#introductory-resources","page":"Introductory resources","title":"Introductory resources","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.","category":"page"},{"location":"guide/introductory_resources/#Workshop-material-and-tutorials","page":"Introductory resources","title":"Workshop material and tutorials","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFTK school 2022: Numerical methods for density-functional theory simulations: Summer school centred around the DFTK code and modern approaches to density-functional theory. See the programme and lecture notes, in particular:\nIntroduction to DFT\nIntroduction to periodic problems\nAnalysis of plane-wave DFT\nAnalysis of SCF convergence\nExercises","category":"page"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFT in a nutshell by Kieron Burke and Lucas Wagner: Short tutorial-style article introducing the basic DFT setting, basic equations and terminology. Great introduction from the physical / chemical perspective.\nWorkshop on mathematics and numerics of DFT: Two-day workshop at MIT centred around DFTK by M. F. Herbst, in particular the summary of DFT theory.","category":"page"},{"location":"guide/introductory_resources/#Textbooks","page":"Introductory resources","title":"Textbooks","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Electronic Structure: Basic theory and practical methods by R. M. Martin (Cambridge University Press, 2004): Standard textbook introducing most common methods of the field (lattices, pseudopotentials, DFT, ...) from the perspective of a physicist.\nA Mathematical Introduction to Electronic Structure Theory by L. Lin and J. Lu (SIAM, 2019): Monograph attacking DFT from a mathematical angle. Covers topics such as DFT, pseudos, SCF, response, ...","category":"page"},{"location":"guide/introductory_resources/#Recordings","page":"Introductory resources","title":"Recordings","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Julia for Materials Modelling by M. F. Herbst: One-hour talk providing an overview of materials modelling tools for Julia. Key features of DFTK are highlighted as part of the talk. Pluto notebooks\nDFTK: A Julian approach for simulating electrons in solids by M. F. Herbst: Pre-recorded talk for JuliaCon 2020. Assumes no knowledge about DFT and gives the broad picture of DFTK. Slides.\nJuliacon 2021 DFT workshop by M. F. Herbst: Three-hour workshop session at the 2021 Juliacon providing a mathematical look on DFT, SCF solution algorithms as well as the integration of DFTK into the Julia package ecosystem. Material starts to become a little outdated. Workshop material","category":"page"},{"location":"developer/useful_formulas/#Useful-formulas","page":"Useful formulas","title":"Useful formulas","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.","category":"page"},{"location":"developer/useful_formulas/#Fourier-transforms","page":"Useful formulas","title":"Fourier transforms","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"The Fourier transform is\nwidehatf(q) = int_mathbb R^3 e^-i q cdot x f(x) dx\nFourier transforms of centered functions: If f(x) = R(x) Y_l^m(xx), then\nbeginaligned\n hat f( q)\n = int_mathbb R^3 R(x) Y_l^m(xx) e^-i q cdot x dx \n = sum_l = 0^infty 4 pi i^l\n sum_m = -l^l int_mathbb R^3\n R(x) j_l(q x)Y_l^m(-qq) Y_l^m(xx)\n Y_l^mast(xx)\n dx \n = 4 pi Y_l^m(-qq) i^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n = 4 pi Y_l^m(qq) (-i)^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n endaligned\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"developer/useful_formulas/#Spherical-harmonics","page":"Useful formulas","title":"Spherical harmonics","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"Plane wave expansion formula\ne^i q cdot r =\n 4 pi sum_l = 0^infty sum_m = -l^l\n i^l j_l(q r) Y_l^m(qq) Y_l^mast(rr)\nSpherical harmonics orthogonality\nint_mathbbS^2 Y_l^m*(r)Y_l^m(r) dr\n = delta_ll delta_mm\nThis also holds true for real spherical harmonics.\nSpherical harmonics parity\nY_l^m(-r) = (-1)^l Y_l^m(r)\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"EditURL = \"../../../examples/wannier.jl\"","category":"page"},{"location":"examples/wannier/#Wannierization-using-Wannier.jl-or-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"warning: No guarantees on Wannier interface\nThis code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\nd = 10u\"Å\"\na = 2.641u\"Å\" # Graphene Lattice constant\nlattice = [a -a/2 0;\n 0 √3*a/2 0;\n 0 0 d]\n\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\npositions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]\nmodel = model_PBE(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])\nnbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)\nscfres = self_consistent_field(basis; nbandsalg, tol=1e-5);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Plot bandstructure of the system","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"bands = compute_bands(scfres; kline_density=10)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier.jl","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier.jl","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder \"wannierjl\" under the prefix \"wannier\" (i.e. \"wannierjl/wannier.win\", \"wannierjl/wannier.wout\", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We now produce a simple Wannier model for 5 MLFWs.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"3 bond-centered 2s hydrogenic orbitals for the expected σ bonds\n2 atom-centered 2pz hydrogenic orbitals for the expected π bands","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using Wannier # Needed to make Wannier.Model available","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"From chemical intuition, we know that the bonds with the lowest energy are:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"the 3 σ bonds,\nthe π and π* bonds.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We provide relevant initial projections to help Wannierization converge to functions with a similar shape.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)\npz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)\nprojections = [\n # Note: fractional coordinates for the centers!\n # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds\n s_guess((positions[1] + positions[2]) / 2),\n s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),\n s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),\n # 2 atom-centered 2pz hydrogenic orbitals\n pz_guess(positions[1]),\n pz_guess(positions[2]),\n]","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Wannierize:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"wannier_model = Wannier.Model(scfres;\n fileprefix=\"wannier/graphene\",\n n_bands=scfres.n_bands_converge,\n n_wannier=5,\n projections,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Once we have the wannier_model, we can use the functions in the Wannier.jl package:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Compute MLWF:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"U = disentangle(wannier_model, max_iter=200);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Inspect localization before and after Wannierization:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"omega(wannier_model)\nomega(wannier_model, U)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Build a Wannier interpolation model:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"kpath = irrfbz_path(model)\ninterp_model = Wannier.InterpModel(wannier_model; kpath=kpath)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"And so on... Refer to the Wannier.jl documentation for further examples.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files when done.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"examples/wannier/#Custom-initial-guesses","page":"Wannierization using Wannier.jl or Wannier90","title":"Custom initial guesses","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can also provide custom initial guesses for Wannierization, by passing a callable function in the projections array. The function receives the basis and a list of points (fractional coordinates in reciprocal space), and returns the Fourier transform of the initial guess function evaluated at each point.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For example, we could use Gaussians for the σ and pz guesses with the following code:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.GaussianWannierProjection(center)\nfunction pz_guess(center)\n # Approximate with two Gaussians offset by 0.5 Å from the center of the atom\n offset = model.inv_lattice * [0, 0, austrip(0.5u\"Å\")]\n center1 = center + offset\n center2 = center - offset\n # Build the custom projector\n (basis, qs) -> DFTK.GaussianWannierProjection(center1)(basis, qs) - DFTK.GaussianWannierProjection(center2)(basis, qs)\nend\n# Feed to Wannier via the `projections` as before...","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using wannier90_jll # Needed to make run_wannier90 available\nrun_wannier90(scfres;\n fileprefix=\"wannier/graphene\",\n n_wannier=5,\n projections,\n num_print_cycles=25,\n num_iter=200,\n #\n dis_win_max=19.0,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1, # 1 eV above Fermi level\n dis_num_iter=300,\n dis_mix_ratio=1.0,\n #\n wannier_plot=true,\n wannier_plot_format=\"cube\",\n wannier_plot_supercell=5,\n write_xyz=true,\n translate_home_cell=true,\n );\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"developer/setup/#Developer-setup","page":"Developer setup","title":"Developer setup","text":"","category":"section"},{"location":"developer/setup/#Source-code-installation","page":"Developer setup","title":"Source code installation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"To achieve such a setup you have two recommended options:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Clone DFTK into a location of your choice\n$ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/\nWhenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:\nimport Pkg\nPkg.develop(\"/some/path/\")\nTo run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use\n$ julia --project=/some/path/\nThe advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.\nAdd a development version of DFTK to the global Julia environment:\nimport Pkg\nPkg.develop(\"DFTK\")\nThis clones DFTK to the path ~/.julia/dev/DFTK\" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.","category":"page"},{"location":"developer/setup/#Disabling-precompilation","page":"Developer setup","title":"Disabling precompilation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"[DFTK]\nprecompile_workload = false","category":"page"},{"location":"developer/setup/#Running-the-tests","page":"Developer setup","title":"Running the tests","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using TestEnv # Optional: automatically installs required packages\nTestEnv.activate() # for tests in a temporary environment.\nusing TestItemRunner\ncd(\"test\") # By default, the following macro runs everything from the parent folder.\n@run_package_tests filter = ti -> :core ∈ ti.tags","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Or to only run the tests of a particular file serialisation.jl use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"@run_package_tests filter = ti -> occursin(\"serialisation.jl\", ti.filename)","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using .MySetup: my_function","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using ..MySetup: my_function","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"EditURL = \"../../../examples/cohen_bergstresser.jl\"","category":"page"},{"location":"examples/cohen_bergstresser/#Cohen-Bergstresser-model","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"","category":"section"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"[CB1966]: M. L. Cohen and T. K. Bergstresser Phys. Rev. 141, 789 (1966) DOI 10.1103/PhysRev.141.789","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using DFTK\n\nSi = ElementCohenBergstresser(:Si)\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nlattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"Next we build the rather simple model and discretize it with moderate Ecut:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We diagonalise at the Gamma point to find a Fermi level …","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"ham = Hamiltonian(basis)\neigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)\nεF = DFTK.compute_occupation(basis, eigres.λ).εF","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"… and compute and plot 8 bands:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using Plots\nusing Unitful\n\nbands = compute_bands(basis; n_bands=8, εF, kline_density=10)\np = plot_bandstructure(bands; unit=u\"eV\")\nylims!(p, (-5, 6))","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"EditURL = \"../../../examples/custom_potential.jl\"","category":"page"},{"location":"examples/custom_potential/#custom-potential","page":"Custom potential","title":"Custom potential","text":"","category":"section"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"using DFTK\nusing LinearAlgebra","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"First, we define a new element which represents a nucleus generating a Gaussian potential.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"struct CustomPotential <: DFTK.Element\n α # Prefactor\n L # Width of the Gaussian nucleus\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Some default values","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"CustomPotential() = CustomPotential(1.0, 0.5);\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"function DFTK.local_potential_real(el::CustomPotential, r::Real)\n -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\nend\nfunction DFTK.local_potential_fourier(el::CustomPotential, q::Real)\n # = ∫ V(r) exp(-ix⋅q) dx\n -el.α * exp(- (q * el.L)^2 / 2)\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tip: Gaussian potentials and DFTK\nDFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We set up the lattice. For a 1D case we supply two zero lattice vectors","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"In this example, we want to generate two Gaussian potentials generated by two \"nuclei\" localized at positions x_1 and x_2, that are expressed in 01) in fractional coordinates. x_1 - x_2 should be different from 05 to break symmetry and get nonzero forces.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"x1 = 0.2\nx2 = 0.8\npositions = [[x1, 0, 0], [x2, 0, 0]]\ngauss = CustomPotential()\natoms = [gauss, gauss];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We setup a Gross-Pitaevskii model","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"C = 1.0\nα = 2;\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n AtomicLocal(),\n LocalNonlinearity(ρ -> C * ρ^α)]\nmodel = Model(lattice, atoms, positions; n_electrons, terms,\n spin_polarization=:spinless); # use \"spinless electrons\"\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We discretize using a moderate Ecut and run a SCF algorithm to compute forces afterwards. As there is no ionic charge associated to gauss we have to specify a starting density and we choose to start from a zero density.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))\nρ = zeros(eltype(basis), basis.fft_size..., 1)\nscfres = self_consistent_field(basis; tol=1e-5, ρ)\nscfres.energies","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Computing the forces can then be done as usual:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"compute_forces(scfres)","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract the converged total local potential","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract other quantities before plotting them","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ρ = scfres.ρ[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1] # first k-point, all G components, first eigenvector","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\n\nusing Plots\nx = a * vec(first.(DFTK.r_vectors(basis)))\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")\nplot!(p, x, tot_local_pot, label=\"tot local pot\")","category":"page"},{"location":"#DFTK.jl:-The-density-functional-toolkit.","page":"Home","title":"DFTK.jl: The density-functional toolkit.","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"#getting-started","page":"Home","title":"Getting started","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Convergence parameters in the documentation\nIn the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!","category":"page"},{"location":"developer/conventions/#Notation-and-conventions","page":"Notation and conventions","title":"Notation and conventions","text":"","category":"section"},{"location":"developer/conventions/#Usage-of-unicode-characters","page":"Notation and conventions","title":"Usage of unicode characters","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.","category":"page"},{"location":"developer/conventions/#symbol-conventions","page":"Notation and conventions","title":"Symbol conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Reciprocal-space vectors: k for vectors in the Brillouin zone, G for vectors of the reciprocal lattice, q for general vectors\nReal-space vectors: R for lattice vectors, r and x are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.\nOmega is the unit cell, and Omega (or sometimes just Omega) is its volume.\nA are the real-space lattice vectors (model.lattice) and B the Brillouin zone lattice vectors (model.recip_lattice).\nThe Bloch waves are\npsi_nk(x) = e^ikcdot x u_nk(x)\nwhere n is the band index and k the k-point. In the code we sometimes use psi and u interchangeably.\nvarepsilon are the eigenvalues, varepsilon_F is the Fermi level.\nrho is the density.\nIn the code we use normalized plane waves:\ne_G(r) = frac 1 sqrtOmega e^i G cdot r\nY^l_m are the complex spherical harmonics, and Y_lm the real ones.\nj_l are the Bessel functions. In particular, j_0(x) = fracsin xx.","category":"page"},{"location":"developer/conventions/#Units","page":"Notation and conventions","title":"Units","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful\nusing UnitfulAtomic\naustrip(10u\"eV\") # 10eV in Hartree","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful: Å\nusing UnitfulAtomic\nauconvert(Å, 1.2) # 1.2 Bohr in Ångström","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Differing unit conventions\nDifferent electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.","category":"page"},{"location":"developer/conventions/#conventions-lattice","page":"Notation and conventions","title":"Lattices and lattice vectors","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still 3 times 3 matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by A and the reciprocal-space lattice vectors by B = 2pi A^-T.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Row-major versus column-major storage order\nJulia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices A before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"We use the convention that the unit cell in real space is 0 1)^3 in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is -12 12)^3.","category":"page"},{"location":"developer/conventions/#Reduced-and-cartesian-coordinates","page":"Notation and conventions","title":"Reduced and cartesian coordinates","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as k, G, q or real-space vectors like r and R (see Symbol conventions). One switches to Cartesian coordinates by","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"x_textcart = M x_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"where M is either A / model.lattice (for real-space vectors) or B / model.recip_lattice (for reciprocal-space vectors). A useful relationship is","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"b_textcart cdot a_textcart=2pi b_textred cdot a_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"if a and b are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for G-vectors) or fractional coordinates (usually for k-points).","category":"page"},{"location":"developer/conventions/#Normalization-conventions","page":"Notation and conventions","title":"Normalization conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points and in reciprocal space its coefficients are ell^2-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"EditURL = \"../../../examples/anyons.jl\"","category":"page"},{"location":"examples/anyons/#Anyonic-models","page":"Anyonic models","title":"Anyonic models","text":"","category":"section"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 14\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);\n\n# Parameters\nEcut = 50\nn_electrons = 1\nβ = 5;\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(; scaling_factor=2),\n ExternalFromReal(X -> pot(X...)),\n Anyonic(1, β)\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # \"spinless electrons\"\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-14) # Reduce tol for production\nE = scfres.energies.total\ns = 2\nE11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β\nprintln(\"e(1,1) / (2π) = \", E11 / (2π))\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"}] +} diff --git a/v0.6.16/siteinfo.js b/v0.6.16/siteinfo.js new file mode 100644 index 0000000000..33be6c40f7 --- /dev/null +++ b/v0.6.16/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.6.16"; diff --git a/v0.6.16/tricks/parallelization/index.html b/v0.6.16/tricks/parallelization/index.html new file mode 100644 index 0000000000..ed91091738 --- /dev/null +++ b/v0.6.16/tricks/parallelization/index.html @@ -0,0 +1,52 @@ + +Timings and parallelization · DFTK.jl

    Timings and parallelization

    This section summarizes the options DFTK offers to monitor and influence performance of the code.

    Timing measurements

    By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.

    For example to measure the timing of an SCF:

    DFTK.reset_timer!(DFTK.timer)
    +scfres = self_consistent_field(basis, tol=1e-5)
    +
    +DFTK.timer
     ────────────────────────────────────────────────────────────────────────────────
    +                                        Time                    Allocations      
    +                               ───────────────────────   ────────────────────────
    +       Tot / % measured:            359ms /  50.4%           76.8MiB /  72.4%    
    +
    + Section               ncalls     time    %tot     avg     alloc    %tot      avg
    + ────────────────────────────────────────────────────────────────────────────────
    + self_consistent_field      1    180ms  100.0%   180ms   55.6MiB  100.0%  55.6MiB
    +   LOBPCG                  24   63.4ms   35.1%  2.64ms   15.6MiB   28.1%   666KiB
    +     DftHamiltonian...     65   47.7ms   26.4%   734μs   5.23MiB    9.4%  82.4KiB
    +       local+kinetic      433   45.2ms   25.0%   104μs    311KiB    0.5%     736B
    +       nonlocal            65    903μs    0.5%  13.9μs   1.21MiB    2.2%  19.0KiB
    +     ortho! X vs Y         58   4.40ms    2.4%  75.9μs   1.72MiB    3.1%  30.3KiB
    +       ortho!             115   2.15ms    1.2%  18.7μs    938KiB    1.6%  8.16KiB
    +     rayleigh_ritz         41   4.12ms    2.3%   101μs   1.55MiB    2.8%  38.7KiB
    +       ortho!              41    506μs    0.3%  12.3μs    230KiB    0.4%  5.61KiB
    +     preconditioning       65   1.86ms    1.0%  28.7μs    307KiB    0.5%  4.73KiB
    +     Update residuals      65    784μs    0.4%  12.1μs   1.00MiB    1.8%  15.8KiB
    +     ortho!                24    480μs    0.3%  20.0μs    148KiB    0.3%  6.16KiB
    +   compute_density          8   49.1ms   27.2%  6.14ms   5.57MiB   10.0%   712KiB
    +     symmetrize_ρ           8   43.1ms   23.9%  5.39ms   4.45MiB    8.0%   570KiB
    +   energy_hamiltonian      17   24.2ms   13.4%  1.43ms   27.3MiB   49.1%  1.61MiB
    +     ene_ops               17   22.2ms   12.3%  1.30ms   17.8MiB   32.0%  1.05MiB
    +       ene_ops: xc         17   18.3ms   10.1%  1.08ms   7.98MiB   14.4%   481KiB
    +       ene_ops: har...     17   2.26ms    1.3%   133μs   7.66MiB   13.8%   462KiB
    +       ene_ops: non...     17    676μs    0.4%  39.8μs    264KiB    0.5%  15.5KiB
    +       ene_ops: kin...     17    360μs    0.2%  21.2μs    160KiB    0.3%  9.43KiB
    +       ene_ops: local      17    237μs    0.1%  13.9μs   1.56MiB    2.8%  93.8KiB
    +   ortho_qr                 3    136μs    0.1%  45.2μs    102KiB    0.2%  33.9KiB
    +   χ0Mixing                 8   55.0μs    0.0%  6.87μs   45.6KiB    0.1%  5.70KiB
    + enforce_real!              1   81.2μs    0.0%  81.2μs   1.69KiB    0.0%  1.69KiB
    + ────────────────────────────────────────────────────────────────────────────────

    The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.

    Timing measurements and stack traces

    Timing measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.

    Rough timing estimates

    A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.

    function estimate_time_per_scf_step(basis::PlaneWaveBasis)
    +    # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.
    +    time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3
    +
    +    (time_per_FFT_per_grid_point
    +     * prod(basis.fft_size)
    +     * length(basis.kpoints)
    +     * div(basis.model.n_electrons, DFTK.filled_occupation(basis.model), RoundUp)
    +     * 8  # mean number of FFT steps per state per k-point per iteration
    +     )
    +end
    +
    +"Time per SCF (s):  $(estimate_time_per_scf_step(basis))"
    "Time per SCF (s):  0.008009033203124998"

    Options for parallelization

    At the moment DFTK offers two ways to parallelize a calculation, firstly shared-memory parallelism using threading and secondly multiprocessing using MPI (via the MPI.jl Julia interface). MPI-based parallelism is currently only over $k$-points, such that it cannot be used for calculations with only a single $k$-point. Otherwise combining both forms of parallelism is possible as well.

    The scaling of both forms of parallelism for a number of test cases is demonstrated in the following figure. These values were obtained using DFTK version 0.1.17 and Julia 1.6 and the precise scalings will likely be different depending on architecture, DFTK or Julia version. The rough trends should, however, be similar.

    The MPI-based parallelization strategy clearly shows a superior scaling and should be preferred if available.

    MPI-based parallelism

    Currently DFTK uses MPI to distribute on $k$-points only. This implies that calculations with only a single $k$-point cannot use make use of this. For details on setting up and configuring MPI with Julia see the MPI.jl documentation.

    1. First disable all threading inside DFTK, by adding the following to your script running the DFTK calculation:

      using DFTK
      +disable_threading()
    2. Run Julia in parallel using the mpiexecjl wrapper script from MPI.jl:

      mpiexecjl -np 16 julia myscript.jl

      In this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.

    As usual with MPI printing will be garbled. You can use

    DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())

    at the top of your script to disable printing on all processes but one.

    MPI-based parallelism not fully supported

    While standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.

    Thread-based parallelism

    Threading in DFTK currently happens on multiple layers distributing the workload over different $k$-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:

    1. Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:

      using DFTK
      +setup_threading()

      This disables FFT threading and sets the number of BLAS threads to the number of Julia threads.

    2. Run Julia passing the desired number of threads using the flag -t:

      julia -t 8 myscript.jl

    For some cases (e.g. a single $k$-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.

    Advanced threading tweaks

    The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.

    BLAS threads

    All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use

    using LinearAlgebra
    +BLAS.set_num_threads(N)

    where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use

    Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))

    or (from Julia 1.6) simply BLAS.get_num_threads().

    Julia threads

    On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over $k$-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().

    FFT threads

    Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use

    using FFTW
    +FFTW.set_num_threads(N)

    where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.

    diff --git a/v0.6.16/tricks/scaling.png b/v0.6.16/tricks/scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..17d1c2777954ab87f29869adee23d0495380b7cd GIT binary patch literal 95834 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

    Saving SCF results on disk and SCF checkpoints

    For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.

    To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package.

    Availability of `load_scfres`, `save_scfres` and checkpointing

    As JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).

    DFTK data formats are not yet fully matured

    The data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.

    To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:

    using DFTK
    +using LinearAlgebra
    +using JLD2
    +
    +d = 2.079  # oxygen-oxygen bondlength
    +a = 9.0    # size of the simulation box
    +lattice = a * I(3)
    +O = ElementPsp(:O; psp=load_psp("hgh/pbe/O-q6.hgh"))
    +atoms     = [O, O]
    +positions = d / 2a * [[0, 0, 1], [0, 0, -1]]
    +magnetic_moments = [1., 1.]
    +
    +Ecut  = 10  # Far too small to be converged
    +model = model_PBE(lattice, atoms, positions; temperature=0.02, smearing=Smearing.Gaussian(),
    +                  magnetic_moments)
    +basis = PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])
    +
    +scfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))
    +save_scfres("scfres.jld2", scfres);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -27.64588026674                   -0.13    0.001    6.5   94.6ms
    +  2   -28.92273842916        0.11       -0.82    0.681    2.0   76.4ms
    +  3   -28.93110928550       -2.08       -1.14    1.187    2.5    118ms
    +  4   -28.93771876354       -2.18       -1.19    1.772    2.0   70.6ms
    +  5   -28.93951992311       -2.74       -1.44    1.998    1.5   77.0ms
    +  6   -28.93960102541       -4.09       -2.06    1.979    1.0    110ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.7701775
    +    AtomicLocal         -58.4937464
    +    AtomicNonlocal      4.7105709 
    +    Ewald               -4.8994689
    +    PspCorrection       0.0044178 
    +    Hartree             19.3603323
    +    Xc                  -6.3908252
    +    Entropy             -0.0010590
    +
    +    total               -28.939601025405

    The scfres.jld2 file could now be transferred to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:

    using DFTK
    +using JLD2
    +loaded = load_scfres("scfres.jld2")
    +propertynames(loaded)
    (:α, :history_Δρ, :converged, :occupation, :occupation_threshold, :algorithm, :basis, :runtime_ns, :n_iter, :history_Etot, :εF, :energies, :ρ, :n_bands_converge, :eigenvalues, :ψ, :ham)
    loaded.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.7701775
    +    AtomicLocal         -58.4937464
    +    AtomicNonlocal      4.7105709 
    +    Ewald               -4.8994689
    +    PspCorrection       0.0044178 
    +    Hartree             19.3603323
    +    Xc                  -6.3908252
    +    Entropy             -0.0010590
    +
    +    total               -28.939601025405

    Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres("scfres.jld2")) directly from the stored data.

    Notice that both load_scfres and save_scfres work by transferring all data to/from the master process, which performs the IO operations without parallelisation. Since this can become slow, both functions support optional arguments to speed up the processing. An overview:

    • save_scfres("scfres.jld2", scfres; save_ψ=false) avoids saving the Bloch wave, which is usually faster and saves storage space.
    • load_scfres("scfres.jld2", basis) avoids reconstructing the basis from the file, but uses the passed basis instead. This save the time of constructing the basis twice and allows to specify parallelisation options (via the passed basis). Usually this is useful for continuing a calculation on a supercomputer or cluster.

    See also the discussion on Input and output formats on JLD2 files.

    Checkpointing of SCF calculations

    A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.

    The easiest way to enable checkpointing is to use the kwargs_scf_checkpoints function, which does two things. (1) It sets up checkpointing using the ScfSaveCheckpoints callback and (2) if a checkpoint file is detected, the stored density is used to continue the calculation instead of the usual atomic-orbital based guess. In practice this is done by modifying the keyword arguments passed to # self_consistent_field appropriately, e.g. by using the density or orbitals from the checkpoint file. For example:

    checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))
    +scfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)
    (ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-7.847975050004954 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057803 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [5.660687204883955 5.430189423521898 … 4.799729928112022 5.430186046300199; 5.43018437600445 5.210099789252063 … 4.6108436754474695 5.210091297775344; … ; 4.799721210017378 4.610838361367349 … 4.099991447862748 4.610844460672134; 5.430184873949137 5.210094320866144 … 4.610851237634245 5.210096909768915;;; 5.5400530380404795 5.337756098289187 … 4.7587134804500995 5.337750212760438; 5.337745515959134 5.139509199127048 … 4.579385158661678 5.139496469778237; … ; 4.758711773886423 4.579386591348073 … 4.0843308275141785 4.579394231571466; 5.337754136338312 5.139507654148144 … 4.579396993877761 5.139510383365402;;; 5.246346391274313 5.103576751371843 … 4.634186808047783 5.103570404967808; 5.103557921098564 4.951671324388312 … 4.475650725301795 4.951652519285912; … ; 4.634188103992829 4.475656473271028 … 4.016037845224851 4.475671296009651; 5.103578926361959 4.951673490850062 … 4.475673098747112 4.951681927867899;;; … ;;; 4.914412006838948 4.8098471960108675 … 4.415287222608904 4.809838483060078; 4.809853119449727 4.6886156877184435 … 4.272568240076573 4.688584627266074; … ; 4.415243540780435 4.27253362306247 … 3.844192620660163 4.2725564743201545; 4.809815203822692 4.6885623864707044 … 4.27258327659908 4.688577622807004;;; 5.2463991970772055 5.103627521160467 … 4.634233065491213 5.103624114138177; 5.103631054935368 4.951739797074689 … 4.475695568373353 4.951717203846751; … ; 4.634195201228519 4.475665025185416 … 4.0160620475391235 4.475686979524041; 5.103605515383636 4.951699939450032 … 4.475710687574694 4.9517161170864945;;; 5.540077013505925 5.337776643903721 … 4.758733587376022 5.337774986679939; 5.337775837720017 5.139535788782547 … 4.579402810234464 5.13952350180369; … ; 4.758711182300834 4.5793855541152455 … 4.084339600478135 4.579398524657231; 5.337765847899609 5.139516968476281 … 4.5794134025078295 5.139526133492394]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-1.0071933804923108 -0.9754648231263993 … -0.8483124011237588 -0.9754763678755034; -0.9754345928991668 -0.930979034387413 … -0.8471763571842483 -0.9309705783133035; … ; -0.8482979666767809 -0.8472389016578712 … -0.6667359886507563 -0.847243530651961; -0.9754377801958041 -0.9309813398592682 … -0.8471759592289698 -0.9309669368862966;;; -0.9896102080182825 -0.9543153324309138 … -0.9003567346402598 -0.9543143325717789; -0.9543083299859366 -0.9325648856489065 … -0.878597949573787 -0.9325582085879709; … ; -0.9003616602939167 -0.8786002642997214 … -0.7907133130900146 -0.8786092711371062; -0.954296370529241 -0.9325576244170274 … -0.8785904252247841 -0.9325623774117895;;; -0.7543977583643844 -0.856572142018156 … -0.9142754400778438 -0.8565722998693428; -0.8565581108933135 -0.8894309088606245 … -0.9070585469696447 -0.889409467969974; … ; -0.9142655659877559 -0.9070524518609325 … -0.8645909129247856 -0.9070667849223263; -0.8565602527683257 -0.8894076812428235 … -0.9070676683237889 -0.8894324030894549;;; … ;;; -0.6143689858713025 -0.8434537820857362 … -0.9681662907125581 -0.8434421726348897; -0.8434465978112169 -0.9184426964517891 … -0.9579486438712194 -0.9183757034576845; … ; -0.9681264990102703 -0.9579201516487824 … -0.9347470187942374 -0.9579542044056707; -0.8434066251705162 -0.9183598654997882 … -0.957983091901088 -0.9184165547402127;;; -0.7543919005687126 -0.856575607214692 … -0.9142867268325677 -0.8565712452387131; -0.8565660841129022 -0.8894532900829308 … -0.9070612542817893 -0.8894118472745215; … ; -0.9142564232861355 -0.9070440136040437 … -0.8646016091959352 -0.9070681636117768; -0.8565507876653952 -0.8894051170501319 … -0.9070947782655808 -0.8894460466242832;;; -0.9895970829980835 -0.9543110721831422 … -0.9003479837452196 -0.9543079995962055; -0.9543051887467922 -0.9325729356764495 … -0.8785813722678064 -0.9325635592622381; … ; -0.9003399969442333 -0.8785810682770303 … -0.7907072318717203 -0.8785949193370151; -0.954306324519844 -0.9325567249197493 … -0.8786051064710111 -0.9325726837989045]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-3.194481225613309 -2.813703839810184 … -2.035014646491227 -2.813718761780985; -2.8136786571003984 -2.5026286929344264 … -1.890995353004296 -2.5026287283370356; … ; -2.0350089301388925 -1.8910632115580397 … -1.4016116919508907 -1.8910617412473438; -2.8136813464523494 -2.5026364667922008 … -1.890987392862242 -2.502619474916458;;; -4.348991575752526 -3.7042235981723137 … -2.5146335906006168 -3.704228483841928; -3.7042271780573897 -3.210817490057204 … -2.256510611894731 -3.2108235423450795; … ; -2.514640222817948 -2.25651149393427 … -1.6903337895715467 -2.256512860548264; -3.7042065982215164 -3.210811773804229 … -2.2564912523296456 -3.210813797581733;;; -12.702516148147877 -7.9680112266757375 … -3.540236165497665 -7.968017730930957; -7.968016025824176 -5.683250859231601 … -3.0729162622250987 -5.68324822344335; … ; -3.5402249954625287 -3.072904419147155 … -2.1393265307614917 -3.0729039294699256; -7.967997162435792 -5.6832254651520495 … -3.072903010133926 -5.683241749980844;;; … ;;; -28.841009493577378 -14.82384976281868 … -4.218810472032715 -14.823846866318618; -14.823836655105302 -8.85927903615299 … -3.6083277603061736 -8.859243103611256; … ; -4.218814362158895 -3.60833388509784 … -2.4248672706319216 -3.6083450865970437; -14.823834598091636 -8.85924950644873 … -3.608347171813536 -8.859290959352855;;; -12.70245748454931 -7.967963922083648 … -3.5402011948089576 -7.967962967129958; -7.967950865206959 -5.68320476776753 … -3.0728741264656856 -5.683185918187059; … ; -3.5402087555252186 -3.072887428975877 … -2.1393130247183674 -3.072889624644986; -7.967961108311184 -5.6831964523593905 … -3.0728925312481357 -5.683221204297079;;; -4.348954475266882 -3.704198792310008 … -2.514604732779654 -3.7041973769468535; -3.7041937150573627 -3.210798950429247 … -2.256476383015964 -3.210801860993893; … ; -2.514619151053854 -2.2564933351444068 … -1.6903189353892962 -2.256494215662407; -3.7042048406508234 -3.2108015599788136 … -2.2564895249458043 -3.210808353841856]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, NamedTuple{(:ψ_reals,), Tuple{Array{ComplexF64, 3}}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-7.847975050004954 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057803 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [5.660687204883955 5.430189423521898 … 4.799729928112022 5.430186046300199; 5.43018437600445 5.210099789252063 … 4.6108436754474695 5.210091297775344; … ; 4.799721210017378 4.610838361367349 … 4.099991447862748 4.610844460672134; 5.430184873949137 5.210094320866144 … 4.610851237634245 5.210096909768915;;; 5.5400530380404795 5.337756098289187 … 4.7587134804500995 5.337750212760438; 5.337745515959134 5.139509199127048 … 4.579385158661678 5.139496469778237; … ; 4.758711773886423 4.579386591348073 … 4.0843308275141785 4.579394231571466; 5.337754136338312 5.139507654148144 … 4.579396993877761 5.139510383365402;;; 5.246346391274313 5.103576751371843 … 4.634186808047783 5.103570404967808; 5.103557921098564 4.951671324388312 … 4.475650725301795 4.951652519285912; … ; 4.634188103992829 4.475656473271028 … 4.016037845224851 4.475671296009651; 5.103578926361959 4.951673490850062 … 4.475673098747112 4.951681927867899;;; … ;;; 4.914412006838948 4.8098471960108675 … 4.415287222608904 4.809838483060078; 4.809853119449727 4.6886156877184435 … 4.272568240076573 4.688584627266074; … ; 4.415243540780435 4.27253362306247 … 3.844192620660163 4.2725564743201545; 4.809815203822692 4.6885623864707044 … 4.27258327659908 4.688577622807004;;; 5.2463991970772055 5.103627521160467 … 4.634233065491213 5.103624114138177; 5.103631054935368 4.951739797074689 … 4.475695568373353 4.951717203846751; … ; 4.634195201228519 4.475665025185416 … 4.0160620475391235 4.475686979524041; 5.103605515383636 4.951699939450032 … 4.475710687574694 4.9517161170864945;;; 5.540077013505925 5.337776643903721 … 4.758733587376022 5.337774986679939; 5.337775837720017 5.139535788782547 … 4.579402810234464 5.13952350180369; … ; 4.758711182300834 4.5793855541152455 … 4.084339600478135 4.579398524657231; 5.337765847899609 5.139516968476281 … 4.5794134025078295 5.139526133492394]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-1.0124391714199676 -0.9779267397591492 … -0.9022625083464118 -0.9779332670212225; -0.9779056117267536 -0.9435921238269602 … -0.8435190007384193 -0.9435840323051246; … ; -0.9021391981220493 -0.8436569252949604 … -0.7653513830169646 -0.8436677097683289; -0.9779081175324905 -0.9435953816567945 … -0.8435199394490132 -0.9435865006659677;;; -1.0022758033484909 -0.9662701887245403 … -0.8942531388486158 -0.9662683110619307; -0.9662574508437306 -0.938273624744277 … -0.8654768741600669 -0.938270722581362; … ; -0.8942194679830832 -0.8655275835804279 … -0.7840485686059728 -0.8655255146468707; -0.9662663089168092 -0.9382824739921414 … -0.8654842657515185 -0.9382764612101968;;; -0.8145481572075444 -0.8332228163445471 … -0.8253416532461453 -0.8332114387872873; -0.8331957822977577 -0.8334154941341444 … -0.8162038978865171 -0.8334102374914067; … ; -0.8253756727005807 -0.8162272446185819 … -0.7768321385485348 -0.816228158166433; -0.8332173188219884 -0.833434386887772 … -0.8162198424185052 -0.833419205566413;;; … ;;; -0.690930150648172 -0.7868100595390544 … -0.8343064211448801 -0.7868160638806847; -0.7868349286201878 -0.8127116239947859 … -0.8260908591235101 -0.8127461815235498; … ; -0.834310826652287 -0.8260876232938519 … -0.8100193611527224 -0.8260769002864584; -0.7868163426091533 -0.8127258317282444 … -0.8260657068664183 -0.8126926297206378;;; -0.8145655337863439 -0.8332186105827196 … -0.8253498194592668 -0.833223168148886; -0.8332183034306994 -0.8334129091377667 … -0.8162246846143155 -0.8334319117078131; … ; -0.8253664952131319 -0.8162171398906605 … -0.7768196988504888 -0.8162154514497874; -0.8332091350394425 -0.8334183129196281 … -0.8162082574661756 -0.8334071684062748;;; -1.0022840829429756 -0.966270400239965 … -0.8942579653811449 -0.966273267077401; -0.9662609500310099 -0.9382708504795846 … -0.8654955699937421 -0.9382755695817461; … ; -0.8942293170856987 -0.8655243171279309 … -0.7840448106371015 -0.8655222172468334; -0.9662653095589946 -0.9382741075551022 … -0.8654901969663389 -0.9382699163549981]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-3.199727016540966 -2.816165756442934 … -2.0889647537138796 -2.8161756609267043; -2.816149675927985 -2.5152417823739732 … -1.887337996558467 -2.5152421823288567; … ; -2.088850161584161 -1.887481235195129 … -1.500227086317099 -1.8874859203637118; -2.8161516837890357 -2.5152505085897268 … -1.8873313730822854 -2.5152390386961287;;; -4.361657171082735 -3.71617845446594 … -2.5085299948089728 -3.7161824623320796; -3.7161762989151836 -3.2165262291525747 … -2.2433895364810112 -3.2165360563384704; … ; -2.5084980305071145 -2.2434388132149765 … -1.683669045087505 -2.2434291040580288; -3.7161765366090846 -3.2165366233793433 … -2.24338509285638 -3.21652788138014;;; -12.762666546991039 -7.944661901002128 … -3.4513023786659662 -7.944656869848902; -7.94465369722862 -5.627235444505121 … -2.982061613141971 -5.627248992964783; … ; -3.4513351021753538 -2.9820792119048045 … -2.051567756385241 -2.9820653027140325; -7.944654228489456 -5.627252170796998 … -2.982055184228642 -5.627228552457803;;; … ;;; -28.917570658354247 -14.767206040271997 … -4.084950602465037 -14.767220757564413; -14.767224985914272 -8.753547963695988 … -3.476469975558464 -8.753613581677122; … ; -4.084998689800912 -3.4765013567429093 … -2.3001396129904066 -3.4764677824778314; -14.767244315530274 -8.753615472677186 … -3.4764297867788665 -8.75356703433328;;; -12.76263111776694 -7.944606925451676 … -3.4512642874356567 -7.944614890040132; -7.944603084524756 -5.627164386822367 … -2.982037556798212 -5.62720598262035; … ; -3.451318827452215 -2.982060555262494 … -2.051531114372921 -2.9820369124829966; -7.944619455685231 -5.627209648228886 … -2.9820060104487305 -5.627182326079071;;; -4.361641475211774 -3.716158120366831 … -2.5085147144155795 -3.7161626444280493; -3.7161494763415805 -3.216496865232382 … -2.2433905807418997 -3.216513871313401; … ; -2.5085084711953196 -2.243436583995307 … -1.6836565141546775 -2.2434215135722253; -3.716163825689974 -3.216518942614167 … -2.243374615441132 -3.2165055863979495]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, NamedTuple{(:ψ_reals,), Tuple{Array{ComplexF64, 3}}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.93960345658775), converged = true, occupation_threshold = 1.0e-6, ρ = [0.4340450181540018 0.38353941597180535 … 0.25505646749193756 0.3835393122509116; 0.3835407890745086 0.33716881310006996 … 0.222187395481287 0.3371681731737376; … ; 0.25505891195044383 0.22218908809894602 … 0.1447186160531636 0.22218952667746272; 0.38354037481876946 0.3371680196687881 … 0.2221881162617144 0.33716858657624726;;; 0.3631705632670393 0.34779620560579727 … 0.27198012101177643 0.3477955091296435; 0.3477983073934624 0.3262053652084331 … 0.24595053606158618 0.32620009172949516; … ; 0.2719790598817561 0.24594508387225078 … 0.1735848697793241 0.2459501090028444; 0.34779420994105814 0.3261953334517622 … 0.2459491974004035 0.32620005363887833;;; 0.21370686859294774 0.27316109274454137 … 0.3101261680294397 0.2731606508026212; 0.27315449622781796 0.30452964084099043 … 0.2989479193979348 0.30451238566987904; … ; 0.31011568055109645 0.29893427006605955 … 0.23790790780966425 0.29895279022821114; 0.27315751854811693 0.30451087906031604 … 0.29895728979572966 0.30452894699063193;;; … ;;; 0.1440138432506288 0.24598421576552248 … 0.3456197053411254 0.24597868023933986; 0.24597940249459121 0.3072875762113384 … 0.34238336293123484 0.30724154391973746; … ; 0.3455744976764452 0.3423567349527161 … 0.28563892730478074 0.3423941780835998; 0.24595366139566066 0.3072295692097322 … 0.3424222289350383 0.30726550521431745;;; 0.21370572207266986 0.27316949052075234 … 0.31013875018764697 0.27316795646378406; 0.2731638453440678 0.3045474547183789 … 0.2989442204512405 0.3045152345995345; … ; 0.31010728655720377 0.2989279275760804 … 0.23792053936220903 0.298957149694553; 0.2731517858559677 0.30451034122351933 … 0.2989776039236393 0.3045393180705814;;; 0.36316948207850286 0.3477958880150706 … 0.2719795216920382 0.34779615576151285; 0.3477927505922822 0.3262023573194207 … 0.24593854447326483 0.32619097797830093; … ; 0.27196993942381503 0.2459359773251577 … 0.17358610768055757 0.24594716875926653; 0.34779200198605054 0.32619215136056173 … 0.24595430365376666 0.32620373650040796;;;; 0.43835199273321135 0.38780513990909266 … 0.25922622729137934 0.38780382458105617; 0.3878014032435458 0.34139594094595554 … 0.22628238368328654 0.3413972306308475; … ; 0.25922571484303375 0.22628247903919035 … 0.1485061875058233 0.22628107891275054; 0.3878061862300851 0.3414014130459969 … 0.22628223383160748 0.34139855166498095;;; 0.36537498319422473 0.3373502213665551 … 0.24781848766494388 0.3373449545314394; 0.33734266216042297 0.30790101881559767 … 0.22149293333705575 0.307897605151064; … ; 0.2478241374408818 0.22150130661863474 … 0.15364853560197533 0.2214999469703621; 0.33735159176857377 0.30790931741526717 … 0.22149838713540157 0.30790452561447357;;; 0.2126529032251746 0.23124519006446936 … 0.2227889932368635 0.2312371188913998; 0.23123528223440984 0.23693920231507778 … 0.21020841408691085 0.23693270331842434; … ; 0.2228035897598474 0.21022610929492488 … 0.16307006011604433 0.21022514764805939; 0.23124947912437055 0.23695159522364043 … 0.21021915384211293 0.23694518527740094;;; … ;;; 0.1423709798361319 0.18287761305241307 … 0.21226891471595905 0.1828777274130438; 0.18289128194498724 0.20500434510528265 … 0.2058620191366452 0.20501026091611757; … ; 0.21226673999902793 0.2058526206238313 … 0.16764049609413723 0.2058497659277857; 0.18287339465941632 0.20499471447785053 … 0.2058490983342735 0.20498927466831793;;; 0.21265660658936011 0.23124063337128317 … 0.22279154094129103 0.23124327210871692; 0.23124937003141677 0.23694333791150446 … 0.21022004649858445 0.23694985938301003; … ; 0.22278790171815505 0.21021040254759432 … 0.16305738643087644 0.21020995746505797; 0.23124063511439702 0.23693895469915166 … 0.21021098627851723 0.23693732948488022;;; 0.36537784299560666 0.3373481269302391 … 0.2478216844223618 0.3373499351643933; 0.337349783940137 0.3079026915254822 … 0.22150074016955099 0.30790757474481506; … ; 0.24781858889288033 0.22149497321128264 … 0.15364312432575683 0.2214942724465364; 0.3373497165790125 0.30790449923303725 … 0.22149604202661283 0.30790320942296584], α = 0.8, eigenvalues = [[-1.335162686261445, -0.7240211634989027, -0.4460268417236975, -0.4459765171853096, -0.4074014310969641, -0.05960078456640969, -0.05954780984707565, 0.014991362203442358, 0.19476311786834388, 0.2077882347707377, 0.2420263837328374], [-1.3030158643679781, -0.6645018967578127, -0.39224944057151123, -0.3922349507606333, -0.37557269736580345, 0.01220169783618898, 0.012217371317045056, 0.026884616978362544, 0.2067088348799348, 0.21355771933635748, 0.2593953221650206]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9937000864891833, 0.9936332717606021, 0.002721486038290925, 1.98403704173918e-54, 7.799154550071653e-61, 2.0113367937189803e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.004906954058717223, 0.004891217068458902, 0.0001469845847470061, 2.7341504514772255e-60, 8.658262080751394e-64, 8.001375065818833e-90]], εF = -0.024317794977571618, n_bands_converge = 8, n_iter = 6, ψ = Matrix{ComplexF64}[[-0.11821633484993962 + 0.23701981107157225im -1.4055696872150964e-6 + 2.9634341825705796e-6im … -0.016167573828414848 + 0.07886425395543414im 1.5724192373423544e-6 + 2.1806054351740266e-6im; -0.08928407247924566 + 0.1790124729822496im 3.449898438459417e-5 + 6.171332604430774e-6im … -0.021551962539750457 + 0.0951654939254597im 0.34054470102801465 - 0.019017499857711954im; … ; -0.027172234398718177 + 0.05447961298332534im -0.0584262417320896 - 0.0261397454111476im … -0.0038203516706509805 + 0.017505770198134138im 0.0009492607956043014 - 0.012639887557372803im; -0.049871820167264456 + 0.0999895680397302im -0.1256690762835807 - 0.05621141091472531im … -0.003528978332813421 + 0.015419310711324312im -0.017023050961252693 - 0.02872723165055257im], [-0.26016927200008994 - 0.025717184217141538im -1.0379858667079817e-5 + 2.6662144297705663e-6im … 0.07010159125696581 - 0.04603952649084879im -7.539221850863461e-6 - 8.568011450137384e-6im; -0.196417013953985 - 0.019421148884473792im -1.7537011753236396e-5 - 1.735400147007219e-5im … 0.07989168348855352 - 0.05153112438723773im -0.08830300174100587 - 0.3321608546529886im; … ; -0.06058294551391053 - 0.0059883847308797415im -0.016050373861858903 - 0.06256665927516455im … 0.014366647845926526 - 0.009341634594447824im -0.013049364083338507 - 0.00038942452546533995im; -0.1108983163994691 - 0.010965787175884489im -0.034384911649624865 - 0.13403103252536117im … 0.012680618994643159 - 0.008163338685680971im -0.02654830460394253 + 0.021001357920273262im]], diagonalization = NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), Tuple{Vector{Vector{Float64}}, Vector{Matrix{ComplexF64}}, Vector{Vector{Float64}}, Vector{Int64}, Bool, Int64}}[(λ = [[-1.335162686261445, -0.7240211634989027, -0.4460268417236975, -0.4459765171853096, -0.4074014310969641, -0.05960078456640969, -0.05954780984707565, 0.014991362203442358, 0.19476311786834388, 0.2077882347707377, 0.2420263837328374], [-1.3030158643679781, -0.6645018967578127, -0.39224944057151123, -0.3922349507606333, -0.37557269736580345, 0.01220169783618898, 0.012217371317045056, 0.026884616978362544, 0.2067088348799348, 0.21355771933635748, 0.2593953221650206]], X = [[-0.11821633484993962 + 0.23701981107157225im -1.4055696872150964e-6 + 2.9634341825705796e-6im … -0.016167573828414848 + 0.07886425395543414im 1.5724192373423544e-6 + 2.1806054351740266e-6im; -0.08928407247924566 + 0.1790124729822496im 3.449898438459417e-5 + 6.171332604430774e-6im … -0.021551962539750457 + 0.0951654939254597im 0.34054470102801465 - 0.019017499857711954im; … ; -0.027172234398718177 + 0.05447961298332534im -0.0584262417320896 - 0.0261397454111476im … -0.0038203516706509805 + 0.017505770198134138im 0.0009492607956043014 - 0.012639887557372803im; -0.049871820167264456 + 0.0999895680397302im -0.1256690762835807 - 0.05621141091472531im … -0.003528978332813421 + 0.015419310711324312im -0.017023050961252693 - 0.02872723165055257im], [-0.26016927200008994 - 0.025717184217141538im -1.0379858667079817e-5 + 2.6662144297705663e-6im … 0.07010159125696581 - 0.04603952649084879im -7.539221850863461e-6 - 8.568011450137384e-6im; -0.196417013953985 - 0.019421148884473792im -1.7537011753236396e-5 - 1.735400147007219e-5im … 0.07989168348855352 - 0.05153112438723773im -0.08830300174100587 - 0.3321608546529886im; … ; -0.06058294551391053 - 0.0059883847308797415im -0.016050373861858903 - 0.06256665927516455im … 0.014366647845926526 - 0.009341634594447824im -0.013049364083338507 - 0.00038942452546533995im; -0.1108983163994691 - 0.010965787175884489im -0.034384911649624865 - 0.13403103252536117im … 0.012680618994643159 - 0.008163338685680971im -0.02654830460394253 + 0.021001357920273262im]], residual_norms = [[0.000628293145588369, 0.0014616800682611438, 0.0006294230070569281, 0.0006035984258488821, 0.0005254473569099554, 0.0007933396026455503, 0.0007539278074451025, 0.0011859255301829344, 0.0012443595243434964, 0.0017282357934637357, 0.002464399543838246], [0.0004933181118064525, 0.001235974991404451, 0.0010397481888953614, 0.0009010875809596211, 0.000680922664190879, 0.0017835863387674622, 0.0018008389049090296, 0.0022918187482137394, 0.0017534964781692605, 0.002972904458240536, 0.0073467039802806]], n_iter = [1, 1], converged = 1, n_matvec = 44)], stage = :finalize, history_Δρ = [0.7350510306672371, 0.15035455887392785, 0.07205997504658086, 0.06565353348956729, 0.018277266910288352, 0.007425921019838952], history_Etot = [-27.64717782290865, -28.92275440516894, -28.93092544533578, -28.93760575605639, -28.939575552534478, -28.93960345658775], runtime_ns = 0x0000000023739315, algorithm = "SCF")

    Notice that the ρ argument is now passed to kwargsscfcheckpoints instead. If we run in the same folder the SCF again (here using a tighter tolerance), the calculation just continues.

    checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))
    +scfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)
    (ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-7.847975050004954 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057803 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [5.659892306894449 5.429402408182405 … 4.799065895878188 5.4294319978019665; 5.429405564120005 5.209328440475215 … 4.610208010059866 5.209360153165644; … ; 4.79905470080579 4.610192474188792 … 4.099441198841275 4.610210739835335; 5.429427483131016 5.209351680991841 … 4.610216791705164 5.209375054048088;;; 5.539247065263989 5.336936700109839 … 4.758054203553172 5.337000037271248; 5.336952410779278 5.138702255767231 … 4.578752872916298 5.13876700023813; … ; 4.758020101011732 4.578708610887069 … 4.083769148874233 4.5787431824421345; 5.336979421793848 5.138732923052011 … 4.578759493416404 5.138782511313888;;; 5.245447414414027 5.102652549249118 … 4.63346314483938 5.102742527924359; 5.1026776246552465 4.9507629991546755 … 4.47496132824538 4.9508532254936055; … ; 4.6334147356407325 4.474897613809994 … 4.015416003667578 4.4749458460426315; 5.102711440500031 4.950801176085872 … 4.474968062263365 4.950872131446709;;; … ;;; 4.913258476890449 4.808714417674927 … 4.414323038212813 4.808737831833969; 4.8087251086428715 4.687506671941628 … 4.2716592236426285 4.687526456894876; … ; 4.41431452380765 4.271643144944809 … 3.8434143754404295 4.271663281448291; 4.808731927036441 4.687510634600363 … 4.271666082960423 4.6875343763433595;;; 5.245390050206039 5.102628259182222 … 4.633375807755413 5.102658747454442; 5.102635726449021 4.95075432987586 … 4.47488038794444 4.950780486159107; … ; 4.633372060296225 4.474870301245895 … 4.015363675307936 4.474893979446102; 5.102656714342563 4.950770925885117 … 4.4748950386862045 4.950800330369815;;; 5.539200085613928 5.336913770016891 … 4.757992138944212 5.3369367068510405; 5.336915095979416 5.1386887898278015 … 4.578695239376555 5.138710876052109; … ; 4.757991704452727 4.578691250163234 … 4.083734778821063 4.578708397004913; 5.336938442895832 5.138709885118862 … 4.578708867554709 5.138730499507407]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-1.0075912116455035 -0.9757119659246801 … -0.8487210285876461 -0.9757009312091918; -0.9757007424024835 -0.9296289276540746 … -0.8471899408256194 -0.9296016669376365; … ; -0.8488103865801502 -0.84715797788278 … -0.6673922317154795 -0.8471410145995559; -0.975708987605829 -0.9296378165062263 … -0.8471882035645182 -0.9295977467308972;;; -0.9898530184764953 -0.9544376016529078 … -0.9009267246321743 -0.9544767954810808; -0.9544356405123764 -0.9323082731460802 … -0.8786030324191654 -0.9323639070931505; … ; -0.9009008952348034 -0.878563242947693 … -0.7913790342073488 -0.8785761539729866; -0.954453201328496 -0.9323455291628326 … -0.8785915738276284 -0.932371545032683;;; -0.7547190156572098 -0.8565767075021791 … -0.9145165884442535 -0.8567253183637386; -0.8566201086399288 -0.8894104478370561 … -0.9072014459162472 -0.8895235283475945; … ; -0.9144779046341001 -0.9071560692730946 … -0.8647913525508044 -0.9071861405384893; -0.8566699295540806 -0.8894609966303437 … -0.9071941455984609 -0.8895318423759037;;; … ;;; -0.6146128561799657 -0.8437164967058826 … -0.9685837766656036 -0.843785015134571; -0.8437322013326268 -0.9185914902797925 … -0.958240173219096 -0.918630249536358; … ; -0.9685746575522555 -0.9582269920928381 … -0.9351551383227065 -0.9582516874616526; -0.8437705855614863 -0.9186050603039038 … -0.9582513973713362 -0.9186558769331009;;; -0.7546920754134006 -0.8566003523235761 … -0.9144664936246876 -0.8566493012840607; -0.8566025852785084 -0.8894453304422448 … -0.9071523649798454 -0.8894655049763802; … ; -0.9144863030991961 -0.9071594945931195 … -0.8647805351057188 -0.9071839310818687; -0.8566590357121163 -0.8894717493291671 … -0.9071715951184627 -0.8895035840958623;;; -0.9898030660216415 -0.9544030978676245 … -0.9008856047964616 -0.9544127818076461; -0.9543937085054837 -0.9323056002379527 … -0.8785059039608196 -0.9323040762749599; … ; -0.9008916011772187 -0.8785450509837001 … -0.7913821900497717 -0.8785567406775742; -0.9544322291921978 -0.932330499776038 … -0.878531101583349 -0.9323247743982538]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-3.1956739547560087 -2.814737997947958 … -2.036087306188948 -2.814697373612906; -2.81472361848816 -2.5020499349779364 … -1.8916446020332707 -2.501990961571069; … ; -2.0361878592538494 -1.8916281749615054 … -1.402818184037087 -1.8915929460317384; -2.8147099446804953 -2.5020355833134613 … -1.8916340831268714 -2.5019721404818855;;; -4.350040358987229 -3.705165265573656 … -2.515862857489459 -3.70514112224042; -3.7051475937636855 -3.211367820914195 … -2.257147980485489 -3.211358710390366; … ; -2.515871130633527 -2.257152453043246 … -1.6915611893288263 -2.257130792513476; -3.705138143565235 -3.211374409646167 … -2.2571299013938457 -3.21135083725414;;; -12.70373638230099 -7.9689399942824855 … -3.5412009770724775 -7.968998626468803; -7.968958320014108 -5.684138723441669 … -3.0737485582281168 -5.684161577613278; … ; -3.54121070246097 -3.0737668960203504 … -2.140148811944783 -3.0737487350531083; -7.968974325083476 -5.6841510953037595 … -3.0737345238923455 -5.6841509856884835;;; … ;;; -28.842406893834543 -14.825245255774766 … -4.220192142381851 -14.82529036004441; -14.825250269433566 -8.86053684575781 … -3.609528306087995 -8.860555820061128; … ; -4.220191537673665 -3.6095312036595564 … -2.426053635380124 -3.6095357625248896; -14.825281835268857 -8.860546453123186 … -3.609532670922441 -8.860573528009388;;; -12.703766806265165 -7.968987929170777 … -3.5412382193368783 -7.969006389859041; -7.968982694858912 -5.684182275325673 … -3.073780417592655 -5.684176293576562; … ; -3.541261776270573 -3.0737976339044737 … -2.1401903228593393 -3.073798392193017; -7.969018157398978 -5.68419209820334 … -3.0737849969895077 -5.684194528485337;;; -4.3500373861824375 -3.7051536918813204 … -2.5158838022627057 -3.705140438987193; -3.705142976556655 -3.2113786139454956 … -2.257108485566887 -3.2113550037581957; … ; -2.5158902331349466 -2.2571516218030876 … -1.691598715224419 -2.2571461646552837; -3.705158150326955 -3.211382418192521 … -2.257120055011263 -3.2113560784261925]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, NamedTuple{(:ψ_reals,), Tuple{Array{ComplexF64, 3}}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-7.847975050004954 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057803 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [5.659892306894449 5.429402408182405 … 4.799065895878188 5.4294319978019665; 5.429405564120005 5.209328440475215 … 4.610208010059866 5.209360153165644; … ; 4.79905470080579 4.610192474188792 … 4.099441198841275 4.610210739835335; 5.429427483131016 5.209351680991841 … 4.610216791705164 5.209375054048088;;; 5.539247065263989 5.336936700109839 … 4.758054203553172 5.337000037271248; 5.336952410779278 5.138702255767231 … 4.578752872916298 5.13876700023813; … ; 4.758020101011732 4.578708610887069 … 4.083769148874233 4.5787431824421345; 5.336979421793848 5.138732923052011 … 4.578759493416404 5.138782511313888;;; 5.245447414414027 5.102652549249118 … 4.63346314483938 5.102742527924359; 5.1026776246552465 4.9507629991546755 … 4.47496132824538 4.9508532254936055; … ; 4.6334147356407325 4.474897613809994 … 4.015416003667578 4.4749458460426315; 5.102711440500031 4.950801176085872 … 4.474968062263365 4.950872131446709;;; … ;;; 4.913258476890449 4.808714417674927 … 4.414323038212813 4.808737831833969; 4.8087251086428715 4.687506671941628 … 4.2716592236426285 4.687526456894876; … ; 4.41431452380765 4.271643144944809 … 3.8434143754404295 4.271663281448291; 4.808731927036441 4.687510634600363 … 4.271666082960423 4.6875343763433595;;; 5.245390050206039 5.102628259182222 … 4.633375807755413 5.102658747454442; 5.102635726449021 4.95075432987586 … 4.47488038794444 4.950780486159107; … ; 4.633372060296225 4.474870301245895 … 4.015363675307936 4.474893979446102; 5.102656714342563 4.950770925885117 … 4.4748950386862045 4.950800330369815;;; 5.539200085613928 5.336913770016891 … 4.757992138944212 5.3369367068510405; 5.336915095979416 5.1386887898278015 … 4.578695239376555 5.138710876052109; … ; 4.757991704452727 4.578691250163234 … 4.083734778821063 4.578708397004913; 5.336938442895832 5.138709885118862 … 4.578708867554709 5.138730499507407]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-1.012518544120524 -0.9779635647795922 … -0.9029644269704781 -0.9779714491040992; -0.9779663251803212 -0.9436469820350868 … -0.843193672126228 -0.9436589972190285; … ; -0.9029249307069229 -0.8432089624338174 … -0.7667340552900931 -0.8432159124782304; -0.977969819131923 -0.943648331547268 … -0.8431976857679631 -0.9436625471517824;;; -1.0024682879685234 -0.9662172500935869 … -0.8942657837308055 -0.9662172492375638; -0.9662265369230814 -0.9380680786735115 … -0.8653975247859437 -0.9380620904968027; … ; -0.8942644013375636 -0.8653975014546262 … -0.7841221338133013 -0.8653983465078965; -0.9662284083372056 -0.9380608791639715 … -0.8654021687437694 -0.9380605240185534;;; -0.8144896277188366 -0.8329343522293307 … -0.8251765857004569 -0.832905157206168; -0.8329248792297543 -0.8330232259906791 … -0.815897740653633 -0.833003471879132; … ; -0.8251792126458912 -0.8159007261375898 … -0.7766233305192433 -0.8158983258522423; -0.8329186827126217 -0.8330150869424665 … -0.8159040590338259 -0.8330041778155435;;; … ;;; -0.6906335934806488 -0.7862972435346751 … -0.8336756407304529 -0.78626839443648; -0.7862881610081811 -0.8120521639373106 … -0.8254422175612004 -0.8120407618620382; … ; -0.8336769325955208 -0.8254480375163092 … -0.8094634681552045 -0.8254396510392117; -0.7862724044092445 -0.8120495988267532 … -0.8254371259397568 -0.8120283121681191;;; -0.8144940755595672 -0.8329243803136106 … -0.8251844361377797 -0.8329198522415884; -0.8329242750136404 -0.8330097122595961 … -0.8159062566880715 -0.8330130426861342; … ; -0.825170336872789 -0.815895012675373 … -0.7766220751523537 -0.8158944555406029; -0.832910527879274 -0.833006188784078 … -0.8159022074855987 -0.8330029798252175;;; -1.0024735606827282 -0.9662264731229978 … -0.894262967471946 -0.9662277685158926; -0.9662226842116528 -0.9380604264765718 … -0.8654068208093585 -0.9380631298134495; … ; -0.8942630598259652 -0.8654008070503486 … -0.7841162073053639 -0.8654004018400412; -0.9662170908199561 -0.9380556613102413 … -0.865402821837689 -0.9380589585434908]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-3.200601287231029 -2.81698959680287 … -2.09033070457178 -2.8169678915078133; -2.816989201265998 -2.5160679893589486 … -1.8876483333338792 -2.516048291852461; … ; -2.0903024033806217 -1.8876791595125426 … -1.5021600076117005 -1.8876678439104129; -2.816970776206589 -2.516046098354503 … -1.8876435653303163 -2.5160369409027705;;; -4.362655628479257 -3.716944914014335 … -2.50920191658809 -3.716881575996903; -3.7169384901743903 -3.217127626441626 … -2.2439424728522677 -3.217056893794018; … ; -2.509234636736287 -2.2439867115501793 … -1.6843042889347788 -2.2439529850483857; -3.7169133505739445 -3.217089759647306 … -2.243940496309987 -3.217039816240011;;; -12.763506994362617 -7.945297639009637 … -3.4518609743286808 -7.9451784653112325; -7.945263090603934 -5.627751501595292 … -2.9824448529655028 -5.627641521144815; … ; -3.4519120104727614 -2.9825115528848456 … -2.051980789913222 -2.982460920366861; -7.945223078242017 -5.627705185615882 … -2.9824444373277106 -5.627623321128123;;; … ;;; -28.918427631135224 -14.767826002603558 … -4.085284006446701 -14.767773739346318; -14.767806229109121 -8.753997519415329 … -3.4767303504300995 -8.753966332386808; … ; -4.08529381271693 -3.476752249083028 … -2.300361965212622 -3.4767237261024486; -14.767783654116615 -8.753990991646036 … -3.4767183994908613 -8.753945963244405;;; -12.763568806411332 -7.945311957160811 … -3.4519561618499703 -7.945276940816569; -7.945304384594044 -5.627746657143025 … -2.982534309300881 -5.627723831286316; … ; -3.4519458100441662 -2.9825331519867273 … -2.052031862905974 -2.982508916651751; -7.945269649566135 -5.627726537658251 … -2.9825156093566436 -5.627693924214693;;; -4.362707880843524 -3.716977067136694 … -2.50926116493819 -3.7169554256954394; -3.716971952262824 -3.217133440184115 … -2.2440094024154256 -3.217114057296685; … ; -2.509261691783693 -2.2440073778697363 … -1.6843327324800113 -2.243989825817751; -3.7169430119547133 -3.217107579726725 … -2.243991775265603 -3.2170902625714293]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, NamedTuple{(:ψ_reals,), Tuple{Array{ComplexF64, 3}}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.939612592760124), converged = true, occupation_threshold = 1.0e-6, ρ = [0.43403281661029447 0.3835248820223661 … 0.25501257538513866 0.3835156652182107; 0.3835116207127048 0.3371350297998207 … 0.22214060766038882 0.3371347591856318; … ; 0.2550235845752251 0.2221549245101254 … 0.1446670453863161 0.2221445677802511; 0.383527633592372 0.33715504026257775 … 0.2221410108120755 0.33714030898236536;;; 0.36323673631215214 0.3478462058076826 … 0.27206196972567964 0.34789084146573596; 0.3478538525003908 0.32623524367540074 … 0.2460191263207903 0.32628570132534396; … ; 0.2720397082279217 0.24599359074841096 … 0.1736131243768998 0.24600446722038072; 0.3478757319082211 0.3262647991706011 … 0.24601496268060508 0.32628964985675685;;; 0.21384163370418488 0.27330072399560174 … 0.3104055703666369 0.27339940448577543; 0.2733270058847987 0.3046747878995452 … 0.29921478113921596 0.30477447432805643; … ; 0.31035941705646514 0.29915733108527953 … 0.2380933007297486 0.2991927801246487; 0.2733642871677927 0.30471968953857015 … 0.2992125157973033 0.3047870243821606;;; … ;;; 0.14405184176861352 0.24609728259653177 … 0.3458816305592452 0.24612800264774937; 0.24610902905055868 0.3074452069759713 … 0.3426712743103124 0.307469231088283; … ; 0.34587697275401547 0.3426568124597049 … 0.28587346654814494 0.34268335638512193; 0.2461246789024996 0.3074537911505974 … 0.34268312848742466 0.3074864749132982;;; 0.2138211548163215 0.273313855271952 … 0.3103492416558243 0.2733464580774468; 0.27331796280790677 0.3047009673752286 … 0.2991593763400158 0.30472605980344003; … ; 0.31035878275547457 0.2991623204392097 … 0.2380805575422215 0.2991854806559576; 0.27335382301360184 0.30472699280282856 … 0.29917955404408636 0.3047590734953379;;; 0.3631916722631762 0.34782927737350383 … 0.27200877057772177 0.347828847075499; 0.3478180948670976 0.32622782927119093 … 0.24596861698274575 0.3262290351686477; … ; 0.2720304247562584 0.24599093673197073 … 0.17359914730649634 0.24599087047811352; 0.34784739885487514 0.3262531367054604 … 0.2459813630635401 0.3262519166315476;;;; 0.4383655459095072 0.38781312785984795 … 0.25924790934927977 0.3878141662233091; 0.38781326757554274 0.3414086365240195 … 0.2263106619027825 0.34140917341960497; … ; 0.2592444273611088 0.2263081444282084 … 0.1485535303583336 0.22630850609048003; 0.38781185688602565 0.3414073745989327 … 0.2263104146420075 0.3414081453564167;;; 0.3653142223444276 0.33726051651484357 … 0.24772457102133913 0.3372585920910546; 0.33725932377635576 0.3078045663302282 … 0.22141097525151862 0.30780226321538157; … ; 0.24772379012956497 0.22141175172980365 … 0.15359884207989194 0.2214101691920668; 0.33725828575963473 0.307803476795025 … 0.22141094019500276 0.3078015958758997;;; 0.21246829972318687 0.2309753977920654 … 0.22245703810316284 0.2309705703784434; 0.2309738628373748 0.23662953635832898 … 0.20989254092188725 0.23662493978842022; … ; 0.2224584903301511 0.20989591018891052 … 0.16281177689086074 0.2098916176941862; 0.23097164675876136 0.23662790703550476 … 0.20989139277649155 0.23662281874663016;;; … ;;; 0.1421846860110566 0.18256019628070175 … 0.21181850423296825 0.18255917322182205; 0.1825592397759792 0.204597047558374 … 0.20540784488052044 0.20459790263403022; … ; 0.21181712086910778 0.20540651898240475 … 0.16727101342752138 0.20540526571391374; 0.1825590610786787 0.20459825921939603 … 0.20540605087166314 0.20459613572910684;;; 0.212466449998671 0.23096978580871888 … 0.22245947343230982 0.2309714723662806; 0.23097032347500987 0.23662245111257676 … 0.20989481856568243 0.23662497831577714; … ; 0.222454831440542 0.20989045781185822 … 0.1628124993044192 0.20989042590677348; 0.23096865295449923 0.2366220389180702 … 0.20989277139609328 0.23662238896295273;;; 0.36530952876733863 0.3372539404659293 … 0.24772499442929466 0.3372567168737089; 0.3372550158295871 0.3077982826706351 … 0.2214118259953659 0.30780092624811844; … ; 0.24771968669573588 0.22140702163256132 … 0.15359844867991926 0.2214079391973905; 0.33725310789517304 0.3077970814830153 … 0.22141061323663722 0.30779890601121646], α = 0.8, eigenvalues = [[-1.333971864171026, -0.7234075247601387, -0.44535905952267474, -0.44535630111776603, -0.4063806394376469, -0.05927327143350612, -0.05927175472326241, 0.015454932891916658, 0.19527162775221066, 0.20827337149034397, 0.24222781989854011], [-1.3007257662207852, -0.6619273951169418, -0.3898740671524499, -0.3898698437987964, -0.3737833006440771, 0.01486354738570066, 0.014868883172233217, 0.02829324220912514, 0.20793285818309074, 0.2144777924603007, 0.25877106938790334]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9947167693865153, 0.9947151404400495, 0.003192135655792526, 4.249127376309853e-54, 1.795246467912401e-60, 7.633097248441372e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.0036205704750913396, 0.0036164847094446876, 0.00013889933310681207, 2.665175186803862e-60, 1.2119245589344319e-63, 1.0652098322254428e-88]], εF = -0.023115808166216164, n_bands_converge = 8, n_iter = 2, ψ = Matrix{ComplexF64}[[-0.25407577719326685 + 0.07528385091345767im -2.1977270021769507e-6 + 2.273250462722042e-7im … -0.0789382912549916 - 0.013520872831357717im 9.445788194136496e-6 + 1.3750245004295613e-5im; -0.19188983380869948 + 0.056858110011009586im -6.914080830943418e-6 + 3.4544458913528477e-6im … -0.09849172218305395 - 0.019533560477483083im -0.4214650856907196 + 0.07487915849790987im; … ; -0.05836099258514729 + 0.017289372749912466im 0.010290185248974508 + 0.06315155318795904im … -0.017827581599642046 - 0.003236139049707026im -0.027585737033392194 + 0.0026611436985767576im; -0.10711658795870199 + 0.03173365083393655im 0.02213099329064466 + 0.13586252936319093im … -0.015666442388120014 - 0.0029573208332233014im -0.03859109684329301 + 0.00029256211128800757im], [0.11823401821319998 - 0.23322227900444037im 9.071720013111314e-6 + 6.265589411541955e-6im … 0.06532340507670598 - 0.053707644996029265im 5.41077840324217e-6 - 5.504822230558591e-6im; 0.0892436806861745 - 0.17604458473369897im 5.664559721612477e-6 + 7.94882814879202e-6im … 0.07511794011490004 - 0.06041921204504741im 0.4488316689521702 - 0.04433473312034675im; … ; 0.027518129531018846 - 0.05427616171730382im 0.03668287665855045 - 0.05317439147208615im … 0.013411129055646266 - 0.010959616992538277im 0.02710613168255349 + 0.0021387399433699062im; 0.050388425768197014 - 0.09938874358528162im 0.07860347150171573 - 0.11394222862845875im … 0.011815957641910492 - 0.00962679955834401im 0.03791278067844953 + 0.008454142478779835im]], diagonalization = NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), Tuple{Vector{Vector{Float64}}, Vector{Matrix{ComplexF64}}, Vector{Vector{Float64}}, Vector{Int64}, Bool, Int64}}[(λ = [[-1.333971864171026, -0.7234075247601387, -0.44535905952267474, -0.44535630111776603, -0.4063806394376469, -0.05927327143350612, -0.05927175472326241, 0.015454932891916658, 0.19527162775221066, 0.20827337149034397, 0.24222781989854011], [-1.3007257662207852, -0.6619273951169418, -0.3898740671524499, -0.3898698437987964, -0.3737833006440771, 0.01486354738570066, 0.014868883172233217, 0.02829324220912514, 0.20793285818309074, 0.2144777924603007, 0.25877106938790334]], X = [[-0.25407577719326685 + 0.07528385091345767im -2.1977270021769507e-6 + 2.273250462722042e-7im … -0.0789382912549916 - 0.013520872831357717im 9.445788194136496e-6 + 1.3750245004295613e-5im; -0.19188983380869948 + 0.056858110011009586im -6.914080830943418e-6 + 3.4544458913528477e-6im … -0.09849172218305395 - 0.019533560477483083im -0.4214650856907196 + 0.07487915849790987im; … ; -0.05836099258514729 + 0.017289372749912466im 0.010290185248974508 + 0.06315155318795904im … -0.017827581599642046 - 0.003236139049707026im -0.027585737033392194 + 0.0026611436985767576im; -0.10711658795870199 + 0.03173365083393655im 0.02213099329064466 + 0.13586252936319093im … -0.015666442388120014 - 0.0029573208332233014im -0.03859109684329301 + 0.00029256211128800757im], [0.11823401821319998 - 0.23322227900444037im 9.071720013111314e-6 + 6.265589411541955e-6im … 0.06532340507670598 - 0.053707644996029265im 5.41077840324217e-6 - 5.504822230558591e-6im; 0.0892436806861745 - 0.17604458473369897im 5.664559721612477e-6 + 7.94882814879202e-6im … 0.07511794011490004 - 0.06041921204504741im 0.4488316689521702 - 0.04433473312034675im; … ; 0.027518129531018846 - 0.05427616171730382im 0.03668287665855045 - 0.05317439147208615im … 0.013411129055646266 - 0.010959616992538277im 0.02710613168255349 + 0.0021387399433699062im; 0.050388425768197014 - 0.09938874358528162im 0.07860347150171573 - 0.11394222862845875im … 0.011815957641910492 - 0.00962679955834401im 0.03791278067844953 + 0.008454142478779835im]], residual_norms = [[0.0001830048465151627, 0.0001732710328178816, 0.00018550624252461036, 0.00032224838127665865, 0.00035831607509567606, 0.0004955395623641758, 0.0006099883182688384, 0.00018870986805020687, 0.0008889621564962561, 0.001138517615643509, 0.001172165300464308], [3.905447501434481e-5, 0.0001521928816787799, 0.00015798946281470966, 0.00016715388911061214, 0.0001026845366474534, 0.00036358515605470435, 0.0003431666841654122, 0.00016925482220901298, 0.0002245465733104237, 0.0006613548309479322, 0.007203686719824771]], n_iter = [1, 1], converged = 1, n_matvec = 44)], stage = :finalize, history_Δρ = [0.0011893541448270153, 0.0004071165364578123], history_Etot = [-28.939610397683424, -28.939612592760124], runtime_ns = 0x000000000fc827b0, algorithm = "SCF")

    Since only the density is stored in a checkpoint (and not the Bloch waves), the first step needs a slightly elevated number of diagonalizations. Notice, that reconstructing the checkpointargs in this second call is important as the checkpointargs now contain different data, such that the SCF continues from the checkpoint. By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which can be changed using the filename keyword argument of kwargs_scf_checkpoints. Note that the file is not deleted by DFTK, so it is your responsibility to clean it up. Further note that warnings or errors will arise if you try to use a checkpoint, which is incompatible with your calculation.

    We can also inspect the checkpoint file manually using the load_scfres function and use it manually to continue the calculation:

    oldstate = load_scfres("dftk_scf_checkpoint.jld2")
    +scfres   = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -28.93883500656                   -2.38    1.986    5.5   90.4ms
    +  2   -28.93950837938       -3.17       -2.78    1.985    1.0    136ms
    +  3   -28.93961205002       -3.98       -2.66    1.985    4.0   95.5ms
    +  4   -28.93961256257       -6.29       -2.79    1.985    1.0   65.1ms
    +  5   -28.93961288825       -6.49       -2.93    1.985    1.0   93.0ms
    +  6   -28.93961295936       -7.15       -3.01    1.985    1.0   61.9ms
    +  7   -28.93961310023       -6.85       -3.26    1.985    1.0   62.4ms
    +  8   -28.93961315017       -7.30       -3.59    1.985    1.5   94.7ms
    +  9   -28.93961316638       -7.79       -3.77    1.985    1.5   67.8ms
    + 10   -28.93961317205       -8.25       -4.85    1.985    1.5   68.5ms

    Some details on what happens under the hood in this mechanism: When using the kwargs_scf_checkpoints function, the ScfSaveCheckpoints callback is employed during the SCF, which causes the density to be stored to the JLD2 file in every iteration. When reading the file, the kwargs_scf_checkpoints transparently patches away the ψ and ρ keyword arguments and replaces them by the data obtained from the file. For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.

    (Cleanup files generated by this notebook)

    rm("dftk_scf_checkpoint.jld2")
    +rm("scfres.jld2")
    diff --git a/v0.6.17/.documenter-siteinfo.json b/v0.6.17/.documenter-siteinfo.json new file mode 100644 index 0000000000..9f8d2af59d --- /dev/null +++ b/v0.6.17/.documenter-siteinfo.json @@ -0,0 +1 @@ +{"documenter":{"julia_version":"1.10.0","generation_timestamp":"2024-01-15T13:24:23","documenter_version":"1.1.2"}} \ No newline at end of file diff --git a/v0.6.17/api/index.html b/v0.6.17/api/index.html new file mode 100644 index 0000000000..4dc983ac61 --- /dev/null +++ b/v0.6.17/api/index.html @@ -0,0 +1,1030 @@ + +API reference · DFTK.jl

    API reference

    This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.

    DFTK.AdaptiveBandsType

    Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.

    source
    DFTK.AdaptiveDiagtolType

    Algorithm for the tolerance used for the next diagonalization. This function takes $|ρ_{\rm next} - ρ_{\rm in}|$ and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.

    source
    DFTK.AtomicNonlocalType

    Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. $\text{Energy} = ∑_a ∑_{ij} ∑_{n} f_n \braket{ψ_n}{{\rm proj}_{ai}} D_{ij} \braket{{\rm proj}_{aj}}{ψ_n}.$

    source
    DFTK.BlowupCHVType

    Blow-up function as proposed in arXiv:2210.00442. The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.

    source
    DFTK.DFTKCalculatorMethod
    DFTKCalculator(
    +    params::DFTK.DFTKParameters
    +) -> DFTKCalculator
    +

    Construct a AtomsCalculators compatible calculator for DFTK. The model_kwargs are passed onto the Model constructor, the basis_kwargs to the PlaneWaveBasis constructor, the scf_kwargs to self_consistent_field. At the very least the DFT functionals and the Ecut needs to be specified.

    By default the calculator preserves the symmetries that are stored inside the state (the basis is re-built, but symmetries are fixed and not re-computed).

    Example

    julia> DFTKCalculator(; model_kwargs=(; functionals=[:lda_x, :lda_c_vwn]),
    +                        basis_kwargs=(; Ecut=10, kgrid=(2, 2, 2)),
    +                        scf_kwargs=(; tol=1e-4))
    source
    DFTK.DielectricMixingType

    We use a simplification of the Resta model and set $χ_0(q) = \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)}$ where $C_0 = 1 - ε_r$ with $ε_r$ being the macroscopic relative permittivity. We neglect $K_\text{xc}$, such that $J^{-1} ≈ \frac{k_{TF}^2 - C_0 G^2}{ε_r k_{TF}^2 - C_0 G^2}$

    By default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to $ρ$ and $ρ_\text{spin}$ in the same way.

    source
    DFTK.DielectricModelType

    A localised dielectric model for $χ_0$:

    \[\sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)}\]

    where $C_0 = 1 - ε_r$, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.

    source
    DFTK.DivAgradOperatorType

    Nonlocal "divAgrad" operator $-½ ∇ ⋅ (A ∇)$ where $A$ is a scalar field on the real-space grid. The $-½$ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for $A=1$).

    source
    DFTK.ElementCohenBergstresserMethod
    ElementCohenBergstresser(
    +    key;
    +    lattice_constant
    +) -> ElementCohenBergstresser
    +

    Element where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).

    key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

    source
    DFTK.ElementCoulombMethod
    ElementCoulomb(key; mass) -> ElementCoulomb
    +

    Element interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

    source
    DFTK.ElementGaussianMethod
    ElementGaussian(α, L; symbol) -> ElementGaussian
    +

    Element interacting with electrons via a Gaussian potential. Symbol is non-mandatory.

    source
    DFTK.ElementPspMethod
    ElementPsp(key; psp, mass)
    +

    Element interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. "silicon")

    source
    DFTK.EnergiesType

    A simple struct to contain a vector of energies, and utilities to print them in a nice format.

    source
    DFTK.EntropyType

    Entropy term $-TS$, where $S$ is the electronic entropy. Turns the energy $E$ into the free energy $F=E-TS$. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.

    source
    DFTK.EwaldType

    Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.

    source
    DFTK.ExplicitKpointsType

    Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)

    source
    DFTK.ExternalFromRealType

    External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.

    source
    DFTK.FixedBandsType

    In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).

    source
    DFTK.GPUMethod

    Construct a particular GPU architecture by passing the ArrayType

    source
    DFTK.HartreeType

    Hartree term: for a decaying potential V the energy would be

    \[1/2 ∫ρ(x)ρ(y)V(x-y) dxdy,\]

    with the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather

    \[1/2 ∫ρ(x)ρ(y) G(x-y) dx dy,\]

    where G is the Green's function of the periodic Laplacian with zero mean ($-Δ G = ∑_R 4π δ_R$, integral of G zero on a unit cell).

    source
    DFTK.KerkerMixingType

    Kerker mixing: $J^{-1} ≈ \frac{|G|^2}{k_{TF}^2 + |G|^2}$ where $k_{TF}$ is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for $ΔDOS_Ω$ is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.

    Notes:

    • Abinit calls $1/k_{TF}$ the dielectric screening length (parameter dielng)
    source
    DFTK.KineticType

    Kinetic energy:

    \[1/2 ∑_n f_n ∫ |∇ψ_n|^2 * {\rm blowup}(-i∇Ψ_n).\]

    source
    DFTK.KpointType

    Discretization information for $k$-point-dependent quantities such as orbitals. More generally, a $k$-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.

    source
    DFTK.LazyHcatType

    Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).

    source
    DFTK.LdosModelType

    Represents the LDOS-based $χ_0$ model

    \[χ_0(r, r') = (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D)\]

    where $D_\text{loc}$ is the local density of states and $D$ the density of states. For details see Herbst, Levitt 2020.

    source
    DFTK.LibxcDensitiesMethod
    LibxcDensities(
    +    basis,
    +    max_derivative::Integer,
    +    ρ,
    +    τ
    +) -> DFTK.LibxcDensities
    +

    Compute density in real space and its derivatives starting from ρ

    source
    DFTK.MagneticType

    Magnetic term $A⋅(-i∇)$. It is assumed (but not checked) that $∇⋅A = 0$.

    source
    DFTK.ModelMethod
    Model(system::AbstractSystem; kwargs...)

    AtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.

    source
    DFTK.ModelMethod
    Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,
    +      smearing, spin_polarization, symmetries)

    Creates the physical specification of a model (without any discretization information).

    n_electrons is taken from atoms if not specified.

    spin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.

    magnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.

    smearing is Fermi-Dirac if temperature is non-zero, none otherwise

    The symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.

    source
    DFTK.ModelMethod
    Model(model; [lattice, positions, atoms, kwargs...])
    +Model{T}(model; [lattice, positions, atoms, kwargs...])

    Construct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.

    source
    DFTK.NonlocalOperatorType

    Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.

    source
    DFTK.NoopOperatorType

    Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).

    source
    DFTK.PairwisePotentialMethod
    PairwisePotential(
    +    V,
    +    params;
    +    max_radius
    +) -> PairwisePotential
    +

    Pairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.

    source
    DFTK.PlaneWaveBasisType

    A plane-wave discretized Model. Normalization conventions:

    • Things that are expressed in the G basis are normalized so that if $x$ is the vector, then the actual function is $\sum_G x_G e_G$ with $e_G(x) = e^{iG x} / \sqrt(\Omega)$, where $\Omega$ is the unit cell volume. This is so that, eg $norm(ψ) = 1$ gives the correct normalization. This also holds for the density and the potentials.
    • Quantities expressed on the real-space grid are in actual values.

    ifft and fft convert between these representations.

    source
    DFTK.PlaneWaveBasisMethod

    Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.

    source
    DFTK.PspHghMethod
    PspHgh(path[, identifier, description])

    Construct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.

    source
    DFTK.PspUpfMethod
    PspUpf(path[, identifier])

    Construct a Unified Pseudopotential Format pseudopotential from file.

    Does not support:

    • Fully-realtivistic / spin-orbit pseudos
    • Bare Coulomb / all-electron potentials
    • Semilocal potentials
    • Ultrasoft potentials
    • Projector-augmented wave potentials
    • GIPAW reconstruction data
    source
    DFTK.RealFourierOperatorType

    Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (; real, fourier). They also implement mul! and Matrix(op) for exploratory use.

    source
    DFTK.ScfSaveCheckpointsType

    Adds checkpointing to a DFTK self-consistent field calculation. The checkpointing file is silently overwritten. Requires the package for writing the output file (usually JLD2) to be loaded.

    • filename: Name of the checkpointing file.
    • compress: Should compression be used on writing (rarely useful)
    • save_ψ: Should the bands also be saved (noteworthy additional cost ... use carefully)
    source
    DFTK.XcType

    Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.

    source
    DFTK.χ0MixingType

    Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).

    source
    AbstractFFTs.fft!Method
    fft!(
    +    f_fourier::AbstractArray{T, 3} where T,
    +    basis::PlaneWaveBasis,
    +    f_real::AbstractArray{T, 3} where T
    +) -> Any
    +

    In-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.

    source
    AbstractFFTs.fftMethod
    fft(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    f_real::AbstractArray{U}
    +) -> Any
    +
    fft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)

    Perform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.

    source
    AbstractFFTs.ifft!Method
    ifft!(
    +    f_real::AbstractArray{T, 3} where T,
    +    basis::PlaneWaveBasis,
    +    f_fourier::AbstractArray{T, 3} where T
    +) -> Any
    +

    In-place version of ifft.

    source
    AbstractFFTs.ifftMethod
    ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any
    +
    ifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)

    Perform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.

    source
    AtomsBase.atomic_systemFunction
    atomic_system(
    +    lattice::AbstractMatrix{<:Number},
    +    atoms::Vector{<:DFTK.Element},
    +    positions::AbstractVector
    +) -> AtomsBase.FlexibleSystem
    +atomic_system(
    +    lattice::AbstractMatrix{<:Number},
    +    atoms::Vector{<:DFTK.Element},
    +    positions::AbstractVector,
    +    magnetic_moments::AbstractVector
    +) -> AtomsBase.FlexibleSystem
    +
    atomic_system(model::DFTK.Model, magnetic_moments=[])
    +atomic_system(lattice, atoms, positions, magnetic_moments=[])

    Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

    source
    AtomsBase.periodic_systemFunction
    periodic_system(model::Model) -> AtomsBase.FlexibleSystem
    +periodic_system(
    +    model::Model,
    +    magnetic_moments
    +) -> AtomsBase.FlexibleSystem
    +
    periodic_system(model::DFTK.Model, magnetic_moments=[])
    +periodic_system(lattice, atoms, positions, magnetic_moments=[])

    Construct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.

    source
    Brillouin.KPaths.irrfbz_pathFunction
    irrfbz_path(
    +    model::Model;
    +    ...
    +) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}
    +irrfbz_path(
    +    model::Model,
    +    magnetic_moments;
    +    dim,
    +    space_group_number
    +) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}
    +

    Extract the high-symmetry $k$-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the $k$-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.

    If the cell is a supercell of a smaller primitive cell, the standard $k$-path of the associated primitive cell is returned. So, the high-symmetry $k$ points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.

    The dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).

    Due to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.

    source
    DFTK.CROPFunction
    CROP(
    +    f,
    +    x0,
    +    m::Int64,
    +    max_iter::Int64,
    +    tol::Real
    +) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}
    +CROP(
    +    f,
    +    x0,
    +    m::Int64,
    +    max_iter::Int64,
    +    tol::Real,
    +    warming
    +) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}
    +

    CROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.

    source
    DFTK.G_vectorsMethod
    G_vectors(
    +    basis::PlaneWaveBasis
    +) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}
    +
    G_vectors(basis::PlaneWaveBasis)
    +G_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of wave vectors $G$ in reduced (integer) coordinates of a basis or a $k$-point kpt.

    source
    DFTK.G_vectorsMethod
    G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any
    +
    G_vectors(fft_size::Tuple)

    The wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.

    source
    DFTK.G_vectors_cartMethod
    G_vectors_cart(basis::PlaneWaveBasis) -> Any
    +
    G_vectors_cart(basis::PlaneWaveBasis)
    +G_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of $G$ vectors of a given basis or kpt, in cartesian coordinates.

    source
    DFTK.Gplusk_vectorsMethod
    Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any
    +
    Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of $G + k$ vectors, in reduced coordinates.

    source
    DFTK.Gplusk_vectors_cartMethod
    Gplusk_vectors_cart(
    +    basis::PlaneWaveBasis,
    +    kpt::Kpoint
    +) -> Any
    +
    Gplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)

    The list of $G + k$ vectors, in cartesian coordinates.

    source
    DFTK.Gplusk_vectors_in_supercellMethod
    Gplusk_vectors_in_supercell(
    +    basis::PlaneWaveBasis,
    +    basis_supercell::PlaneWaveBasis,
    +    kpt::Kpoint
    +) -> Any
    +

    Maps all $k+G$ vectors of an given basis as $G$ vectors of the supercell basis, in reduced coordinates.

    source
    DFTK.HybridMixingMethod
    HybridMixing(
    +;
    +    εr,
    +    kTF,
    +    localization,
    +    adjust_temperature,
    +    kwargs...
    +) -> χ0Mixing
    +

    The model for the susceptibility is

    \[\begin{aligned} + χ_0(r, r') &= (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D) \\ + &+ \sqrt{L(x)} \text{IFFT} \frac{C_0 G^2}{4π (1 - C_0 G^2 / k_{TF}^2)} \text{FFT} \sqrt{L(x)} +\end{aligned}\]

    where $C_0 = 1 - ε_r$, $D_\text{loc}$ is the local density of states, $D$ is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020.

    Important kwargs passed on to χ0Mixing

    • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
    • verbose: Run the GMRES in verbose mode.
    • reltol: Relative tolerance for GMRES
    source
    DFTK.IncreaseMixingTemperatureMethod
    IncreaseMixingTemperature(
    +;
    +    factor,
    +    above_ρdiff,
    +    temperature_max
    +) -> DFTK.var"#callback#688"{DFTK.var"#callback#687#689"{Int64, Float64}}
    +

    Increase the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.

    source
    DFTK.LdosMixingMethod
    LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing
    +

    The model for the susceptibility is

    \[\begin{aligned} + χ_0(r, r') &= (-D_\text{loc}(r) δ(r, r') + D_\text{loc}(r) D_\text{loc}(r') / D) +\end{aligned}\]

    where $D_\text{loc}$ is the local density of states, $D$ is the density of states. For details see Herbst, Levitt 2020.

    Important kwargs passed on to χ0Mixing

    • RPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)
    • verbose: Run the GMRES in verbose mode.
    • reltol: Relative tolerance for GMRES
    source
    DFTK.ScfAcceptImprovingStepMethod
    ScfAcceptImprovingStep(
    +;
    +    max_energy_change,
    +    max_relative_residual
    +) -> DFTK.var"#accept_step#778"{Float64, Float64}
    +

    Accept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.

    source
    DFTK.apply_KMethod
    apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any
    +
    apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)

    Compute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.

    source
    DFTK.apply_kernelMethod
    apply_kernel(
    +    basis::PlaneWaveBasis,
    +    δρ;
    +    RPA,
    +    kwargs...
    +) -> Any
    +
    apply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)

    Computes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.

    source
    DFTK.apply_symopMethod
    apply_symop(
    +    symop::SymOp,
    +    basis,
    +    kpoint,
    +    ψk::AbstractVecOrMat
    +) -> Tuple{Any, Any}
    +

    Apply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new $k$-point).

    source
    DFTK.apply_symopMethod
    apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any
    +

    Apply a symmetry operation to a density.

    source
    DFTK.apply_ΩMethod
    apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any
    +
    apply_Ω(δψ, ψ, H::Hamiltonian, Λ)

    Compute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.

    source
    DFTK.apply_χ0Method
    apply_χ0(
    +    ham,
    +    ψ,
    +    occupation,
    +    εF,
    +    eigenvalues,
    +    δV::AbstractArray{TδV};
    +    occupation_threshold,
    +    q,
    +    kwargs_sternheimer...
    +) -> Any
    +

    Get the density variation δρ corresponding to a potential variation δV.

    source
    DFTK.attach_pspMethod
    attach_psp(
    +    system::AtomsBase.AbstractSystem,
    +    pspmap::AbstractDict{Symbol, String}
    +) -> AtomsBase.FlexibleSystem
    +
    attach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})
    +attach_psp(system::AbstractSystem; psps::String...)

    Return a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.

    Examples

    Select pseudopotentials for all silicon and oxygen atoms in the system.

    julia> attach_psp(system, Dict(:Si => "hgh/lda/si-q4", :O => "hgh/lda/o-q6")

    Same thing but using the kwargs syntax:

    julia> attach_psp(system, Si="hgh/lda/si-q4", O="hgh/lda/o-q6")
    source
    DFTK.band_data_to_dictMethod
    band_data_to_dict(
    +    band_data::NamedTuple;
    +    kwargs...
    +) -> Dict{String, Any}
    +

    Convert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns meaningful data. All other processors still return a dictionary (to simplify code in calling locations), but the data may be dummy.

    Some details on the conventions for the returned data:

    • εF: Computed Fermi level (if present in band_data)
    • labels: A mapping of high-symmetry k-Point labels to the index in the "kcoords" vector of the corresponding k-Point.
    • eigenvalues, eigenvalues_error, occupation, residual_norms: (n_bands, n_kpoints, n_spin) arrays of the respective data.
    • n_iter: (n_kpoints, n_spin) array of the number of iterations the diagonalization routine required.
    • kpt_max_n_G: Maximal number of G-vectors used for any k-point.
    • kpt_n_G_vectors: (n_kpoints, n_spin) array, the number of valid G-vectors for each k-point, i.e. the extend along the first axis of ψ where data is valid.
    • kpt_G_vectors: (3, max_n_G, n_kpoints, n_spin) array of the integer (reduced) coordinates of the G-points used for each k-point.
    • ψ: (max_n_G, n_bands, n_kpoints, n_spin) arrays where max_n_G is the maximal number of G-vectors used for any k-point. The data is zero-padded, i.e. for k-points which have less G-vectors than maxnG, then there are tailing zeros.
    source
    DFTK.build_fft_plans!Method
    build_fft_plans!(
    +    tmp::Array{ComplexF64}
    +) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}
    +

    Plan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.

    source
    DFTK.build_form_factorsMethod
    build_form_factors(
    +    psp,
    +    G_plus_k::AbstractArray{StaticArraysCore.SArray{Tuple{3}, TT, 1, 3}, 1}
    +) -> Matrix{T} where T<:(Complex{_A} where _A)
    +

    Build form factors (Fourier transforms of projectors) for an atom centered at 0.

    source
    DFTK.build_projection_vectorsMethod
    build_projection_vectors(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kpt::Kpoint,
    +    psps,
    +    psp_positions
    +) -> Any
    +

    Build projection vectors for a atoms array generated by term_nonlocal

    \[\begin{aligned} +H_{\rm at} &= \sum_{ij} C_{ij} \ket{{\rm proj}_i} \bra{{\rm proj}_j} \\ +H_{\rm per} &= \sum_R \sum_{ij} C_{ij} \ket{{\rm proj}_i(x-R)} \bra{{\rm proj}_j(x-R)} +\end{aligned}\]

    \[\begin{aligned} +\braket{e_k(G') \middle| H_{\rm per}}{e_k(G)} + &= \ldots \\ + &= \frac{1}{Ω} \sum_{ij} C_{ij} \widehat{\rm proj}_i(k+G') \widehat{\rm proj}_j^*(k+G), +\end{aligned}\]

    where $\widehat{\rm proj}_i(p) = ∫_{ℝ^3} {\rm proj}_i(r) e^{-ip·r} dr$.

    We store $\frac{1}{\sqrt Ω} \widehat{\rm proj}_i(k+G)$ in proj_vectors.

    source
    DFTK.cell_to_supercellMethod
    cell_to_supercell(scfres::NamedTuple) -> NamedTuple
    +

    Transpose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:

    • basis_supercell and ψ_supercell are computed by the routines above.
    • The supercell occupations vector is the concatenation of all input occupations vectors.
    • The supercell density is computed with supercell occupations and ψ_supercell.
    • Supercell energies are the multiplication of input energies by the number of unit cells in the supercell.

    Other parameters stay untouched.

    source
    DFTK.cell_to_supercellMethod
    cell_to_supercell(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real
    +) -> PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}
    +

    Construct a plane-wave basis whose unit cell is the supercell associated to an input basis $k$-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.

    source
    DFTK.cell_to_supercellMethod
    cell_to_supercell(
    +    ψ,
    +    basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,
    +    basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real
    +) -> Any
    +

    Re-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at $Γ$-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.

    source
    DFTK.cg!Method
    cg!(
    +    x::AbstractArray{T, 1},
    +    A::LinearMaps.LinearMap{T},
    +    b::AbstractArray{T, 1};
    +    precon,
    +    proj,
    +    callback,
    +    tol,
    +    maxiter,
    +    miniter
    +) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), <:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}}
    +

    Implementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.

    source
    DFTK.charge_ionicMethod
    charge_ionic(el::DFTK.Element) -> Int64
    +

    Return the total ionic charge of an atom type (nuclear charge - core electrons)

    source
    DFTK.charge_nuclearMethod
    charge_nuclear(_::DFTK.Element) -> Int64
    +

    Return the total nuclear charge of an atom type

    source
    DFTK.compute_amn_kpointMethod
    compute_amn_kpoint(
    +    basis::PlaneWaveBasis,
    +    kpt,
    +    ψk,
    +    projections,
    +    n_bands
    +) -> Any
    +

    Compute the starting matrix for Wannierization.

    Wannierization searches for a unitary matrix $U_{m_n}$. As a starting point for the search, we can provide an initial guess function $g$ for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called $[A_k]_{m,n}$, and is computed as follows: $[A_k]_{m,n} = \langle ψ_m^k | g^{\text{per}}_n \rangle$. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.

    Centers are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.

    Given an orbital $g_n$, the periodized orbital is defined by : $g^{per}_n = \sum\limits_{R \in {\rm lattice}} g_n( \cdot - R)$. The Fourier coefficient of $g^{per}_n$ at any G is given by the value of the Fourier transform of $g_n$ in G.

    Each projection is a callable object that accepts the basis and some p-points as an argument, and returns the Fourier transform of $g_n$ at the p-points.

    source
    DFTK.compute_bandsMethod
    compute_bands(
    +    basis_or_scfres,
    +    kpath::Brillouin.KPaths.KPath;
    +    kline_density,
    +    kwargs...
    +) -> NamedTuple
    +

    Compute band data along a specific Brillouin.KPath using a kline_density, the number of $k$-points per inverse bohrs (i.e. overall in units of length).

    If not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.

    source
    DFTK.compute_bandsMethod
    compute_bands(
    +    scfres::NamedTuple,
    +    kgrid::DFTK.AbstractKgrid;
    +    n_bands,
    +    kwargs...
    +) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Any, Any, Vector{T} where T<:NamedTuple}}
    +

    Compute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).

    source
    DFTK.compute_bandsMethod
    compute_bands(
    +    basis::PlaneWaveBasis,
    +    kgrid::DFTK.AbstractKgrid;
    +    n_bands,
    +    n_extra,
    +    ρ,
    +    εF,
    +    eigensolver,
    +    tol,
    +    kwargs...
    +) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Nothing, Nothing, Vector{T} where T<:NamedTuple}}
    +

    Compute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:

    • kgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.
    • tol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.
    • eigensolver: The diagonalisation method to be employed.
    source
    DFTK.compute_currentMethod
    compute_current(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    occupation
    +) -> Vector
    +

    Computes the probability (not charge) current, $∑_n f_n \Im(ψ_n · ∇ψ_n)$.

    source
    DFTK.compute_densityMethod
    compute_density(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    occupation;
    +    occupation_threshold
    +) -> AbstractArray{_A, 4} where _A
    +
    compute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)

    Compute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per $k$-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.

    source
    DFTK.compute_dosMethod
    compute_dos(
    +    ε,
    +    basis,
    +    eigenvalues;
    +    smearing,
    +    temperature
    +) -> Any
    +

    Total density of states at energy ε

    source
    DFTK.compute_dynmatMethod
    compute_dynmat(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    occupation;
    +    q,
    +    ρ,
    +    ham,
    +    εF,
    +    eigenvalues,
    +    kwargs...
    +) -> Any
    +

    Compute the dynamical matrix in the form of a $3×n_{\rm atoms}×3×n_{\rm atoms}$ tensor in reduced coordinates.

    source
    DFTK.compute_fft_sizeMethod
    compute_fft_size(
    +    model::Model{T},
    +    Ecut;
    +    ...
    +) -> Tuple{Vararg{Any, _A}} where _A
    +compute_fft_size(
    +    model::Model{T},
    +    Ecut,
    +    kgrid;
    +    ensure_smallprimes,
    +    algorithm,
    +    factors,
    +    kwargs...
    +) -> Tuple{Vararg{Any, _A}} where _A
    +

    Determine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).

    Optionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.

    The function will determine the smallest parallelepiped containing the wave vectors $|G|^2/2 \leq E_\text{cut} ⋅ \text{supersampling}^2$. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.

    If factors is not empty, ensure that the resulting fft_size contains all the factors

    source
    DFTK.compute_forcesMethod
    compute_forces(scfres) -> Any
    +

    Compute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.

    source
    DFTK.compute_forces_cartMethod
    compute_forces_cart(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    occupation;
    +    kwargs...
    +) -> Any
    +

    Compute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.

    source
    DFTK.compute_inverse_latticeMethod
    compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any
    +

    Compute the inverse of the lattice. Takes special care of 1D or 2D cases.

    source
    DFTK.compute_kernelMethod
    compute_kernel(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real;
    +    kwargs...
    +) -> Any
    +
    compute_kernel(basis::PlaneWaveBasis; kwargs...)

    Computes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks

    \[\left(\begin{array}{cc} + K_{αα} & K_{αβ}\\ + K_{βα} & K_{ββ} +\end{array}\right)\]

    source
    DFTK.compute_ldosMethod
    compute_ldos(
    +    ε,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues,
    +    ψ;
    +    smearing,
    +    temperature,
    +    weight_threshold
    +) -> AbstractArray{_A, 4} where _A
    +

    Local density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.

    source
    DFTK.compute_occupationMethod
    compute_occupation(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues::AbstractVector,
    +    εF::Number;
    +    temperature,
    +    smearing
    +) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}
    +

    Compute occupation given eigenvalues and Fermi level

    source
    DFTK.compute_occupationMethod
    compute_occupation(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues::AbstractVector;
    +    ...
    +) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}
    +compute_occupation(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    eigenvalues::AbstractVector,
    +    fermialg::AbstractFermiAlgorithm;
    +    tol_n_elec,
    +    temperature,
    +    smearing
    +) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}
    +

    Compute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.

    source
    DFTK.compute_recip_latticeMethod
    compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any
    +

    Compute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.

    source
    DFTK.compute_stresses_cartMethod
    compute_stresses_cart(scfres) -> Any
    +

    Compute the stresses of an obtained SCF solution. The stress tensor is given by

    \[\left( \begin{array}{ccc} +σ_{xx} σ_{xy} σ_{xz} \\ +σ_{yx} σ_{yy} σ_{yz} \\ +σ_{zx} σ_{zy} σ_{zz} +\right) = \frac{1}{|Ω|} \left. \frac{dE[ (I+ϵ) * L]}{dM}\right|_{ϵ=0}\]

    where $ϵ$ is the strain. See O. Nielsen, R. Martin Phys. Rev. B. 32, 3792 (1985) for details. In Voigt notation one would use the vector $[σ_{xx} σ_{yy} σ_{zz} σ_{zy} σ_{zx} σ_{yx}]$.

    source
    DFTK.compute_transfer_matrixMethod
    compute_transfer_matrix(
    +    basis_in::PlaneWaveBasis,
    +    kpt_in::Kpoint,
    +    basis_out::PlaneWaveBasis,
    +    kpt_out::Kpoint
    +) -> Any
    +

    Return a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.

    source
    DFTK.compute_transfer_matrixMethod
    compute_transfer_matrix(
    +    basis_in::PlaneWaveBasis,
    +    basis_out::PlaneWaveBasis
    +) -> Vector
    +

    Return a list of sparse matrices (one per $k$-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.

    source
    DFTK.compute_unit_cell_volumeMethod
    compute_unit_cell_volume(lattice) -> Any
    +

    Compute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.

    source
    DFTK.compute_δHψ_αsMethod
    compute_δHψ_αs(basis::PlaneWaveBasis, ψ, α, s, q) -> Any
    +

    Assemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.

    source
    DFTK.compute_δocc!Method
    compute_δocc!(
    +    δocc,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    εF,
    +    ε,
    +    δHψ
    +) -> NamedTuple{(:δocc, :δεF), <:Tuple{Any, Any}}
    +

    Compute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.

    source
    DFTK.compute_δψ!Method
    compute_δψ!(
    +    δψ,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    H,
    +    ψ,
    +    εF,
    +    ε,
    +    δHψ;
    +    ...
    +)
    +compute_δψ!(
    +    δψ,
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    H,
    +    ψ,
    +    εF,
    +    ε,
    +    δHψ,
    +    ε_minus_q;
    +    ψ_extra,
    +    q,
    +    kwargs_sternheimer...
    +)
    +

    Perform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.

    source
    DFTK.compute_χ0Method
    compute_χ0(ham; temperature) -> Any
    +

    Compute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:

    \[\left(\begin{array}{cc} + (χ_0)_{αα} & (χ_0)_{αβ} \\ + (χ_0)_{βα} & (χ_0)_{ββ} +\end{array}\right)\]

    source
    DFTK.count_n_projMethod
    count_n_proj(psps, psp_positions) -> Any
    +
    count_n_proj(psps, psp_positions)

    Number of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.

    source
    DFTK.count_n_projMethod
    count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any
    +
    count_n_proj(psp, l)

    Number of projector functions for angular momentum l, including angular parts from -m:m.

    source
    DFTK.count_n_projMethod
    count_n_proj(psp::DFTK.NormConservingPsp) -> Int64
    +
    count_n_proj(psp)

    Number of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.

    source
    DFTK.count_n_proj_radialMethod
    count_n_proj_radial(
    +    psp::DFTK.NormConservingPsp,
    +    l::Integer
    +) -> Any
    +
    count_n_proj_radial(psp, l)

    Number of projector radial functions at angular momentum l.

    source
    DFTK.count_n_proj_radialMethod
    count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64
    +
    count_n_proj_radial(psp)

    Number of projector radial functions at all angular momenta up to psp.lmax.

    source
    DFTK.create_supercellMethod
    create_supercell(
    +    lattice,
    +    atoms,
    +    positions,
    +    supercell_size
    +) -> NamedTuple{(:lattice, :atoms, :positions), <:Tuple{Any, Any, Any}}
    +

    Construct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.

    source
    DFTK.datadir_pspMethod
    datadir_psp() -> String
    +

    Return the data directory with pseudopotential files

    source
    DFTK.default_fermialgMethod
    default_fermialg(
    +    _::DFTK.Smearing.SmearingFunction
    +) -> FermiBisection
    +

    Default selection of a Fermi level determination algorithm

    source
    DFTK.default_symmetriesMethod
    default_symmetries(
    +    lattice,
    +    atoms,
    +    positions,
    +    magnetic_moments,
    +    spin_polarization,
    +    terms;
    +    tol_symmetry
    +) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
    +

    Default logic to determine the symmetry operations to be used in the model.

    source
    DFTK.default_wannier_centersMethod
    default_wannier_centers(n_wannier) -> Any
    +

    Default random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.

    source
    DFTK.diagonalize_all_kblocksMethod
    diagonalize_all_kblocks(
    +    eigensolver,
    +    ham::Hamiltonian,
    +    nev_per_kpoint::Int64;
    +    ψguess,
    +    prec_type,
    +    interpolate_kpoints,
    +    tol,
    +    miniter,
    +    maxiter,
    +    n_conv_check
    +) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}
    +

    Function for diagonalising each $k$-Point blow of ham one step at a time. Some logic for interpolating between $k$-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single $k$-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)

    source
    DFTK.diameterMethod
    diameter(lattice::AbstractMatrix) -> Any
    +

    Compute the diameter of the unit cell

    source
    DFTK.direct_minimizationMethod
    direct_minimization(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real;
    +    ψ,
    +    tol,
    +    is_converged,
    +    maxiter,
    +    prec_type,
    +    callback,
    +    optim_method,
    +    linesearch,
    +    kwargs...
    +) -> Any
    +

    Computes the ground state by direct minimization. kwargs... are passed to Optim.Options() and optim_method selects the optim approach which is employed.

    source
    DFTK.disable_threadingMethod
    disable_threading() -> Union{Nothing, Bool}
    +

    Convenience function to disable all threading in DFTK and assert that Julia threading is off as well.

    source
    DFTK.divergence_realMethod
    divergence_real(operand, basis) -> Any
    +

    Compute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.

    source
    DFTK.energy_forces_ewaldMethod
    energy_forces_ewald(
    +    lattice::AbstractArray{T},
    +    charges::AbstractArray,
    +    positions;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
    +

    Standard computation of energy and forces.

    source
    DFTK.energy_forces_ewaldMethod
    energy_forces_ewald(
    +    lattice::AbstractArray{T},
    +    charges,
    +    positions,
    +    q,
    +    ph_disp;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
    +

    Computation for phonons; required to build the dynamical matrix.

    source
    DFTK.energy_forces_ewaldMethod
    energy_forces_ewald(
    +    S,
    +    lattice::AbstractArray{T},
    +    charges,
    +    positions,
    +    q,
    +    ph_disp;
    +    η
    +) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
    +

    Compute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.

    lattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.

    For now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.

    source
    DFTK.energy_forces_pairwiseMethod
    energy_forces_pairwise(
    +    lattice::AbstractArray{T},
    +    symbols,
    +    positions,
    +    V,
    +    params;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
    +

    Standard computation of energy and forces.

    source
    DFTK.energy_forces_pairwiseMethod
    energy_forces_pairwise(
    +    lattice::AbstractArray{T},
    +    symbols,
    +    positions,
    +    V,
    +    params,
    +    q,
    +    ph_disp;
    +    kwargs...
    +) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
    +

    Computation for phonons; required to build the dynamical matrix.

    source
    DFTK.energy_forces_pairwiseMethod
    energy_forces_pairwise(
    +    S,
    +    lattice::AbstractArray{T},
    +    symbols,
    +    positions,
    +    V,
    +    params,
    +    q,
    +    ph_disp;
    +    max_radius
    +) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}
    +

    Compute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.

    lattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).

    The potential is expected to decrease quickly at infinity.

    source
    DFTK.energy_psp_correctionMethod
    energy_psp_correction(
    +    lattice::AbstractArray{T, 2},
    +    atoms,
    +    atom_groups
    +) -> Any
    +

    Compute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.

    source
    DFTK.enforce_real!Method
    enforce_real!(
    +    fourier_coeffs,
    +    basis::PlaneWaveBasis
    +) -> AbstractArray
    +

    Ensure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.

    source
    DFTK.estimate_integer_lattice_boundsMethod
    estimate_integer_lattice_bounds(
    +    M::AbstractArray{T, 2},
    +    δ;
    +    ...
    +) -> Vector
    +estimate_integer_lattice_bounds(
    +    M::AbstractArray{T, 2},
    +    δ,
    +    shift;
    +    tol
    +) -> Vector
    +

    Estimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.

    source
    DFTK.eval_psp_density_core_fourierMethod
    eval_psp_density_core_fourier(
    +    _::DFTK.NormConservingPsp,
    +    _::Real
    +) -> Any
    +
    eval_psp_density_core_fourier(psp, p)

    Evaluate the atomic core charge density in reciprocal space:

    \[\begin{aligned} +ρ_{\rm core}(p) &= ∫_{ℝ^3} ρ_{\rm core}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} ρ_{\rm core}(r) \frac{\sin(p·r)}{ρ·r} r^2 dr. +\end{aligned}\]

    source
    DFTK.eval_psp_density_core_realMethod
    eval_psp_density_core_real(
    +    _::DFTK.NormConservingPsp,
    +    _::Real
    +) -> Any
    +
    eval_psp_density_core_real(psp, r)

    Evaluate the atomic core charge density in real space.

    source
    DFTK.eval_psp_density_valence_fourierMethod
    eval_psp_density_valence_fourier(
    +    psp::DFTK.NormConservingPsp,
    +    p::AbstractVector
    +) -> Any
    +
    eval_psp_density_valence_fourier(psp, p)

    Evaluate the atomic valence charge density in reciprocal space:

    \[\begin{aligned} +ρ_{\rm val}(p) &= ∫_{ℝ^3} ρ_{\rm val}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} ρ_{\rm val}(r) \frac{\sin(p·r)}{ρ·r} r^2 dr. +\end{aligned}\]

    source
    DFTK.eval_psp_density_valence_realMethod
    eval_psp_density_valence_real(
    +    psp::DFTK.NormConservingPsp,
    +    r::AbstractVector
    +) -> Any
    +
    eval_psp_density_valence_real(psp, r)

    Evaluate the atomic valence charge density in real space.

    source
    DFTK.eval_psp_energy_correctionFunction
    eval_psp_energy_correction([T=Float64,] psp, n_electrons)

    Evaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.

    Notice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.

    The energy correction is defined as the limit of the Fourier-transform of the local potential as $p \to 0$, using the same correction as in the Fourier-transform of the local potential:

    \[\lim_{p \to 0} 4π N_{\rm elec} ∫_{ℝ_+} (V(r) - C(r)) \frac{\sin(p·r)}{p·r} r^2 dr + F[C(r)] + = 4π N_{\rm elec} ∫_{ℝ_+} (V(r) + Z/r) r^2 dr.\]

    source
    DFTK.eval_psp_local_fourierMethod
    eval_psp_local_fourier(
    +    psp::DFTK.NormConservingPsp,
    +    p::AbstractVector
    +) -> Any
    +
    eval_psp_local_fourier(psp, p)

    Evaluate the local part of the pseudopotential in reciprocal space:

    \[\begin{aligned} +V_{\rm loc}(p) &= ∫_{ℝ^3} V_{\rm loc}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} V_{\rm loc}(r) \frac{\sin(p·r)}{p} r dr +\end{aligned}\]

    In practice, the local potential should be corrected using a Coulomb-like term $C(r) = -Z/r$ to remove the long-range tail of $V_{\rm loc}(r)$ from the integral:

    \[\begin{aligned} +V_{\rm loc}(p) &= ∫_{ℝ^3} (V_{\rm loc}(r) - C(r)) e^{-ip·r} dr + F[C(r)] \\ + &= 4π ∫_{ℝ_+} (V_{\rm loc}(r) + Z/r) \frac{\sin(p·r)}{p·r} r^2 dr - Z/p^2. +\end{aligned}\]

    source
    DFTK.eval_psp_local_realMethod
    eval_psp_local_real(
    +    psp::DFTK.NormConservingPsp,
    +    r::AbstractVector
    +) -> Any
    +
    eval_psp_local_real(psp, r)

    Evaluate the local part of the pseudopotential in real space.

    source
    DFTK.eval_psp_projector_fourierMethod
    eval_psp_projector_fourier(
    +    psp::DFTK.NormConservingPsp,
    +    p::AbstractVector
    +)
    +
    eval_psp_projector_fourier(psp, i, l, p)

    Evaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus p:

    \[\begin{aligned} +{\rm proj}(p) &= ∫_{ℝ^3} {\rm proj}_{il}(r) e^{-ip·r} dr \\ + &= 4π ∫_{ℝ_+} r^2 {\rm proj}_{il}(r) j_l(p·r) dr. +\end{aligned}\]

    source
    DFTK.eval_psp_projector_realMethod
    eval_psp_projector_real(
    +    psp::DFTK.NormConservingPsp,
    +    i,
    +    l,
    +    r::AbstractVector
    +) -> Any
    +
    eval_psp_projector_real(psp, i, l, r)

    Evaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.

    source
    DFTK.filled_occupationMethod
    filled_occupation(model) -> Int64
    +

    Maximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).

    source
    DFTK.find_equivalent_kptMethod
    find_equivalent_kpt(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    kcoord,
    +    spin;
    +    tol
    +) -> NamedTuple{(:index, :ΔG), <:Tuple{Int64, Any}}
    +

    Find the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.

    source
    DFTK.gather_kptsMethod
    gather_kpts(
    +    basis::PlaneWaveBasis
    +) -> Union{Nothing, PlaneWaveBasis}
    +

    Gather the distributed $k$-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only for debugging or to extract data for serialisation to disk.

    source
    DFTK.gather_kpts_block!Method
    gather_kpts_block!(
    +    dest,
    +    basis::PlaneWaveBasis,
    +    kdata::AbstractArray{A, 1}
    +) -> Any
    +

    Gather the distributed data of a quantity depending on k-Points on the master process and save it in dest as a dense (size(kdata[1])..., n_kpoints) array. On the other (non-master) processes nothing is returned.

    source
    DFTK.guess_densityFunction
    guess_density(
    +    basis::PlaneWaveBasis,
    +    method::AtomicDensity;
    +    ...
    +) -> Any
    +guess_density(
    +    basis::PlaneWaveBasis,
    +    method::AtomicDensity,
    +    magnetic_moments;
    +    n_electrons
    +) -> Any
    +
    guess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,
    +              magnetic_moments=[]; n_electrons=basis.model.n_electrons)

    Build a superposition of atomic densities (SAD) guess density or a rarndom guess density.

    The guess atomic densities are taken as one of the following depending on the input method:

    -RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:

    \[\hat{ρ}(G) = Z_{\mathrm{valence}} \exp\left(-(2π \text{length} |G|)^2\right)\]

    • ValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the

    pseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.

    When magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of $μ_B$.

    source
    DFTK.hankelMethod
    hankel(
    +    r::AbstractVector,
    +    r2_f::AbstractVector,
    +    l::Integer,
    +    p::Real
    +) -> Any
    +
    hankel(r, r2_f, l, p)

    Compute the Hankel transform

    \[ H[f] = 4\pi \int_0^\infty r f(r) j_l(p·r) r dr.\]

    The integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate p.

    source
    DFTK.has_core_densityMethod
    has_core_density(_::DFTK.Element) -> Any
    +

    Check presence of model core charge density (non-linear core correction).

    source
    DFTK.index_G_vectorsMethod
    index_G_vectors(
    +    fft_size::Tuple,
    +    G::AbstractVector{<:Integer}
    +) -> Any
    +

    Return the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.

    source
    DFTK.interpolate_densityMethod
    interpolate_density(
    +    ρ_in::AbstractArray{T, 4},
    +    basis_in::PlaneWaveBasis,
    +    basis_out::PlaneWaveBasis
    +) -> AbstractArray{T, 4} where T
    +

    Interpolate a density expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.

    source
    DFTK.interpolate_densityMethod
    interpolate_density(
    +    ρ_in::AbstractArray{T, 4},
    +    grid_in::Tuple{T, T, T} where T,
    +    grid_out::Tuple{T, T, T} where T,
    +    lattice_in,
    +    lattice_out
    +) -> AbstractArray{T, 4} where T
    +

    Interpolate a density in real space from one FFT grid to another, where lattice_in and lattice_out may be supercells of each other.

    source
    DFTK.interpolate_densityMethod
    interpolate_density(
    +    ρ_in::AbstractArray{T, 4},
    +    grid_out::Tuple{T, T, T} where T
    +) -> AbstractArray{T, 4} where T
    +

    Interpolate a density in real space from one FFT grid to another. Assumes the lattice is unchanged.

    source
    DFTK.interpolate_kpointMethod
    interpolate_kpoint(
    +    data_in::AbstractVecOrMat,
    +    basis_in::PlaneWaveBasis,
    +    kpoint_in::Kpoint,
    +    basis_out::PlaneWaveBasis,
    +    kpoint_out::Kpoint
    +) -> Any
    +

    Interpolate some data from one $k$-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.

    source
    DFTK.irfftMethod
    irfft(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    f_fourier::AbstractArray
    +) -> Any
    +

    Perform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.

    source
    DFTK.irreducible_kcoordsMethod
    irreducible_kcoords(
    +    kgrid::MonkhorstPack,
    +    symmetries::AbstractVector{<:SymOp};
    +    check_symmetry
    +) -> Union{@NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, kweights::Vector{Float64}}, @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Float64}}, kweights::Vector{Float64}}}
    +

    Construct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.

    source
    DFTK.is_metalMethod
    is_metal(eigenvalues, εF; tol) -> Bool
    +
    is_metal(eigenvalues, εF; tol)

    Determine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.

    source
    DFTK.k_to_equivalent_kpq_permutationMethod
    k_to_equivalent_kpq_permutation(
    +    basis::PlaneWaveBasis,
    +    qcoord
    +) -> Vector
    +

    Return the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.

    source
    DFTK.kgrid_from_maximal_spacingMethod
    kgrid_from_maximal_spacing(
    +    lattice,
    +    spacing;
    +    kshift
    +) -> Union{MonkhorstPack, Vector{Int64}}
    +

    Build a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around $2π * 0.04 \AA^{-1}$).

    source
    DFTK.kgrid_from_minimal_n_kpointsMethod
    kgrid_from_minimal_n_kpoints(
    +    lattice,
    +    n_kpoints::Integer;
    +    kshift
    +) -> Union{MonkhorstPack, Vector{Int64}}
    +

    Selects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of $k$-points are used. The distribution of $k$-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.

    source
    DFTK.kpath_get_kcoordsMethod
    kpath_get_kcoords(
    +    kinter::Brillouin.KPaths.KPathInterpolant{D}
    +) -> Vector
    +

    Return kpoint coordinates in reduced coordinates

    source
    DFTK.kpq_equivalent_blochwave_to_kpqMethod
    kpq_equivalent_blochwave_to_kpq(
    +    basis,
    +    kpt,
    +    q,
    +    ψk_plus_q_equivalent
    +) -> NamedTuple{(:kpt, :ψk), <:Tuple{Kpoint, Any}}
    +

    Create the Fourier expansion of $ψ_{k+q}$ from $ψ_{[k+q]}$, where $[k+q]$ is in basis.kpoints. while $k+q$ may or may not be inside.

    If $ΔG ≔ [k+q] - (k+q)$, then we have that

    \[ ∑_G \hat{u}_{[k+q]}(G) e^{i(k+q+G)·r} &= ∑_{G'} \hat{u}_{k+q}(G'-ΔG) e^{i(k+q+ΔG+G')·r},\]

    hence

    \[ u_{k+q}(G) = u_{[k+q]}(G + ΔG).\]

    source
    DFTK.krange_spinMethod
    krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any
    +

    Return the index range of $k$-points that have a particular spin component.

    source
    DFTK.kwargs_scf_checkpointsMethod
    kwargs_scf_checkpoints(
    +    basis::DFTK.AbstractBasis;
    +    filename,
    +    callback,
    +    diagtolalg,
    +    ρ,
    +    ψ,
    +    save_ψ,
    +    kwargs...
    +) -> NamedTuple{(:callback, :diagtolalg, :ψ, :ρ), <:Tuple{ComposedFunction{ScfDefaultCallback, ScfSaveCheckpoints}, AdaptiveDiagtol, Any, Any}}
    +

    Transparently handle checkpointing by either returning kwargs for self_consistent_field, which start checkpointing (if no checkpoint file is present) or that continue a checkpointed run (if a checkpoint file can be loaded). filename is the location where the checkpoint is saved, save_ψ determines whether orbitals are saved in the checkpoint as well. The latter is discouraged, since generally slow.

    source
    DFTK.list_pspFunction
    list_psp(; ...) -> Any
    +list_psp(element; family, functional, core) -> Any
    +
    list_psp(element; functional, family, core)

    List the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.

    Examples

    julia> list_psp(; family="hgh")

    will list all HGH-type pseudopotentials and

    julia> list_psp(; family="hgh", functional="lda")

    will only list those for LDA (also known as Pade in this context) and

    julia> list_psp(:O, core=:semicore)

    will list all oxygen semicore pseudopotentials known to DFTK.

    source
    DFTK.load_pspMethod
    load_psp(
    +    key::AbstractString;
    +    kwargs...
    +) -> Union{PspHgh{Float64}, PspUpf{_A, Interpolations.Extrapolation{T, 1, ITPT, IT, Interpolations.Throw{Nothing}}} where {_A, T, ITPT, IT}}
    +

    Load a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.

    source
    DFTK.load_scfresFunction
    load_scfres(filename::AbstractString; ...) -> Any
    +load_scfres(
    +    filename::AbstractString,
    +    basis;
    +    skip_hamiltonian,
    +    strict
    +) -> Any
    +

    Load back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.

    If basis is nothing, the basis is also loaded and reconstructed from the file, in which case architecture=CPU(). If a basis is passed, this one is used, which can be used to continue computation on a slightly different model or to avoid the cost of rebuilding the basis. If the stored basis and the passed basis are inconsistent (e.g. different FFT size, Ecut, k-points etc.) the load_scfres will error out.

    By default the energies and ham (Hamiltonian object) are recomputed. To avoid this, set skip_hamiltonian=true. On errors the routine exits unless strict=false in which case it tries to recover from the file as much data as it can, but then the resulting scfres might not be fully consistent.

    No compatibility guarantees

    No guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions (including patch versions) or stop working / be removed in the future.

    source
    DFTK.model_DFTMethod
    model_DFT(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector},
    +    xc::Xc;
    +    extra_terms,
    +    kwargs...
    +) -> Model
    +

    Build a DFT model from the specified atoms, with the specified functionals.

    source
    DFTK.model_atomicMethod
    model_atomic(
    +    lattice::AbstractMatrix,
    +    atoms::Vector{<:DFTK.Element},
    +    positions::Vector{<:AbstractVector};
    +    extra_terms,
    +    kinetic_blowup,
    +    kwargs...
    +) -> Model
    +

    Convenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.

    source
    DFTK.mpi_nprocsFunction
    mpi_nprocs() -> Int64
    +mpi_nprocs(comm) -> Int64
    +

    Number of processors used in MPI. Can be called without ensuring initialization.

    source
    DFTK.multiply_ψ_by_blochwaveMethod
    multiply_ψ_by_blochwave(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    f_real,
    +    q
    +) -> Any
    +
    multiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)

    Return the Fourier coefficients for the Bloch waves $f^{\rm real}_{q} ψ_{k-q}$ in an element of basis.kpoints equivalent to $k-q$.

    source
    DFTK.newtonMethod
    newton(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ0;
    +    tol,
    +    tol_cg,
    +    maxiter,
    +    callback,
    +    is_converged
    +) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String, UInt64}}
    +
    newton(basis::PlaneWaveBasis{T}, ψ0;
    +       tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),
    +       is_converged=ScfConvergenceDensity(tol))

    Newton algorithm. Be careful that the starting point needs to be not too far from the solution.

    source
    DFTK.next_compatible_fft_sizeMethod
    next_compatible_fft_size(
    +    size::Int64;
    +    smallprimes,
    +    factors
    +) -> Int64
    +

    Find the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.

    source
    DFTK.next_densityFunction
    next_density(
    +    ham::Hamiltonian;
    +    ...
    +) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Float64}}
    +next_density(
    +    ham::Hamiltonian,
    +    nbandsalg::DFTK.NbandsAlgorithm;
    +    ...
    +) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}
    +next_density(
    +    ham::Hamiltonian,
    +    nbandsalg::DFTK.NbandsAlgorithm,
    +    fermialg::AbstractFermiAlgorithm;
    +    eigensolver,
    +    ψ,
    +    eigenvalues,
    +    occupation,
    +    kwargs...
    +) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}
    +

    Obtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.

    source
    DFTK.norm_cplxMethod
    norm_cplx(x) -> Any
    +

    Complex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.

    source
    DFTK.overlap_Mmn_k_kpbMethod
    overlap_Mmn_k_kpb(
    +    basis::PlaneWaveBasis,
    +    ψ,
    +    ik,
    +    ik_plus_b,
    +    G_shift,
    +    n_bands
    +) -> Any
    +

    Computes the matrix $[M^{k,b}]_{m,n} = \langle u_{m,k} | u_{n,k+b} \rangle$ for given k.

    G_shift is the "shifting" vector, correction due to the periodicity conditions imposed on $k \to ψ_k$. It is non zero if k_plus_b is taken in another unit cell of the reciprocal lattice. We use here that: $u_{n(k + G_{\rm shift})}(r) = e^{-i*\langle G_{\rm shift},r \rangle} u_{nk}$.

    source
    DFTK.pcut_psp_localMethod
    pcut_psp_local(psp::PspHgh{T}) -> Any
    +

    Estimate an upper bound for the argument p after which abs(eval_psp_local_fourier(psp, p)) is a strictly decreasing function.

    source
    DFTK.pcut_psp_projectorMethod
    pcut_psp_projector(psp::PspHgh{T}, i, l) -> Any
    +

    Estimate an upper bound for the argument p after which eval_psp_projector_fourier(psp, p) is a strictly decreasing function.

    source
    DFTK.phonon_modesMethod
    phonon_modes(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    dynmat
    +) -> NamedTuple{(:frequencies, :vectors), <:Tuple{Any, Any}}
    +

    Solve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).

    source
    DFTK.plot_bandstructureFunction

    Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u"eV" (electron volts).

    source
    DFTK.plot_dosFunction

    Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.

    source
    DFTK.psp_local_polynomialFunction
    psp_local_polynomial(T, psp::PspHgh) -> Any
    +psp_local_polynomial(T, psp::PspHgh, t) -> Any
    +

    The local potential of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) / (t^2 exp(t^2 / 2))$ where $t = r_\text{loc} p$ and Q is a polynomial of at most degree 8. This function returns Q.

    source
    DFTK.psp_projector_polynomialFunction
    psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any
    +psp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any
    +

    The nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form $Q(t) exp(-t^2 / 2)$ where $t = r_l p$ and Q is a polynomial. This function returns Q.

    source
    DFTK.r_vectorsMethod
    r_vectors(
    +    basis::PlaneWaveBasis
    +) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real
    +
    r_vectors(basis::PlaneWaveBasis)

    The list of $r$ vectors, in reduced coordinates. By convention, this is in [0,1)^3.

    source
    DFTK.r_vectors_cartMethod
    r_vectors_cart(basis::PlaneWaveBasis) -> Any
    +
    r_vectors_cart(basis::PlaneWaveBasis)

    The list of $r$ vectors, in cartesian coordinates.

    source
    DFTK.radial_hydrogenicMethod
    radial_hydrogenic(
    +    r::AbstractArray{T<:Real, 1},
    +    n::Integer
    +) -> Any
    +radial_hydrogenic(
    +    r::AbstractArray{T<:Real, 1},
    +    n::Integer,
    +    α::Real
    +) -> Any
    +

    Radial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.

    Arguments

    • r: radial grid
    • n: principal quantum number
    • α: diffusivity, $\frac{Z}{a}$ where $Z$ is the atomic number and $a$ is the Bohr radius.
    source
    DFTK.random_densityMethod
    random_density(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    n_electrons::Integer
    +) -> Any
    +

    Build a random charge density normalized to the provided number of electrons.

    source
    DFTK.read_w90_nnkpMethod
    read_w90_nnkp(
    +    fileprefix::String
    +) -> @NamedTuple{nntot::Int64, nnkpts::Vector{@NamedTuple{ik::Int64, ik_plus_b::Int64, G_shift::Vector{Int64}}}}
    +

    Read the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. "wannier90.x -pp prefix") Returns:

    1. the array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).
    2. the number 'nntot' of neighbors per k point.

    TODO: add the possibility to exclude bands

    source
    DFTK.reducible_kcoordsMethod
    reducible_kcoords(
    +    kgrid::MonkhorstPack
    +) -> @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}
    +

    Construct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid

    source
    DFTK.run_wannier90Function

    Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.

    Experimental feature

    Currently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.

    source
    DFTK.save_bandsMethod
    save_bands(
    +    filename::AbstractString,
    +    band_data::NamedTuple;
    +    save_ψ
    +)
    +

    Write the computed bands to a file. On all processes, but the master one the filename is ignored. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.

    Changes to data format reserved

    No guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.

    source
    DFTK.save_scfresMethod
    save_scfres(
    +    filename::AbstractString,
    +    scfres::NamedTuple;
    +    save_ψ,
    +    extra_data,
    +    compress,
    +    save_ρ
    +) -> Any
    +

    Save an scfres obtained from self_consistent_field to a file. On all processes but the master one the filename is ignored. The format is determined from the file extension. Currently the following file extensions are recognized and supported:

    • jld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. Note that this file is also a valid HDF5 file, which can thus similarly be read by external non-Julia libraries such as h5py or similar. See Saving SCF results on disk and SCF checkpoints for details.
    • vts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density, optionally bands and some metadata.
    • json: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, some information about the basis, eigenvalues, Fermi level etc.

    Keyword arguments:

    • save_ψ: Save the orbitals as well (may lead to larger files). This is the default for jld2, but false for all other formats, where this is considerably more expensive.
    • save_ρ: Save the density as well (may lead to larger files). This is the default for all but json.
    • extra_data: Additional data to place into the file. The data is just copied like fp["key"] = value, where fp is a JLD2.JLDFile, WriteVTK.vtk_grid and so on.
    • compress: Apply compression to array data. Requires the CodecZlib package to be available.
    Changes to data format reserved

    No guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.

    source
    DFTK.scatter_kpts_blockMethod
    scatter_kpts_block(
    +    basis::PlaneWaveBasis,
    +    data::Union{Nothing, AbstractArray}
    +) -> Any
    +

    Scatter the data of a quantity depending on k-Points from the master process to the child processes and return it as a Vector{Array}, where the outer vector is a list over all k-points. On non-master processes nothing may be passed.

    source
    DFTK.scf_anderson_solverFunction
    scf_anderson_solver(
    +;
    +    ...
    +) -> DFTK.var"#anderson#695"{DFTK.var"#anderson#694#696"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, Int64}}
    +scf_anderson_solver(
    +    m;
    +    kwargs...
    +) -> DFTK.var"#anderson#695"{DFTK.var"#anderson#694#696"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, _A}} where _A
    +

    Create a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.

    source
    DFTK.scf_damping_quadratic_modelMethod
    scf_damping_quadratic_model(
    +    info,
    +    info_next;
    +    modeltol
    +) -> NamedTuple{(:α, :relerror), <:Tuple{Any, Any}}
    +

    Use the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.

    source
    DFTK.scf_damping_solverFunction
    scf_damping_solver(
    +
    +) -> DFTK.var"#fp_solver#691"{DFTK.var"#fp_solver#690#692"}
    +scf_damping_solver(
    +    β
    +) -> DFTK.var"#fp_solver#691"{DFTK.var"#fp_solver#690#692"}
    +

    Create a damped SCF solver updating the density as x = β * x_new + (1 - β) * x

    source
    DFTK.scfres_to_dictMethod
    scfres_to_dict(
    +    scfres::NamedTuple;
    +    kwargs...
    +) -> Dict{String, Any}
    +

    Convert an scfres to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis as well as the band_data_to_dict functions, which are called by this function and their outputs merged. Only the master process returns meaningful data.

    Some details on the conventions for the returned data:

    • ρ: (fftsize[1], fftsize[2], fftsize[3], nspin) array of density on real-space grid.
    • energies: Dictionary / subdirectory containing the energy terms
    • converged: Has the SCF reached convergence
    • norm_Δρ: Most recent change in ρ during an SCF step
    • occupation_threshold: Threshold below which orbitals are considered unoccupied
    • nbandsconverge: Number of bands that have been fully converged numerically.
    • n_iter: Number of iterations.
    source
    DFTK.select_eigenpairs_all_kblocksMethod
    select_eigenpairs_all_kblocks(eigres, range) -> NamedTuple
    +

    Function to select a subset of eigenpairs on each $k$-Point. Works on the Tuple returned by diagonalize_all_kblocks.

    source
    DFTK.self_consistent_fieldMethod
    self_consistent_field(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real;
    +    ρ,
    +    ψ,
    +    tol,
    +    is_converged,
    +    maxiter,
    +    mixing,
    +    damping,
    +    solver,
    +    eigensolver,
    +    diagtolalg,
    +    nbandsalg,
    +    fermialg,
    +    callback,
    +    compute_consistent_energies,
    +    response
    +) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}}
    +
    self_consistent_field(basis; [tol, mixing, damping, ρ, ψ])

    Solve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where $ρ_\text{next} = α P^{-1} (ρ_\text{out} - ρ_\text{in})$.

    Overview of parameters:

    • ρ: Initial density
    • ψ: Initial orbitals
    • tol: Tolerance for the density change ($\|ρ_\text{out} - ρ_\text{in}\|$) to flag convergence. Default is 1e-6.
    • is_converged: Convergence control callback. Typical objects passed here are ScfConvergenceDensity(tol) (the default), ScfConvergenceEnergy(tol) or ScfConvergenceForce(tol).
    • maxiter: Maximal number of SCF iterations
    • mixing: Mixing method, which determines the preconditioner $P^{-1}$ in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()
    • damping: Damping parameter $α$ in the above equation. Default is 0.8.
    • nbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.
    • callback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.
    source
    DFTK.simpsonFunction
    simpson(x, y)

    Integrate y(x) over x using Simpson's method quadrature.

    source
    DFTK.solve_ΩplusKMethod
    solve_ΩplusK(
    +    basis::PlaneWaveBasis{T, VT} where VT<:Real,
    +    ψ,
    +    rhs,
    +    occupation;
    +    callback,
    +    tol
    +) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), <:Tuple{Any, Bool, Float64, Any, Int64}}
    +
    solve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;
    +             tol=1e-10, verbose=false) where {T}

    Return δψ where (Ω+K) δψ = rhs

    source
    DFTK.solve_ΩplusK_splitMethod
    solve_ΩplusK_split(
    +    ham::Hamiltonian,
    +    ρ::AbstractArray{T},
    +    ψ,
    +    occupation,
    +    εF,
    +    eigenvalues,
    +    rhs;
    +    tol,
    +    tol_sternheimer,
    +    verbose,
    +    occupation_threshold,
    +    q,
    +    kwargs...
    +)
    +

    Solve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).

    source
    DFTK.spglib_standardize_cellMethod
    spglib_standardize_cell(
    +    lattice::AbstractArray{T},
    +    atom_groups,
    +    positions;
    +    ...
    +) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
    +spglib_standardize_cell(
    +    lattice::AbstractArray{T},
    +    atom_groups,
    +    positions,
    +    magnetic_moments;
    +    correct_symmetry,
    +    primitive,
    +    tol_symmetry
    +) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
    +

    Returns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.

    source
    DFTK.sphericalbesselj_fastMethod
    sphericalbesselj_fast(l::Integer, x) -> Any
    +
    sphericalbesselj_fast(l::Integer, x::Number)

    Returns the spherical Bessel function of the first kind jl(x). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions) and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.

    source
    DFTK.spin_componentsMethod
    spin_components(
    +    spin_polarization::Symbol
    +) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}
    +

    Explicit spin components of the KS orbitals and the density

    source
    DFTK.split_evenlyMethod
    split_evenly(itr, N) -> Any
    +

    Split an iterable evenly into N chunks, which will be returned.

    source
    DFTK.standardize_atomsFunction
    standardize_atoms(
    +    lattice,
    +    atoms,
    +    positions;
    +    ...
    +) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
    +standardize_atoms(
    +    lattice,
    +    atoms,
    +    positions,
    +    magnetic_moments;
    +    kwargs...
    +) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}
    +

    Apply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.

    source
    DFTK.symmetries_preserving_kgridMethod
    symmetries_preserving_kgrid(symmetries, kcoords) -> Any
    +

    Filter out the symmetry operations that don't respect the symmetries of the discrete BZ grid

    source
    DFTK.symmetries_preserving_rgridMethod
    symmetries_preserving_rgrid(symmetries, fft_size) -> Any
    +

    Filter out the symmetry operations that don't respect the symmetries of the discrete real-space grid

    source
    DFTK.symmetrize_forcesMethod
    symmetrize_forces(model::Model, forces; symmetries)
    +

    Symmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i].

    source
    DFTK.symmetrize_stressesMethod
    symmetrize_stresses(model::Model, stresses; symmetries)
    +

    Symmetrize the stress tensor, given as a Matrix in cartesian coordinates

    source
    DFTK.symmetrize_ρMethod
    symmetrize_ρ(
    +    basis,
    +    ρ::AbstractArray{T};
    +    symmetries,
    +    do_lowpass
    +) -> Any
    +

    Symmetrize a density by applying all the basis (by default) symmetries and forming the average.

    source
    DFTK.symmetry_operationsFunction
    symmetry_operations(
    +    lattice,
    +    atoms,
    +    positions;
    +    ...
    +) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
    +symmetry_operations(
    +    lattice,
    +    atoms,
    +    positions,
    +    magnetic_moments;
    +    tol_symmetry,
    +    check_symmetry
    +) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}
    +

    Return the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.

    source
    DFTK.symmetry_operationsMethod
    symmetry_operations(
    +    hall_number::Integer
    +) -> Vector{SymOp{Float64}}
    +

    Return the Symmetry operations given a hall_number.

    This function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.

    The definition of hall_number is found at Space group type.

    source
    DFTK.synchronize_deviceMethod
    synchronize_device(_::DFTK.AbstractArchitecture)
    +

    Synchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).

    source
    DFTK.to_cpuMethod
    to_cpu(x::AbstractArray) -> Array
    +

    Transfer an array from a device (typically a GPU) to the CPU.

    source
    DFTK.to_deviceMethod
    to_device(_::DFTK.CPU, x) -> Any
    +

    Transfer an array to a particular device (typically a GPU)

    source
    DFTK.todictMethod
    todict(energies::Energies) -> Dict
    +

    Convert an Energies struct to a dictionary representation

    source
    DFTK.todictMethod
    todict(model::Model) -> Dict{String, Any}
    +

    Convert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).

    Some details on the conventions for the returned data:

    • lattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension
    • atomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.
    • atomic_symbols: Atomic symbols if known.
    • terms: Some rough information on the terms used for the computation.
    • n_electrons: Number of electrons, may be missing if εF is fixed instead
    • εF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.
    source
    DFTK.todictMethod
    todict(basis::PlaneWaveBasis) -> Dict{String, Any}
    +

    Convert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.

    Some details on the conventions for the returned data:

    • dvol: Volume element for real-space integration
    • variational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.
    • kweights: Weights for the k-points, summing to 1.0
    source
    DFTK.total_local_potentialMethod
    total_local_potential(ham::Hamiltonian) -> Any
    +

    Get the total local potential of the given Hamiltonian, in real space in the spin components.

    source
    DFTK.transfer_blochwaveMethod
    transfer_blochwave(
    +    ψ_in,
    +    basis_in::PlaneWaveBasis,
    +    basis_out::PlaneWaveBasis
    +) -> Vector
    +

    Transfer Bloch wave between two basis sets. Limited feature set.

    source
    DFTK.transfer_blochwave_kptMethod
    transfer_blochwave_kpt(
    +    ψk_in,
    +    basis::PlaneWaveBasis,
    +    kpt_in,
    +    kpt_out,
    +    ΔG
    +) -> Any
    +

    Transfer an array ψk_in expanded on kpt_in, and produce $ψ(r) e^{i ΔG·r}$ expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.

    source
    DFTK.transfer_blochwave_kptMethod
    transfer_blochwave_kpt(
    +    ψk_in,
    +    basis_in::PlaneWaveBasis,
    +    kpt_in::Kpoint,
    +    basis_out::PlaneWaveBasis,
    +    kpt_out::Kpoint
    +) -> Any
    +

    Transfer an array ψk defined on basisin $k$-point kptin to basisout $k$-point kptout.

    source
    DFTK.transfer_densityMethod
    transfer_density(
    +    ρ_in,
    +    basis_in::PlaneWaveBasis{T, VT} where VT<:Real,
    +    basis_out::PlaneWaveBasis{T, VT} where VT<:Real
    +) -> Any
    +

    Transfer density (in real space) between two basis sets.

    This function is fast by transferring only the Fourier coefficients from the small basis to the big basis.

    Note that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity $c_G = c_{-G}^\ast$ does not fully hold).

    Note further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.

    source
    DFTK.transfer_mappingMethod
    transfer_mapping(
    +    basis_in::PlaneWaveBasis,
    +    kpt_in::Kpoint,
    +    basis_out::PlaneWaveBasis,
    +    kpt_out::Kpoint
    +) -> Tuple{Any, Any}
    +

    Compute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).

    source
    DFTK.transfer_mappingMethod
    transfer_mapping(
    +    basis_in::PlaneWaveBasis,
    +    basis_out::PlaneWaveBasis
    +) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}
    +

    Compute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).

    source
    DFTK.trapezoidalFunction
    trapezoidal(x, y)

    Integrate y(x) over x using trapezoidal method quadrature.

    source
    DFTK.unfold_bzMethod
    unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis
    +

    " Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).

    source
    DFTK.versioninfoFunction
    versioninfo()
    +versioninfo(io::IO)
    +
    DFTK.versioninfo([io::IO=stdout])

    Summary of version and configuration of DFTK and its key dependencies.

    source
    DFTK.weighted_ksumMethod
    weighted_ksum(basis::PlaneWaveBasis, array) -> Any
    +

    Sum an array over kpoints, taking weights into account

    source
    DFTK.write_w90_eigMethod
    write_w90_eig(fileprefix::String, eigenvalues; n_bands)
    +

    Write the eigenvalues in a format readable by Wannier90.

    source
    DFTK.write_w90_winMethod
    write_w90_win(
    +    fileprefix::String,
    +    basis::PlaneWaveBasis;
    +    bands_plot,
    +    wannier_plot,
    +    kwargs...
    +)
    +

    Write a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.

    source
    DFTK.write_wannier90_filesMethod
    write_wannier90_files(
    +    preprocess_call,
    +    scfres;
    +    n_bands,
    +    n_wannier,
    +    projections,
    +    fileprefix,
    +    wannier_plot,
    +    kwargs...
    +)
    +

    Shared file writing code for Wannier.jl and Wannier90.

    source
    DFTK.ylm_realMethod
    ylm_real(
    +    l::Integer,
    +    m::Integer,
    +    rvec::AbstractArray{T, 1}
    +) -> Any
    +

    Returns the (l,m) real spherical harmonic Ylm(r). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics).

    source
    DFTK.zeros_likeFunction
    zeros_like(X::AbstractArray) -> Any
    +zeros_like(
    +    X::AbstractArray,
    +    T::Type,
    +    dims::Integer...
    +) -> Any
    +

    Create an array of same "array type" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.

    source
    DFTK.@timingMacro

    Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.

    source
    DFTK.Smearing.occupationFunction
    occupation(S::SmearingFunction, x)

    Occupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.

    source
    diff --git a/v0.6.17/assets/0_pregenerate.jl b/v0.6.17/assets/0_pregenerate.jl new file mode 100644 index 0000000000..082d73dda8 --- /dev/null +++ b/v0.6.17/assets/0_pregenerate.jl @@ -0,0 +1,76 @@ +using MKL +using DFTK +using LinearAlgebra +setup_threading(; n_blas=2) + +let + include("../../../../examples/convergence_study.jl") + + result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol) + nkpt_conv = result.nkpt_conv + p = plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log, + xlabel="k-grid", ylabel="energy absolute error", label="") + savefig(p, "convergence_study_kgrid.png") + + result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol) + p = plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log, + xlabel="Ecut", ylabel="energy absolute error", label="") + savefig(p, "convergence_study_ecut.png") +end + +let + include("../../../../examples/pseudopotentials.jl") + function run_scf(Ecut, psp) + println("Ecut = $Ecut") + println("----------------------------------------------------") + a = 5.0 + lattice = a * Matrix(I, 3, 3) + atoms = [ElementPsp(:Si; psp)] + positions = [zeros(3)] + + model = model_LDA(lattice, atoms, positions; temperature=1e-2) + basis = PlaneWaveBasis(model; Ecut, kgrid=[8, 8, 8]) + self_consistent_field(basis; tol=1e-8) + end + + function converge_Ecut(Ecuts, psp, tol) + energy_ref = run_scf(Ecuts[end], psp).energies.total + energies = [] + for Ecut in Ecuts + energy = run_scf(Ecut, psp).energies.total + push!(energies, energy) + if abs(energy - energy_ref) < tol + break + end + end + n_energies = length(energies) + errors = abs.(energies .- energy_ref) + iconv = findfirst(errors .< tol) + (; Ecuts=Ecuts[begin:n_energies], errors, + Ecut_conv=Ecuts[iconv], error_conv=errors[iconv]) + end + + n_atoms = 1 + Ecuts = 4:2:140 + tol_mev_at = 1.0u"meV" / n_atoms + tol = austrip(tol_mev_at) + + conv_upf = converge_Ecut(Ecuts, psp_upf, tol) + println("UPF: $(conv_upf.Ecut_conv)") + + conv_hgh = converge_Ecut(Ecuts, psp_hgh, tol) + println("HGH: $(conv_hgh.Ecut_conv)") + + plt = plot(; yaxis=:log10, xlabel="Ecut [Eh]", ylabel="Error [Eh]") + plot!(plt, conv_hgh.Ecuts, conv_hgh.errors, label="HGH", + markers=true, linewidth=3) + plot!(plt, conv_upf.Ecuts, conv_upf.errors, label="PseudoDojo NC SR LDA UPF", + markers=true, linewidth=3) + hline!(plt, [tol], label="tol = $(round(typeof(1u"meV"), tol_mev_at, digits=3)) / atom", + color=:grey, linestyle=:dash) + scatter!(plt, [conv_hgh.Ecut_conv, conv_upf.Ecut_conv], + [conv_hgh.error_conv, conv_upf.error_conv], + color=:grey, label="", markers=:star, markersize=7) + yticks!(plt, [1e-1, 1e-2, 1e-3, 1e-4, 1e-5, 1e-6, 1e-7, 1e-8]) + savefig(plt, "si_pseudos_ecut_convergence.png") +end diff --git a/v0.6.17/assets/convergence_study_ecut.png b/v0.6.17/assets/convergence_study_ecut.png new file mode 100644 index 0000000000000000000000000000000000000000..bf2b01bb0bdcd648f34b05dfc9d0af63ec2271b2 GIT binary patch literal 87469 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�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

    w((=JV7!N`4{r3(@{N`zot*lSyzWze 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 qOrAnj~>8&N(fNE^hjQSv#BCXu)dA;&mtqjEkHV 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 { + if ($(this).siblings("section").is(":visible")) { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + } else { + $(this) + .find(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + articleToggleTitle = "Collapse docstring"; + } + + $(this) + .find(".docstring-article-toggle-button") + .prop("title", articleToggleTitle); + $(this).siblings("section").slideToggle(); + }); +}); + +$(document).on("click", ".docs-article-toggle-button", function () { + let articleToggleTitle = "Expand docstring"; + let navArticleToggleTitle = "Expand all docstrings"; + + debounce(() => { + if (isExpanded) { + $(this).removeClass("fa-chevron-up").addClass("fa-chevron-down"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-down") + .addClass("fa-chevron-right"); + + isExpanded = false; + + $(".docstring section").slideUp(); + } else { + $(this).removeClass("fa-chevron-down").addClass("fa-chevron-up"); + $(".docstring-article-toggle-button") + .removeClass("fa-chevron-right") + .addClass("fa-chevron-down"); + + isExpanded = true; + articleToggleTitle = "Collapse docstring"; + navArticleToggleTitle = "Collapse all docstrings"; + + $(".docstring section").slideDown(); + } + + $(this).prop("title", navArticleToggleTitle); + $(".docstring-article-toggle-button").prop("title", articleToggleTitle); + }); +}); + +function debounce(callback, timeout = 300) { + if (Date.now() - timer > timeout) { + callback(); + } + + clearTimeout(timer); + + timer = Date.now(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fa-solid", "fa-copy"); + button.setAttribute("aria-label", "Copy this code block"); + button.setAttribute("title", "Copy"); + + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-xmark"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-xmark"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function () { + $("#documenter .docs-navbar").headroom({ + tolerance: { up: 10, down: 10 }, + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'minisearch'], function($, minisearch) { + +// In general, most search related things will have "search" as a prefix. +// To get an in-depth about the thought process you can refer: https://hetarth02.hashnode.dev/series/gsoc + +let results = []; +let timer = undefined; + +let data = documenterSearchIndex["docs"].map((x, key) => { + x["id"] = key; // minisearch requires a unique for each object + return x; +}); + +// list below is the lunr 2.1.3 list minus the intersect with names(Base) +// (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) +// ideally we'd just filter the original list but it's not available as a variable +const stopWords = new Set([ + "a", + "able", + "about", + "across", + "after", + "almost", + "also", + "am", + "among", + "an", + "and", + "are", + "as", + "at", + "be", + "because", + "been", + "but", + "by", + "can", + "cannot", + "could", + "dear", + "did", + "does", + "either", + "ever", + "every", + "from", + "got", + "had", + "has", + "have", + "he", + "her", + "hers", + "him", + "his", + "how", + "however", + "i", + "if", + "into", + "it", + "its", + "just", + "least", + "like", + "likely", + "may", + "me", + "might", + "most", + "must", + "my", + "neither", + "no", + "nor", + "not", + "of", + "off", + "often", + "on", + "or", + "other", + "our", + "own", + "rather", + "said", + "say", + "says", + "she", + "should", + "since", + "so", + "some", + "than", + "that", + "the", + "their", + "them", + "then", + "there", + "these", + "they", + "this", + "tis", + "to", + "too", + "twas", + "us", + "wants", + "was", + "we", + "were", + "what", + "when", + "who", + "whom", + "why", + "will", + "would", + "yet", + "you", + "your", +]); + +let index = new minisearch({ + fields: ["title", "text"], // fields to index for full-text search + storeFields: ["location", "title", "text", "category", "page"], // fields to return with search results + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!", would not find anything if searching for "add!", only for the entire qualification + tokenize: (string) => string.split(/[\s\-\.]+/), + // options which will be applied during the search + searchOptions: { + boost: { title: 100 }, + fuzzy: 2, + processTerm: (term) => { + let word = stopWords.has(term) ? null : term; + if (word) { + word = word + .replace(/^[^a-zA-Z0-9@!]+/, "") + .replace(/[^a-zA-Z0-9@!]+$/, ""); + } + + return word ?? null; + }, + tokenize: (string) => string.split(/[\s\-\.]+/), + }, +}); + +index.addAll(data); + +let filters = [...new Set(data.map((x) => x.category))]; +var modal_filters = make_modal_body_filters(filters); +var filter_results = []; + +$(document).on("keyup", ".documenter-search-input", function (event) { + // Adding a debounce to prevent disruptions from super-speed typing! + debounce(() => update_search(filter_results), 300); +}); + +$(document).on("click", ".search-filter", function () { + if ($(this).hasClass("search-filter-selected")) { + $(this).removeClass("search-filter-selected"); + } else { + $(this).addClass("search-filter-selected"); + } + + // Adding a debounce to prevent disruptions from crazy clicking! + debounce(() => get_filters(), 300); +}); + +/** + * A debounce function, takes a function and an optional timeout in milliseconds + * + * @function callback + * @param {number} timeout + */ +function debounce(callback, timeout = 300) { + clearTimeout(timer); + timer = setTimeout(callback, timeout); +} + +/** + * Make/Update the search component + * + * @param {string[]} selected_filters + */ +function update_search(selected_filters = []) { + let initial_search_body = ` +

    Type something to get started!
    + `; + + let querystring = $(".documenter-search-input").val(); + + if (querystring.trim()) { + results = index.search(querystring, { + filter: (result) => { + // Filtering results + if (selected_filters.length === 0) { + return result.score >= 1; + } else { + return ( + result.score >= 1 && selected_filters.includes(result.category) + ); + } + }, + }); + + let search_result_container = ``; + let search_divider = `
    `; + + if (results.length) { + let links = []; + let count = 0; + let search_results = ""; + + results.forEach(function (result) { + if (result.location) { + // Checking for duplication of results for the same page + if (!links.includes(result.location)) { + search_results += make_search_result(result, querystring); + count++; + } + + links.push(result.location); + } + }); + + let result_count = `
    ${count} result(s)
    `; + + search_result_container = ` +
    + ${modal_filters} + ${search_divider} + ${result_count} +
    + ${search_results} +
    +
    + `; + } else { + search_result_container = ` +
    + ${modal_filters} + ${search_divider} +
    0 result(s)
    +
    +
    No result found!
    + `; + } + + if ($(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").removeClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(search_result_container); + } else { + filter_results = []; + modal_filters = make_modal_body_filters(filters, filter_results); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".search-modal-card-body").html(initial_search_body); + } +} + +/** + * Make the modal filter html + * + * @param {string[]} filters + * @param {string[]} selected_filters + * @returns string + */ +function make_modal_body_filters(filters, selected_filters = []) { + let str = ``; + + filters.forEach((val) => { + if (selected_filters.includes(val)) { + str += `${val}`; + } else { + str += `${val}`; + } + }); + + let filter_html = ` +
    + Filters: + ${str} +
    + `; + + return filter_html; +} + +/** + * Make the result component given a minisearch result data object and the value of the search input as queryString. + * To view the result object structure, refer: https://lucaong.github.io/minisearch/modules/_minisearch_.html#searchresult + * + * @param {object} result + * @param {string} querystring + * @returns string + */ +function make_search_result(result, querystring) { + let search_divider = `
    `; + let display_link = + result.location.slice(Math.max(0), Math.min(50, result.location.length)) + + (result.location.length > 30 ? "..." : ""); // To cut-off the link because it messes with the overflow of the whole div + + if (result.page !== "") { + display_link += ` (${result.page})`; + } + + let textindex = new RegExp(`\\b${querystring}\\b`, "i").exec(result.text); + let text = + textindex !== null + ? result.text.slice( + Math.max(textindex.index - 100, 0), + Math.min( + textindex.index + querystring.length + 100, + result.text.length + ) + ) + : ""; // cut-off text before and after from the match + + let display_result = text.length + ? "..." + + text.replace( + new RegExp(`\\b${querystring}\\b`, "i"), // For first occurrence + '$&' + ) + + "..." + : ""; // highlights the match + + let in_code = false; + if (!["page", "section"].includes(result.category.toLowerCase())) { + in_code = true; + } + + // We encode the full url to escape some special characters which can lead to broken links + let result_div = ` + +
    +
    ${result.title}
    +
    ${result.category}
    +
    +

    + ${display_result} +

    +
    + ${display_link} +
    +
    + ${search_divider} + `; + + return result_div; +} + +/** + * Get selected filters, remake the filter html and lastly update the search modal + */ +function get_filters() { + let ele = $(".search-filters .search-filter-selected").get(); + filter_results = ele.map((x) => $(x).text().toLowerCase()); + modal_filters = make_modal_body_filters(filters, filter_results); + update_search(filter_results); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function () { + var settings = $("#documenter-settings"); + $("#documenter-settings-button").click(function () { + settings.toggleClass("is-active"); + }); + // Close the dialog if X is clicked + $("#documenter-settings button.delete").click(function () { + settings.removeClass("is-active"); + }); + // Close dialog if ESC is pressed + $(document).keyup(function (e) { + if (e.keyCode == 27) settings.removeClass("is-active"); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +let search_modal_header = ` + +`; + +let initial_search_body = ` +
    Type something to get started!
    +`; + +let search_modal_footer = ` +
    + + Ctrl + + / to search + + esc to close +
    +`; + +$(document.body).append( + ` + + ` +); + +document.querySelector(".docs-search-query").addEventListener("click", () => { + openModal(); +}); + +document.querySelector(".close-search-modal").addEventListener("click", () => { + closeModal(); +}); + +$(document).on("click", ".search-result-link", function () { + closeModal(); +}); + +document.addEventListener("keydown", (event) => { + if ((event.ctrlKey || event.metaKey) && event.key === "/") { + openModal(); + } else if (event.key === "Escape") { + closeModal(); + } + + return false; +}); + +// Functions to open and close a modal +function openModal() { + let searchModal = document.querySelector("#search-modal"); + + searchModal.classList.add("is-active"); + document.querySelector(".documenter-search-input").focus(); +} + +function closeModal() { + let searchModal = document.querySelector("#search-modal"); + let initial_search_body = ` +
    Type something to get started!
    + `; + + searchModal.classList.remove("is-active"); + document.querySelector(".documenter-search-input").blur(); + + if (!$(".search-modal-card-body").hasClass("is-justify-content-center")) { + $(".search-modal-card-body").addClass("is-justify-content-center"); + } + + $(".documenter-search-input").val(""); + $(".search-modal-card-body").html(initial_search_body); +} + +document + .querySelector("#search-modal .modal-background") + .addEventListener("click", () => { + closeModal(); + }); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function () { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button"); + sidebar_button.click(function (ev) { + ev.preventDefault(); + sidebar.toggleClass("visible"); + if (sidebar.hasClass("visible")) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind("click", function (ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass("visible")) { + sidebar.removeClass("visible"); + } + }); +}); + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function () { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css("max-width"), 10); + var L0 = e.width(); + if (L0 > L) { + var h0 = parseInt(e.css("font-size"), 10); + e.css("font-size", (L * h0) / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on("orientationchange", resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function () { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if (typeof active !== "undefined") { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Theme picker setup +$(document).ready(function () { + // onchange callback + $("#documenter-themepicker").change(function themepick_callback(ev) { + var themename = $("#documenter-themepicker option:selected").attr("value"); + if (themename === "auto") { + // set_theme(window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'); + window.localStorage.removeItem("documenter-theme"); + } else { + // set_theme(themename); + window.localStorage.setItem("documenter-theme", themename); + } + // We re-use the global function from themeswap.js to actually do the swapping. + set_theme_from_local_storage(); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if (typeof window.localStorage !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if (theme !== null) { + $("#documenter-themepicker option").each(function (i, e) { + e.selected = e.value === theme; + }); + } + } +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function () { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if ( + typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === "boolean" && + DOCUMENTER_VERSION_SELECTOR_DISABLED + ) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function (x) { + target_href = version_selector_select + .children("option:selected") + .get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if ( + typeof DOCUMENTER_CURRENT_VERSION !== "undefined" && + $("#version-selector > option").length == 0 + ) { + var option = $( + "" + ); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== "undefined") { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function (i, x) { + return x.text; + }); + DOC_VERSIONS.forEach(function (each) { + var version_url = documenterBaseURL + "/../" + each + "/"; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $( + "" + ); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}); + +}) diff --git a/v0.6.17/assets/favicon.ico b/v0.6.17/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..5d573d7ac72ecf2e8ed39a4911ebd304ac6b9157 GIT binary patch literal 4286 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,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .pagination:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-primary-light{color:#f1f5f9 !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#cddbe9 !important}.has-background-primary-light{background-color:#f1f5f9 !important}.has-text-primary-dark{color:#4d7eb2 !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#7198c1 !important}.has-background-primary-dark{background-color:#4d7eb2 !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-link-light{color:#edfdf9 !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c0f6ec !important}.has-background-link-light{background-color:#edfdf9 !important}.has-text-link-dark{color:#15987e !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#1bc5a4 !important}.has-background-link-dark{background-color:#15987e !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-info-light{color:#ebf7ff !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#b9e2fe !important}.has-background-info-light{background-color:#ebf7ff !important}.has-text-info-dark{color:#0e9dfb !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#40b1fc !important}.has-background-info-dark{background-color:#0e9dfb !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-success-light{color:#ebfff3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#b8ffd6 !important}.has-background-success-light{background-color:#ebfff3 !important}.has-text-success-dark{color:#00eb64 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#1fff7e !important}.has-background-success-dark{background-color:#00eb64 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-warning-light{color:#fffaeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#ffedb8 !important}.has-background-warning-light{background-color:#fffaeb !important}.has-text-warning-dark{color:#d19c00 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#ffbf05 !important}.has-background-warning-dark{background-color:#d19c00 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-danger-light{color:#fdeeec !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#fac3bd !important}.has-background-danger-light{background-color:#fdeeec !important}.has-text-danger-dark{color:#ec311d !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#f05c4c !important}.has-background-danger-dark{background-color:#ec311d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark optgroup,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:inherit}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#1abc9c;text-decoration:none}html.theme--documenter-dark .button.is-ghost:hover,html.theme--documenter-dark .button.is-ghost.is-hovered{color:#1abc9c;text-decoration:underline}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:#ecf0f1;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:#282f2f;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:hover,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-light.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e8eef5;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-primary.is-light:active,html.theme--documenter-dark .docstring>section>a.button.is-light.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-light.is-active,html.theme--documenter-dark .docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#dfe8f1;border-color:transparent;color:#4d7eb2}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:#1abc9c;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:hover,html.theme--documenter-dark .button.is-link.is-light.is-hovered{background-color:#e2fbf6;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-link.is-light:active,html.theme--documenter-dark .button.is-link.is-light.is-active{background-color:#d7f9f3;border-color:transparent;color:#15987e}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:#024c7d;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:hover,html.theme--documenter-dark .button.is-info.is-light.is-hovered{background-color:#def2fe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-info.is-light:active,html.theme--documenter-dark .button.is-info.is-light.is-active{background-color:#d2edfe;border-color:transparent;color:#0e9dfb}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:#008438;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:hover,html.theme--documenter-dark .button.is-success.is-light.is-hovered{background-color:#deffec;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-success.is-light:active,html.theme--documenter-dark .button.is-success.is-light.is-active{background-color:#d1ffe5;border-color:transparent;color:#00eb64}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:#ad8100;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:hover,html.theme--documenter-dark .button.is-warning.is-light.is-hovered{background-color:#fff7de;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-warning.is-light:active,html.theme--documenter-dark .button.is-warning.is-light.is-active{background-color:#fff3d1;border-color:transparent;color:#d19c00}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:hover,html.theme--documenter-dark .button.is-danger.is-light.is-hovered{background-color:#fce3e0;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-danger.is-light:active,html.theme--documenter-dark .button.is-danger.is-light.is-active{background-color:#fcd8d5;border-color:transparent;color:#ec311d}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}html.theme--documenter-dark .button.is-small:not(.is-rounded),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:3px}html.theme--documenter-dark .button.is-normal{font-size:1rem}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#5e6d6f;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:3px}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .button.is-responsive.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}html.theme--documenter-dark .button.is-responsive,html.theme--documenter-dark .button.is-responsive.is-normal{font-size:.75rem}html.theme--documenter-dark .button.is-responsive.is-medium{font-size:1rem}html.theme--documenter-dark .button.is-responsive.is-large{font-size:1.25rem}}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}html.theme--documenter-dark .container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:inherit}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}html.theme--documenter-dark .content.is-normal{font-size:1rem}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}html.theme--documenter-dark .icon-text .icon{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .icon-text .icon:not(:last-child){margin-right:.25em}html.theme--documenter-dark .icon-text .icon:not(:first-child){margin-left:.25em}html.theme--documenter-dark div.icon-text{display:flex}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}html.theme--documenter-dark .image.is-fullwidth,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{right:.5rem;position:absolute;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#fff}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-primary.is-light,html.theme--documenter-dark .docstring>section>a.notification.is-light.docs-sourcelink{background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-link.is-light{background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-info.is-light{background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-success.is-light{background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-warning.is-light{background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .notification.is-danger.is-light{background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#343c3d}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #343c3d 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #343c3d 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#343c3d;background-image:linear-gradient(to right, #fff 30%, #343c3d 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-ms-fill{animation-name:none}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#fff}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table td.is-vcentered,html.theme--documenter-dark .table th.is-vcentered{vertical-align:middle}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#fff}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-primary.is-light:not(body),html.theme--documenter-dark .content kbd.is-primary.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f1f5f9;color:#4d7eb2}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-link.is-light:not(body),html.theme--documenter-dark .content kbd.is-link.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#edfdf9;color:#15987e}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-info.is-light:not(body),html.theme--documenter-dark .content kbd.is-info.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ebf7ff;color:#0e9dfb}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-success.is-light:not(body),html.theme--documenter-dark .content kbd.is-success.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#ebfff3;color:#00eb64}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-warning.is-light:not(body),html.theme--documenter-dark .content kbd.is-warning.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffaeb;color:#d19c00}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-danger.is-light:not(body),html.theme--documenter-dark .content kbd.is-danger.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#fdeeec;color:#ec311d}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:1rem}html.theme--documenter-dark .title.is-7{font-size:.75rem}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:1rem}html.theme--documenter-dark .subtitle.is-7{font-size:.75rem}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#868c98}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#868c98}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:40em;min-height:8em}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox,html.theme--documenter-dark .radio input[disabled],html.theme--documenter-dark .checkbox input[disabled]{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.5em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.75rem}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff !important;opacity:0.5}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#fff}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}html.theme--documenter-dark .file.is-normal{font-size:1rem}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#232829;color:#f2f2f2}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#282f2f;color:#fff}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#f2f2f2;display:block;font-size:1rem;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.75rem;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#282f2f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.75rem}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#5e6d6f;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.5em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.5em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:1rem;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;border-radius:.25rem;box-shadow:#171717;color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-footer:first-child,html.theme--documenter-dark .card-content:first-child,html.theme--documenter-dark .card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-footer:last-child,html.theme--documenter-dark .card-content:last-child,html.theme--documenter-dark .card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}html.theme--documenter-dark .card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #ededed}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:#171717;padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:inherit}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:.5rem}html.theme--documenter-dark .media .media .media{padding-top:.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:1rem}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#fff}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f1f5f9}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#4d7eb2}html.theme--documenter-dark .message.is-link{background-color:#edfdf9}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#15987e}html.theme--documenter-dark .message.is-info{background-color:#ebf7ff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#0e9dfb}html.theme--documenter-dark .message.is-success{background-color:#ebfff3}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#00eb64}html.theme--documenter-dark .message.is-warning{background-color:#fffaeb}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#d19c00}html.theme--documenter-dark .message.is-danger{background-color:#fdeeec}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#ec311d}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#fff}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#fff}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:1rem;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.5em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-previous.is-disabled,html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-next.is-disabled,html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-link.is-disabled{background-color:#5e6d6f;border-color:#5e6d6f;box-shadow:none;color:#fff;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}html.theme--documenter-dark .pagination-list li{list-style:none}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between;margin-bottom:0;margin-top:0}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{border-radius:8px;box-shadow:#171717;font-size:1rem}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}html.theme--documenter-dark .panel.is-white .panel-block.is-active .panel-icon{color:#fff}html.theme--documenter-dark .panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}html.theme--documenter-dark .panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}html.theme--documenter-dark .panel.is-light .panel-heading{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .panel.is-light .panel-tabs a.is-active{border-bottom-color:#ecf0f1}html.theme--documenter-dark .panel.is-light .panel-block.is-active .panel-icon{color:#ecf0f1}html.theme--documenter-dark .panel.is-dark .panel-heading,html.theme--documenter-dark .content kbd.panel .panel-heading{background-color:#282f2f;color:#fff}html.theme--documenter-dark .panel.is-dark .panel-tabs a.is-active,html.theme--documenter-dark .content kbd.panel .panel-tabs a.is-active{border-bottom-color:#282f2f}html.theme--documenter-dark .panel.is-dark .panel-block.is-active .panel-icon,html.theme--documenter-dark .content kbd.panel .panel-block.is-active .panel-icon{color:#282f2f}html.theme--documenter-dark .panel.is-primary .panel-heading,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#375a7f;color:#fff}html.theme--documenter-dark .panel.is-primary .panel-tabs a.is-active,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#375a7f}html.theme--documenter-dark .panel.is-primary .panel-block.is-active .panel-icon,html.theme--documenter-dark .docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#375a7f}html.theme--documenter-dark .panel.is-link .panel-heading{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .panel.is-link .panel-tabs a.is-active{border-bottom-color:#1abc9c}html.theme--documenter-dark .panel.is-link .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel.is-info .panel-heading{background-color:#024c7d;color:#fff}html.theme--documenter-dark .panel.is-info .panel-tabs a.is-active{border-bottom-color:#024c7d}html.theme--documenter-dark .panel.is-info .panel-block.is-active .panel-icon{color:#024c7d}html.theme--documenter-dark .panel.is-success .panel-heading{background-color:#008438;color:#fff}html.theme--documenter-dark .panel.is-success .panel-tabs a.is-active{border-bottom-color:#008438}html.theme--documenter-dark .panel.is-success .panel-block.is-active .panel-icon{color:#008438}html.theme--documenter-dark .panel.is-warning .panel-heading{background-color:#ad8100;color:#fff}html.theme--documenter-dark .panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ad8100}html.theme--documenter-dark .panel.is-warning .panel-block.is-active .panel-icon{color:#ad8100}html.theme--documenter-dark .panel.is-danger .panel-heading{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .panel.is-danger .panel-tabs a.is-active{border-bottom-color:#9e1b0d}html.theme--documenter-dark .panel.is-danger .panel-block.is-active .panel-icon{color:#9e1b0d}html.theme--documenter-dark .panel-tabs:not(:last-child),html.theme--documenter-dark .panel-block:not(:last-child){border-bottom:1px solid #ededed}html.theme--documenter-dark .panel-heading{background-color:#343c3d;border-radius:8px 8px 0 0;color:#f2f2f2;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark .panel-block:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-top-left-radius:.4em;border-bottom-left-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-top-right-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none;width:unset}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none;width:unset}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none;width:unset}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none;width:unset}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none;width:unset}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none;width:unset}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none;width:unset}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.33333337%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.33333337%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.66666674%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.66666674%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.33333337%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.33333337%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.66666674%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.66666674%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.33333337%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.33333337%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.66666674%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.66666674%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.33333337%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.33333337%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.66666674%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.66666674%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.33333337%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.66666674%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.33333337%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.66666674%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.33333337%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.66666674%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.33333337%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.66666674%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(0,0,0,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{color:#ecf0f1 !important;opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#fff}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#fff}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#fff}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{color:#282f2f !important;opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#375a7f !important;opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{color:#1abc9c !important;opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{color:#024c7d !important;opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{color:#008438 !important;opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{color:#ad8100 !important;opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{color:#9e1b0d !important;opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding:18rem 6rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-body{padding:3rem 3rem}}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section{padding:3rem 3rem}html.theme--documenter-dark .section.is-medium{padding:9rem 4.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 6rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:rgba(0,0,0,0.7);text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:1rem}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark details.admonition.is-details>.admonition-header{list-style:none}html.theme--documenter-dark details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}html.theme--documenter-dark details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}html.theme--documenter-dark #documenter .docs-sidebar #documenter-search-query{color:#868c98;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(245,245,245,0.6);box-shadow:0 2px 0 1px rgba(245,245,245,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}html.theme--documenter-dark .search-min-width-50{min-width:50%}html.theme--documenter-dark .search-min-height-100{min-height:100%}html.theme--documenter-dark .search-modal-card-body{max-height:calc(100vh - 15rem)}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333;background-color:#f1f5f9}html.theme--documenter-dark .search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}html.theme--documenter-dark .search-filter:hover,html.theme--documenter-dark .search-filter:focus{color:#333}html.theme--documenter-dark .search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}html.theme--documenter-dark .search-filter-selected:hover,html.theme--documenter-dark .search-filter-selected:focus{color:#f5f5f5}html.theme--documenter-dark .search-result-highlight{background-color:#ffdd57;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .search-result-title{width:85%;color:#f5f5f5}html.theme--documenter-dark .search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-thumb,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}html.theme--documenter-dark #search-modal .modal-card-body::-webkit-scrollbar-track,html.theme--documenter-dark #search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem}html.theme--documenter-dark .gap-8{gap:2rem}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2}html.theme--documenter-dark .search-result-link{border-radius:0.7em;transition:all 300ms}html.theme--documenter-dark .search-result-link:hover,html.theme--documenter-dark .search-result-link:focus{background-color:rgba(0,128,128,0.1)}html.theme--documenter-dark .search-result-link .property-search-result-badge,html.theme--documenter-dark .search-result-link .search-filter{transition:all 300ms}html.theme--documenter-dark .search-result-link:hover .property-search-result-badge,html.theme--documenter-dark .search-result-link:hover .search-filter,html.theme--documenter-dark .search-result-link:focus .property-search-result-badge,html.theme--documenter-dark .search-result-link:focus .search-filter{color:#333 !important;background-color:#f1f5f9 !important}html.theme--documenter-dark .property-search-result-badge,html.theme--documenter-dark .search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:whitesmoke;background-color:#33415580;border-radius:0.6rem}html.theme--documenter-dark .search-result-title{color:whitesmoke}html.theme--documenter-dark .search-result-highlight{background-color:greenyellow;color:black}html.theme--documenter-dark .search-divider{border-bottom:1px solid #5e6d6f50}html.theme--documenter-dark .w-100{width:100%}html.theme--documenter-dark .gap-2{gap:0.5rem}html.theme--documenter-dark .gap-4{gap:1rem} diff --git a/v0.6.17/assets/themes/documenter-light.css b/v0.6.17/assets/themes/documenter-light.css new file mode 100644 index 0000000000..1262ec5063 --- /dev/null +++ b/v0.6.17/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.5em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.5em - 1px);padding-left:calc(0.75em - 1px);padding-right:calc(0.75em - 1px);padding-top:calc(0.5em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.pagination:not(:last-child),.message:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:9999px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:9999px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.navbar-burger{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-primary-light{color:#eef8fc !important}a.has-text-primary-light:hover,a.has-text-primary-light:focus{color:#c3e6f4 !important}.has-background-primary-light{background-color:#eef8fc !important}.has-text-primary-dark{color:#1a6d8e !important}a.has-text-primary-dark:hover,a.has-text-primary-dark:focus{color:#228eb9 !important}.has-background-primary-dark{background-color:#1a6d8e !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-link-light{color:#eff3fb !important}a.has-text-link-light:hover,a.has-text-link-light:focus{color:#c6d6f1 !important}.has-background-link-light{background-color:#eff3fb !important}.has-text-link-dark{color:#3169c4 !important}a.has-text-link-dark:hover,a.has-text-link-dark:focus{color:#5485d4 !important}.has-background-link-dark{background-color:#3169c4 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-info-light{color:#ecf7fe !important}a.has-text-info-light:hover,a.has-text-info-light:focus{color:#bde2fa !important}.has-background-info-light{background-color:#ecf7fe !important}.has-text-info-dark{color:#0e72b4 !important}a.has-text-info-dark:hover,a.has-text-info-dark:focus{color:#1190e3 !important}.has-background-info-dark{background-color:#0e72b4 !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-success-light{color:#eefcf3 !important}a.has-text-success-light:hover,a.has-text-success-light:focus{color:#c2f4d4 !important}.has-background-success-light{background-color:#eefcf3 !important}.has-text-success-dark{color:#198f43 !important}a.has-text-success-dark:hover,a.has-text-success-dark:focus{color:#21bb57 !important}.has-background-success-dark{background-color:#198f43 !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-warning-light{color:#fffbeb !important}a.has-text-warning-light:hover,a.has-text-warning-light:focus{color:#fff1b8 !important}.has-background-warning-light{background-color:#fffbeb !important}.has-text-warning-dark{color:#947600 !important}a.has-text-warning-dark:hover,a.has-text-warning-dark:focus{color:#c79f00 !important}.has-background-warning-dark{background-color:#947600 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-danger-light{color:#ffeceb !important}a.has-text-danger-light:hover,a.has-text-danger-light:focus{color:#ffbbb8 !important}.has-background-danger-light{background-color:#ffeceb !important}.has-text-danger-dark{color:#f50c00 !important}a.has-text-danger-dark:hover,a.has-text-danger-dark:focus{color:#ff3429 !important}.has-background-danger-dark{background-color:#f50c00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.is-flex-direction-row{flex-direction:row !important}.is-flex-direction-row-reverse{flex-direction:row-reverse !important}.is-flex-direction-column{flex-direction:column !important}.is-flex-direction-column-reverse{flex-direction:column-reverse !important}.is-flex-wrap-nowrap{flex-wrap:nowrap !important}.is-flex-wrap-wrap{flex-wrap:wrap !important}.is-flex-wrap-wrap-reverse{flex-wrap:wrap-reverse !important}.is-justify-content-flex-start{justify-content:flex-start !important}.is-justify-content-flex-end{justify-content:flex-end !important}.is-justify-content-center{justify-content:center !important}.is-justify-content-space-between{justify-content:space-between !important}.is-justify-content-space-around{justify-content:space-around !important}.is-justify-content-space-evenly{justify-content:space-evenly !important}.is-justify-content-start{justify-content:start !important}.is-justify-content-end{justify-content:end !important}.is-justify-content-left{justify-content:left !important}.is-justify-content-right{justify-content:right !important}.is-align-content-flex-start{align-content:flex-start !important}.is-align-content-flex-end{align-content:flex-end !important}.is-align-content-center{align-content:center !important}.is-align-content-space-between{align-content:space-between !important}.is-align-content-space-around{align-content:space-around !important}.is-align-content-space-evenly{align-content:space-evenly !important}.is-align-content-stretch{align-content:stretch !important}.is-align-content-start{align-content:start !important}.is-align-content-end{align-content:end !important}.is-align-content-baseline{align-content:baseline !important}.is-align-items-stretch{align-items:stretch !important}.is-align-items-flex-start{align-items:flex-start !important}.is-align-items-flex-end{align-items:flex-end !important}.is-align-items-center{align-items:center !important}.is-align-items-baseline{align-items:baseline !important}.is-align-items-start{align-items:start !important}.is-align-items-end{align-items:end !important}.is-align-items-self-start{align-items:self-start !important}.is-align-items-self-end{align-items:self-end !important}.is-align-self-auto{align-self:auto !important}.is-align-self-flex-start{align-self:flex-start !important}.is-align-self-flex-end{align-self:flex-end !important}.is-align-self-center{align-self:center !important}.is-align-self-baseline{align-self:baseline !important}.is-align-self-stretch{align-self:stretch !important}.is-flex-grow-0{flex-grow:0 !important}.is-flex-grow-1{flex-grow:1 !important}.is-flex-grow-2{flex-grow:2 !important}.is-flex-grow-3{flex-grow:3 !important}.is-flex-grow-4{flex-grow:4 !important}.is-flex-grow-5{flex-grow:5 !important}.is-flex-shrink-0{flex-shrink:0 !important}.is-flex-shrink-1{flex-shrink:1 !important}.is-flex-shrink-2{flex-shrink:2 !important}.is-flex-shrink-3{flex-shrink:3 !important}.is-flex-shrink-4{flex-shrink:4 !important}.is-flex-shrink-5{flex-shrink:5 !important}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-clickable{cursor:pointer !important;pointer-events:all !important}.is-clipped{overflow:hidden !important}.is-relative{position:relative !important}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:.25rem !important}.mt-1{margin-top:.25rem !important}.mr-1{margin-right:.25rem !important}.mb-1{margin-bottom:.25rem !important}.ml-1{margin-left:.25rem !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.m-2{margin:.5rem !important}.mt-2{margin-top:.5rem !important}.mr-2{margin-right:.5rem !important}.mb-2{margin-bottom:.5rem !important}.ml-2{margin-left:.5rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.m-3{margin:.75rem !important}.mt-3{margin-top:.75rem !important}.mr-3{margin-right:.75rem !important}.mb-3{margin-bottom:.75rem !important}.ml-3{margin-left:.75rem !important}.mx-3{margin-left:.75rem !important;margin-right:.75rem !important}.my-3{margin-top:.75rem !important;margin-bottom:.75rem !important}.m-4{margin:1rem !important}.mt-4{margin-top:1rem !important}.mr-4{margin-right:1rem !important}.mb-4{margin-bottom:1rem !important}.ml-4{margin-left:1rem !important}.mx-4{margin-left:1rem !important;margin-right:1rem !important}.my-4{margin-top:1rem !important;margin-bottom:1rem !important}.m-5{margin:1.5rem !important}.mt-5{margin-top:1.5rem !important}.mr-5{margin-right:1.5rem !important}.mb-5{margin-bottom:1.5rem !important}.ml-5{margin-left:1.5rem !important}.mx-5{margin-left:1.5rem !important;margin-right:1.5rem !important}.my-5{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.m-6{margin:3rem !important}.mt-6{margin-top:3rem !important}.mr-6{margin-right:3rem !important}.mb-6{margin-bottom:3rem !important}.ml-6{margin-left:3rem !important}.mx-6{margin-left:3rem !important;margin-right:3rem !important}.my-6{margin-top:3rem !important;margin-bottom:3rem !important}.m-auto{margin:auto !important}.mt-auto{margin-top:auto !important}.mr-auto{margin-right:auto !important}.mb-auto{margin-bottom:auto !important}.ml-auto{margin-left:auto !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-left:0 !important;padding-right:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:.25rem !important}.pt-1{padding-top:.25rem !important}.pr-1{padding-right:.25rem !important}.pb-1{padding-bottom:.25rem !important}.pl-1{padding-left:.25rem !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.p-2{padding:.5rem !important}.pt-2{padding-top:.5rem !important}.pr-2{padding-right:.5rem !important}.pb-2{padding-bottom:.5rem !important}.pl-2{padding-left:.5rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.p-3{padding:.75rem !important}.pt-3{padding-top:.75rem !important}.pr-3{padding-right:.75rem !important}.pb-3{padding-bottom:.75rem !important}.pl-3{padding-left:.75rem !important}.px-3{padding-left:.75rem !important;padding-right:.75rem !important}.py-3{padding-top:.75rem !important;padding-bottom:.75rem !important}.p-4{padding:1rem !important}.pt-4{padding-top:1rem !important}.pr-4{padding-right:1rem !important}.pb-4{padding-bottom:1rem !important}.pl-4{padding-left:1rem !important}.px-4{padding-left:1rem !important;padding-right:1rem !important}.py-4{padding-top:1rem !important;padding-bottom:1rem !important}.p-5{padding:1.5rem !important}.pt-5{padding-top:1.5rem !important}.pr-5{padding-right:1.5rem !important}.pb-5{padding-bottom:1.5rem !important}.pl-5{padding-left:1.5rem !important}.px-5{padding-left:1.5rem !important;padding-right:1.5rem !important}.py-5{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.p-6{padding:3rem !important}.pt-6{padding-top:3rem !important}.pr-6{padding-right:3rem !important}.pb-6{padding-bottom:3rem !important}.pl-6{padding-left:3rem !important}.px-6{padding-left:3rem !important;padding-right:3rem !important}.py-6{padding-top:3rem !important;padding-bottom:3rem !important}.p-auto{padding:auto !important}.pt-auto{padding-top:auto !important}.pr-auto{padding-right:auto !important}.pb-auto{padding-bottom:auto !important}.pl-auto{padding-left:auto !important}.px-auto{padding-left:auto !important;padding-right:auto !important}.py-auto{padding-top:auto !important;padding-bottom:auto !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.is-underlined{text-decoration:underline !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}/*! minireset.css v0.0.6 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,video{height:auto;max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:inherit}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,optgroup,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:inherit}table th{color:#222}@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.box{background-color:#fff;border-radius:6px;box-shadow:#bbb;color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 0.5em 1em -0.125em rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#222;cursor:pointer;justify-content:center;padding-bottom:calc(0.5em - 1px);padding-left:1em;padding-right:1em;padding-top:calc(0.5em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.5em - 1px);margin-right:.25em}.button .icon:last-child:not(:first-child){margin-left:.25em;margin-right:calc(-0.5em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.5em - 1px);margin-right:calc(-0.5em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-ghost{background:none;border-color:rgba(0,0,0,0);color:#2e63b8;text-decoration:none}.button.is-ghost:hover,.button.is-ghost.is-hovered{color:#2e63b8;text-decoration:underline}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:#fff;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:#0a0a0a;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none}.button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#fff}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#fff}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#fff}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#fff}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:#363636;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#fff;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#fff}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#fff;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-primary.is-light,.docstring>section>a.button.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.button.is-primary.is-light:hover,.docstring>section>a.button.is-light.docs-sourcelink:hover,.button.is-primary.is-light.is-hovered,.docstring>section>a.button.is-light.is-hovered.docs-sourcelink{background-color:#e3f3fa;border-color:transparent;color:#1a6d8e}.button.is-primary.is-light:active,.docstring>section>a.button.is-light.docs-sourcelink:active,.button.is-primary.is-light.is-active,.docstring>section>a.button.is-light.is-active.docs-sourcelink{background-color:#d8eff8;border-color:transparent;color:#1a6d8e}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:#2e63b8;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link.is-light{background-color:#eff3fb;color:#3169c4}.button.is-link.is-light:hover,.button.is-link.is-light.is-hovered{background-color:#e4ecf8;border-color:transparent;color:#3169c4}.button.is-link.is-light:active,.button.is-link.is-light.is-active{background-color:#dae5f6;border-color:transparent;color:#3169c4}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:#209cee;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.button.is-info.is-light:hover,.button.is-info.is-light.is-hovered{background-color:#e0f1fd;border-color:transparent;color:#0e72b4}.button.is-info.is-light:active,.button.is-info.is-light.is-active{background-color:#d4ecfc;border-color:transparent;color:#0e72b4}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:#22c35b;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success.is-light{background-color:#eefcf3;color:#198f43}.button.is-success.is-light:hover,.button.is-success.is-light.is-hovered{background-color:#e3faeb;border-color:transparent;color:#198f43}.button.is-success.is-light:active,.button.is-success.is-light.is-active{background-color:#d8f8e3;border-color:transparent;color:#198f43}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:#ffdd57;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-warning.is-light{background-color:#fffbeb;color:#947600}.button.is-warning.is-light:hover,.button.is-warning.is-light.is-hovered{background-color:#fff8de;border-color:transparent;color:#947600}.button.is-warning.is-light:active,.button.is-warning.is-light.is-active{background-color:#fff6d1;border-color:transparent;color:#947600}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:#da0b00;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.button.is-danger.is-light:hover,.button.is-danger.is-light.is-hovered{background-color:#ffe0de;border-color:transparent;color:#f50c00}.button.is-danger.is-light:active,.button.is-danger.is-light.is-active{background-color:#ffd3d1;border-color:transparent;color:#f50c00}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{font-size:.75rem}.button.is-small:not(.is-rounded),#documenter .docs-sidebar form.docs-search>input.button:not(.is-rounded){border-radius:2px}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em * 0.5));top:calc(50% - (1em * 0.5));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:9999px;padding-left:calc(1em + 0.25em);padding-right:calc(1em + 0.25em)}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){font-size:.75rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large):not(.is-rounded){border-radius:2px}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}@media screen and (max-width: 768px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.5625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.65625rem}.button.is-responsive.is-medium{font-size:.75rem}.button.is-responsive.is-large{font-size:1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.button.is-responsive.is-small,#documenter .docs-sidebar form.docs-search>input.is-responsive{font-size:.65625rem}.button.is-responsive,.button.is-responsive.is-normal{font-size:.75rem}.button.is-responsive.is-medium{font-size:1rem}.button.is-responsive.is-large{font-size:1.25rem}}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}.container.is-fluid{max-width:none !important;padding-left:32px;padding-right:32px;width:100%}@media screen and (min-width: 1056px){.container{max-width:992px}}@media screen and (max-width: 1215px){.container.is-widescreen:not(.is-max-desktop){max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}@media screen and (min-width: 1216px){.container:not(.is-max-desktop){max-width:1152px}}@media screen and (min-width: 1408px){.container:not(.is-max-desktop):not(.is-max-widescreen){max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:inherit}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-normal{font-size:1rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.icon-text{align-items:flex-start;color:inherit;display:inline-flex;flex-wrap:wrap;line-height:1.5rem;vertical-align:top}.icon-text .icon{flex-grow:0;flex-shrink:0}.icon-text .icon:not(:last-child){margin-right:.25em}.icon-text .icon:not(:first-child){margin-left:.25em}div.icon-text{display:flex}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:9999px}.image.is-fullwidth,#documenter .docs-sidebar .docs-logo>img.is-fullwidth{width:100%}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;position:relative;padding:1.25rem 2.5rem 1.25rem 1.5rem}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{right:.5rem;position:absolute;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#fff}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-primary.is-light,.docstring>section>a.notification.is-light.docs-sourcelink{background-color:#eef8fc;color:#1a6d8e}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-link.is-light{background-color:#eff3fb;color:#3169c4}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-info.is-light{background-color:#ecf7fe;color:#0e72b4}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-success.is-light{background-color:#eefcf3;color:#198f43}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-warning.is-light{background-color:#fffbeb;color:#947600}.notification.is-danger{background-color:#da0b00;color:#fff}.notification.is-danger.is-light{background-color:#ffeceb;color:#f50c00}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:9999px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#ededed}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #ededed 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #ededed 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #ededed 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #ededed 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #ededed 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #ededed 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #ededed 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #ededed 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #ededed 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #ededed 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#ededed;background-image:linear-gradient(to right, #222 30%, #ededed 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress:indeterminate::-ms-fill{animation-name:none}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#222}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:rgba(0,0,0,0.7)}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#fff}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table td.is-vcentered,.table th.is-vcentered{vertical-align:middle}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:.25rem;margin-right:-.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#fff}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-primary.is-light:not(body),.content kbd.is-primary.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#eef8fc;color:#1a6d8e}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-link.is-light:not(body),.content kbd.is-link.is-light:not(body),.docstring>section>a.docs-sourcelink.is-link.is-light:not(body){background-color:#eff3fb;color:#3169c4}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-info.is-light:not(body),.content kbd.is-info.is-light:not(body),.docstring>section>a.docs-sourcelink.is-info.is-light:not(body){background-color:#ecf7fe;color:#0e72b4}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-success.is-light:not(body),.content kbd.is-success.is-light:not(body),.docstring>section>a.docs-sourcelink.is-success.is-light:not(body){background-color:#eefcf3;color:#198f43}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-warning.is-light:not(body),.content kbd.is-warning.is-light:not(body),.docstring>section>a.docs-sourcelink.is-warning.is-light:not(body){background-color:#fffbeb;color:#947600}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-danger.is-light:not(body),.content kbd.is-danger.is-light:not(body),.docstring>section>a.docs-sourcelink.is-danger.is-light:not(body){background-color:#ffeceb;color:#f50c00}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-.375em;margin-right:.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:.1875em;margin-right:-.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-.375em;margin-right:-.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:9999px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#222;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#222;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#222;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.number{align-items:center;background-color:#f5f5f5;border-radius:9999px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#222}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:#707070}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:#707070}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:#707070}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:#707070}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 0.0625em 0.125em rgba(10,10,10,0.05);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:9999px;padding-left:calc(calc(0.75em - 1px) + 0.375em);padding-right:calc(calc(0.75em - 1px) + 0.375em)}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:calc(0.75em - 1px);resize:vertical}.textarea:not([rows]){max-height:40em;min-height:8em}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#222}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox,.radio input[disabled],.checkbox input[disabled]{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.5em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:9999px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#222}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b !important;opacity:0.5}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:rgba(0,0,0,0.7)}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#fff}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#fff}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#fff}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#fff}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-normal{font-size:1rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#222}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#222}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#222}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:inherit;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#222;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:inherit}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#222}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.5em;pointer-events:none;position:absolute;top:0;width:2.5em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.5em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.5em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:.5em}.breadcrumb .icon:last-child{margin-left:.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;border-radius:.25rem;box-shadow:#bbb;color:#222;max-width:100%;position:relative}.card-footer:first-child,.card-content:first-child,.card-header:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-footer:last-child,.card-content:last-child,.card-header:last-child{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:0.75rem 1rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;color:currentColor;font-family:inherit;font-size:1em;margin:0;padding:0;align-items:center;cursor:pointer;display:flex;justify-content:center;padding:0.75rem 1rem}.card-image{display:block;position:relative}.card-image:first-child img{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-image:last-child img{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #ededed;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #ededed}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:#bbb;padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#222;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:inherit;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#ededed;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.media{align-items:flex-start;display:flex;text-align:inherit}.media .content:not(:last-child){margin-bottom:.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:.5rem}.media .media .media{padding-top:.5rem}.media .media .media+.media{margin-top:.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:inherit}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.message.is-light .message-body{border-color:#f5f5f5}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#fff}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#eef8fc}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1a6d8e}.message.is-link{background-color:#eff3fb}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#3169c4}.message.is-info{background-color:#ecf7fe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#0e72b4}.message.is-success{background-color:#eefcf3}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#198f43}.message.is-warning{background-color:#fffbeb}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#947600}.message.is-danger{background-color:#ffeceb}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#f50c00}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px){.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#fff}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#fff}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#fff}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#fff}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#fff}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#fff}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#222;-moz-appearance:none;-webkit-appearance:none;appearance:none;background:none;border:none;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#222;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:9999px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:9999px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#222;min-width:2.5em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-previous.is-disabled,.pagination-next[disabled],.pagination-next.is-disabled,.pagination-link[disabled],.pagination-link.is-disabled{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:.75em;padding-right:.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}.pagination-list li{list-style:none}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{margin-bottom:0;margin-top:0}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between;margin-bottom:0;margin-top:0}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{border-radius:6px;box-shadow:#bbb;font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel.is-white .panel-heading{background-color:#fff;color:#0a0a0a}.panel.is-white .panel-tabs a.is-active{border-bottom-color:#fff}.panel.is-white .panel-block.is-active .panel-icon{color:#fff}.panel.is-black .panel-heading{background-color:#0a0a0a;color:#fff}.panel.is-black .panel-tabs a.is-active{border-bottom-color:#0a0a0a}.panel.is-black .panel-block.is-active .panel-icon{color:#0a0a0a}.panel.is-light .panel-heading{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.panel.is-light .panel-tabs a.is-active{border-bottom-color:#f5f5f5}.panel.is-light .panel-block.is-active .panel-icon{color:#f5f5f5}.panel.is-dark .panel-heading,.content kbd.panel .panel-heading{background-color:#363636;color:#fff}.panel.is-dark .panel-tabs a.is-active,.content kbd.panel .panel-tabs a.is-active{border-bottom-color:#363636}.panel.is-dark .panel-block.is-active .panel-icon,.content kbd.panel .panel-block.is-active .panel-icon{color:#363636}.panel.is-primary .panel-heading,.docstring>section>a.panel.docs-sourcelink .panel-heading{background-color:#4eb5de;color:#fff}.panel.is-primary .panel-tabs a.is-active,.docstring>section>a.panel.docs-sourcelink .panel-tabs a.is-active{border-bottom-color:#4eb5de}.panel.is-primary .panel-block.is-active .panel-icon,.docstring>section>a.panel.docs-sourcelink .panel-block.is-active .panel-icon{color:#4eb5de}.panel.is-link .panel-heading{background-color:#2e63b8;color:#fff}.panel.is-link .panel-tabs a.is-active{border-bottom-color:#2e63b8}.panel.is-link .panel-block.is-active .panel-icon{color:#2e63b8}.panel.is-info .panel-heading{background-color:#209cee;color:#fff}.panel.is-info .panel-tabs a.is-active{border-bottom-color:#209cee}.panel.is-info .panel-block.is-active .panel-icon{color:#209cee}.panel.is-success .panel-heading{background-color:#22c35b;color:#fff}.panel.is-success .panel-tabs a.is-active{border-bottom-color:#22c35b}.panel.is-success .panel-block.is-active .panel-icon{color:#22c35b}.panel.is-warning .panel-heading{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.panel.is-warning .panel-tabs a.is-active{border-bottom-color:#ffdd57}.panel.is-warning .panel-block.is-active .panel-icon{color:#ffdd57}.panel.is-danger .panel-heading{background-color:#da0b00;color:#fff}.panel.is-danger .panel-tabs a.is-active{border-bottom-color:#da0b00}.panel.is-danger .panel-block.is-active .panel-icon{color:#da0b00}.panel-tabs:not(:last-child),.panel-block:not(:last-child){border-bottom:1px solid #ededed}.panel-heading{background-color:#ededed;border-radius:6px 6px 0 0;color:#222;font-size:1.25em;font-weight:700;line-height:1.25;padding:0.75em 1em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}.panel-block:last-child{border-bottom-left-radius:6px;border-bottom-right-radius:6px}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:.5em}.tabs .icon:last-child{margin-left:.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-top-left-radius:4px;border-bottom-left-radius:4px}.tabs.is-toggle li:last-child a{border-top-right-radius:4px;border-bottom-right-radius:4px}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:9999px;border-top-left-radius:9999px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:9999px;border-top-right-radius:9999px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none;width:unset}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.33333337%}.columns.is-mobile>.column.is-offset-1{margin-left:8.33333337%}.columns.is-mobile>.column.is-2{flex:none;width:16.66666674%}.columns.is-mobile>.column.is-offset-2{margin-left:16.66666674%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.33333337%}.columns.is-mobile>.column.is-offset-4{margin-left:33.33333337%}.columns.is-mobile>.column.is-5{flex:none;width:41.66666674%}.columns.is-mobile>.column.is-offset-5{margin-left:41.66666674%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.33333337%}.columns.is-mobile>.column.is-offset-7{margin-left:58.33333337%}.columns.is-mobile>.column.is-8{flex:none;width:66.66666674%}.columns.is-mobile>.column.is-offset-8{margin-left:66.66666674%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.33333337%}.columns.is-mobile>.column.is-offset-10{margin-left:83.33333337%}.columns.is-mobile>.column.is-11{flex:none;width:91.66666674%}.columns.is-mobile>.column.is-offset-11{margin-left:91.66666674%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none;width:unset}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.33333337%}.column.is-offset-1-mobile{margin-left:8.33333337%}.column.is-2-mobile{flex:none;width:16.66666674%}.column.is-offset-2-mobile{margin-left:16.66666674%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.33333337%}.column.is-offset-4-mobile{margin-left:33.33333337%}.column.is-5-mobile{flex:none;width:41.66666674%}.column.is-offset-5-mobile{margin-left:41.66666674%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.33333337%}.column.is-offset-7-mobile{margin-left:58.33333337%}.column.is-8-mobile{flex:none;width:66.66666674%}.column.is-offset-8-mobile{margin-left:66.66666674%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.33333337%}.column.is-offset-10-mobile{margin-left:83.33333337%}.column.is-11-mobile{flex:none;width:91.66666674%}.column.is-offset-11-mobile{margin-left:91.66666674%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none;width:unset}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.33333337%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.33333337%}.column.is-2,.column.is-2-tablet{flex:none;width:16.66666674%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.66666674%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.33333337%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.33333337%}.column.is-5,.column.is-5-tablet{flex:none;width:41.66666674%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.66666674%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.33333337%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.33333337%}.column.is-8,.column.is-8-tablet{flex:none;width:66.66666674%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.66666674%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.33333337%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.33333337%}.column.is-11,.column.is-11-tablet{flex:none;width:91.66666674%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.66666674%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none;width:unset}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.33333337%}.column.is-offset-1-touch{margin-left:8.33333337%}.column.is-2-touch{flex:none;width:16.66666674%}.column.is-offset-2-touch{margin-left:16.66666674%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.33333337%}.column.is-offset-4-touch{margin-left:33.33333337%}.column.is-5-touch{flex:none;width:41.66666674%}.column.is-offset-5-touch{margin-left:41.66666674%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.33333337%}.column.is-offset-7-touch{margin-left:58.33333337%}.column.is-8-touch{flex:none;width:66.66666674%}.column.is-offset-8-touch{margin-left:66.66666674%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.33333337%}.column.is-offset-10-touch{margin-left:83.33333337%}.column.is-11-touch{flex:none;width:91.66666674%}.column.is-offset-11-touch{margin-left:91.66666674%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none;width:unset}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.33333337%}.column.is-offset-1-desktop{margin-left:8.33333337%}.column.is-2-desktop{flex:none;width:16.66666674%}.column.is-offset-2-desktop{margin-left:16.66666674%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.33333337%}.column.is-offset-4-desktop{margin-left:33.33333337%}.column.is-5-desktop{flex:none;width:41.66666674%}.column.is-offset-5-desktop{margin-left:41.66666674%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.33333337%}.column.is-offset-7-desktop{margin-left:58.33333337%}.column.is-8-desktop{flex:none;width:66.66666674%}.column.is-offset-8-desktop{margin-left:66.66666674%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.33333337%}.column.is-offset-10-desktop{margin-left:83.33333337%}.column.is-11-desktop{flex:none;width:91.66666674%}.column.is-offset-11-desktop{margin-left:91.66666674%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none;width:unset}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.33333337%}.column.is-offset-1-widescreen{margin-left:8.33333337%}.column.is-2-widescreen{flex:none;width:16.66666674%}.column.is-offset-2-widescreen{margin-left:16.66666674%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.33333337%}.column.is-offset-4-widescreen{margin-left:33.33333337%}.column.is-5-widescreen{flex:none;width:41.66666674%}.column.is-offset-5-widescreen{margin-left:41.66666674%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.33333337%}.column.is-offset-7-widescreen{margin-left:58.33333337%}.column.is-8-widescreen{flex:none;width:66.66666674%}.column.is-offset-8-widescreen{margin-left:66.66666674%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.33333337%}.column.is-offset-10-widescreen{margin-left:83.33333337%}.column.is-11-widescreen{flex:none;width:91.66666674%}.column.is-offset-11-widescreen{margin-left:91.66666674%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none;width:unset}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.33333337%}.column.is-offset-1-fullhd{margin-left:8.33333337%}.column.is-2-fullhd{flex:none;width:16.66666674%}.column.is-offset-2-fullhd{margin-left:16.66666674%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.33333337%}.column.is-offset-4-fullhd{margin-left:33.33333337%}.column.is-5-fullhd{flex:none;width:41.66666674%}.column.is-offset-5-fullhd{margin-left:41.66666674%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.33333337%}.column.is-offset-7-fullhd{margin-left:58.33333337%}.column.is-8-fullhd{flex:none;width:66.66666674%}.column.is-offset-8-fullhd{margin-left:66.66666674%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.33333337%}.column.is-offset-10-fullhd{margin-left:83.33333337%}.column.is-11-fullhd{flex:none;width:91.66666674%}.column.is-offset-11-fullhd{margin-left:91.66666674%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable>.column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.33333337%}.tile.is-2{flex:none;width:16.66666674%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.33333337%}.tile.is-5{flex:none;width:41.66666674%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.33333337%}.tile.is-8{flex:none;width:66.66666674%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.33333337%}.tile.is-11{flex:none;width:91.66666674%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{color:#fff !important;opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{color:#0a0a0a !important;opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:rgba(0,0,0,0.7)}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:rgba(0,0,0,0.7)}.hero.is-light .subtitle{color:rgba(0,0,0,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:rgba(0,0,0,0.7)}.hero.is-light .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{color:#f5f5f5 !important;opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#fff}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#fff}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(255,255,255,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#fff}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#fff;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{color:#363636 !important;opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#fff}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{color:#4eb5de !important;opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{color:#2e63b8 !important;opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{color:#209cee !important;opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{color:#22c35b !important;opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{color:#ffdd57 !important;opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{color:#da0b00 !important;opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding:9rem 4.5rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding:18rem 6rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}@media screen and (min-width: 769px),print{.hero-body{padding:3rem 3rem}}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section{padding:3rem 3rem}.section.is-medium{padding:9rem 4.5rem}.section.is-large{padding:18rem 6rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 6 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}details.admonition.is-details>.admonition-header{list-style:none}details.admonition.is-details>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f055"}details.admonition.is-details[open]>.admonition-header:before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f056"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{cursor:pointer;display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 0.125em 0.25em rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-article-toggle-button{min-width:1.1rem;padding:0.2rem 0.2rem 0.2rem 0}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-sidebar-button{display:block;font-size:1.5rem;padding-bottom:0.1rem;margin-right:1rem}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap;gap:1rem;align-items:center}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar .docs-right .docs-navbar-link{margin-left:0.4rem;margin-right:0.4rem}}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 6 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}#documenter .docs-sidebar #documenter-search-query{color:#707070;width:14.4rem;box-shadow:inset 0 1px 2px rgba(10,10,10,0.1)}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}kbd.search-modal-key-hints{border-radius:0.25rem;border:1px solid rgba(0,0,0,0.6);box-shadow:0 2px 0 1px rgba(0,0,0,0.6);cursor:default;font-size:0.9rem;line-height:1.5;min-width:0.75rem;text-align:center;padding:0.1rem 0.3rem;position:relative;top:-1px}.search-min-width-50{min-width:50%}.search-min-height-100{min-height:100%}.search-modal-card-body{max-height:calc(100vh - 15rem)}.search-result-link{border-radius:0.7em;transition:all 300ms}.search-result-link:hover,.search-result-link:focus{background-color:rgba(0,128,128,0.1)}.search-result-link .property-search-result-badge,.search-result-link .search-filter{transition:all 300ms}.property-search-result-badge,.search-filter{padding:0.15em 0.5em;font-size:0.8em;font-style:italic;text-transform:none !important;line-height:1.5;color:#f5f5f5;background-color:rgba(51,65,85,0.501961);border-radius:0.6rem}.search-result-link:hover .property-search-result-badge,.search-result-link:hover .search-filter,.search-result-link:focus .property-search-result-badge,.search-result-link:focus .search-filter{color:#f1f5f9;background-color:#333}.search-filter{color:#333;background-color:#f5f5f5;transition:all 300ms}.search-filter:hover,.search-filter:focus{color:#333}.search-filter-selected{color:#f5f5f5;background-color:rgba(139,0,139,0.5)}.search-filter-selected:hover,.search-filter-selected:focus{color:#f5f5f5}.search-result-highlight{background-color:#ffdd57;color:black}.search-divider{border-bottom:1px solid #dbdbdb}.search-result-title{width:85%;color:#333}.search-result-code-title{font-size:0.875rem;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}#search-modal .modal-card-body::-webkit-scrollbar,#search-modal .filter-tabs::-webkit-scrollbar{height:10px;width:10px;background-color:transparent}#search-modal .modal-card-body::-webkit-scrollbar-thumb,#search-modal .filter-tabs::-webkit-scrollbar-thumb{background-color:gray;border-radius:1rem}#search-modal .modal-card-body::-webkit-scrollbar-track,#search-modal .filter-tabs::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,0.6);background-color:transparent}.w-100{width:100%}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-8{gap:2rem}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#F3F3F3;color:#444}.hljs-comment{color:#697070}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#ab5656}.hljs-literal{color:#695}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#38a}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}.gap-4{gap:1rem} diff --git a/v0.6.17/assets/themeswap.js b/v0.6.17/assets/themeswap.js new file mode 100644 index 0000000000..9f5eebe6aa --- /dev/null +++ b/v0.6.17/assets/themeswap.js @@ -0,0 +1,84 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Initialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if (window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the users preference is for dark color scheme + var darkPreference = + window.matchMedia("(prefers-color-scheme: dark)").matches === true; + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; + var disabled = []; + var primaryLightTheme = null; + var primaryDarkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + if (ss.ownerNode.getAttribute("data-theme-primary") !== null) { + primaryLightTheme = themename; + } + // Check if the theme is primary dark theme so that we could store its name in darkTheme + if (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null) { + primaryDarkTheme = themename; + } + // If we find a matching theme (and it's not the default), we'll set active to non-null + if (themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if (themename !== theme) disabled.push(ss); + } + var activeTheme = null; + if (active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName("html")[0].className = "theme--" + theme; + activeTheme = theme; + } else { + // If we did _not_ find an active theme, then we need to fall back to the primary theme + // which can either be dark or light, depending on the user's OS preference. + var activeTheme = darkPreference ? primaryDarkTheme : primaryLightTheme; + // In case it somehow happens that the relevant primary theme was not found in the + // preceding loop, we abort without doing anything. + if (activeTheme === null) { + console.error("Unable to determine primary theme."); + return; + } + // When switching to the primary light theme, then we must not have a class name + // for the tag. That's only for non-primary or the primary dark theme. + if (darkPreference) { + document.getElementsByTagName("html")[0].className = + "theme--" + activeTheme; + } else { + document.getElementsByTagName("html")[0].className = ""; + } + } + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if (themename === null) continue; + // we'll disable all the stylesheets, except for the active one + ss.disabled = !(themename == activeTheme); + } +} +set_theme_from_local_storage(); diff --git a/v0.6.17/assets/warner.js b/v0.6.17/assets/warner.js new file mode 100644 index 0000000000..3f6f5d0083 --- /dev/null +++ b/v0.6.17/assets/warner.js @@ -0,0 +1,52 @@ +function maybeAddWarning() { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return; + } + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return; + } + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return; + } + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement("meta"); + meta.name = "robots"; + meta.content = "noindex"; + + document.getElementsByTagName("head")[0].appendChild(meta); + } + + const div = document.createElement("div"); + div.classList.add("outdated-warning-overlay"); + const closer = document.createElement("button"); + closer.classList.add("outdated-warning-closer", "delete"); + closer.addEventListener("click", function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + "/../" + window.DOCUMENTER_STABLE; + div.innerHTML = + 'This documentation is not for the latest stable release, but for either the development version or an older release.
    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", maybeAddWarning); +} else { + maybeAddWarning(); +} diff --git a/v0.6.17/developer/conventions/index.html b/v0.6.17/developer/conventions/index.html new file mode 100644 index 0000000000..02f44c11e2 --- /dev/null +++ b/v0.6.17/developer/conventions/index.html @@ -0,0 +1,6 @@ + +Notation and conventions · DFTK.jl

    Notation and conventions

    Usage of unicode characters

    DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.

    Symbol conventions

    • Reciprocal-space vectors: $k$ for vectors in the Brillouin zone, $G$ for vectors of the reciprocal lattice, $q$ for phonon vectors (i.e., vectors in the Brillouin zone characteristic of the crystal normal modes), $p$ for general vectors.
    • Real-space vectors: $R$ for lattice vectors, $r$ and $x$ are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.
    • $\Omega$ is the unit cell, and $|\Omega|$ (or sometimes just $\Omega$) is its volume.
    • $A$ are the real-space lattice vectors (model.lattice) and $B$ the Brillouin zone lattice vectors (model.recip_lattice).
    • The Bloch waves are

      \[\psi_{nk}(x) = e^{ik\cdot x} u_{nk}(x),\]

      where $n$ is the band index and $k$ the $k$-point. In the code we sometimes use $\psi$ and $u$ interchangeably.
    • $\varepsilon$ are the eigenvalues, $\varepsilon_F$ is the Fermi level.
    • $\rho$ is the density.
    • In the code we use normalized plane waves:

      \[e_G(r) = \frac 1 {\sqrt{\Omega}} e^{i G \cdot r}.\]

    • $Y^l_m$ are the complex spherical harmonics, and $Y_{lm}$ the real ones.
    • $j_l$ are the Bessel functions. In particular, $j_{0}(x) = \frac{\sin x}{x}$.

    Units

    In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:

    using Unitful
    +using UnitfulAtomic
    +austrip(10u"eV")      # 10eV in Hartree
    0.36749322175518595
    using Unitful: Å
    +using UnitfulAtomic
    +auconvert(Å, 1.2)  # 1.2 Bohr in Ångström
    0.6350126530835999 Å
    Differing unit conventions

    Different electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.

    Lattices and lattice vectors

    Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still $3 \times 3$ matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by $A$ and the reciprocal-space lattice vectors by $B = 2\pi A^{-T}$.

    Row-major versus column-major storage order

    Julia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices $A$ before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.

    We use the convention that the unit cell in real space is $[0, 1)^3$ in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is $[-1/2, 1/2)^3$.

    Reduced and cartesian coordinates

    Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as $k$, $G$, $q$, $p$ or real-space vectors like $r$ and $R$ (see Symbol conventions). One switches to Cartesian coordinates by

    \[x_\text{cart} = M x_\text{red}\]

    where $M$ is either $A$ / model.lattice (for real-space vectors) or $B$ / model.recip_lattice (for reciprocal-space vectors). A useful relationship is

    \[b_\text{cart} \cdot a_\text{cart}=2\pi b_\text{red} \cdot a_\text{red}\]

    if $a$ and $b$ are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for $G$-vectors) or fractional coordinates (usually for $k$-points).

    Normalization conventions

    The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points and in reciprocal space its coefficients are $\ell^{2}$-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.

    diff --git a/v0.6.17/developer/data_structures/408d0ed6.svg b/v0.6.17/developer/data_structures/408d0ed6.svg new file mode 100644 index 0000000000..9d9f375dde --- /dev/null +++ b/v0.6.17/developer/data_structures/408d0ed6.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/developer/data_structures/6e0fd57e.svg b/v0.6.17/developer/data_structures/6e0fd57e.svg new file mode 100644 index 0000000000..00fa2f0da6 --- /dev/null +++ b/v0.6.17/developer/data_structures/6e0fd57e.svg @@ -0,0 +1,5671 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/developer/data_structures/index.html b/v0.6.17/developer/data_structures/index.html new file mode 100644 index 0000000000..d35b997b38 --- /dev/null +++ b/v0.6.17/developer/data_structures/index.html @@ -0,0 +1,90 @@ + +Data structures · DFTK.jl

    Data structures

    In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.

    Model datastructure

    The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:

    typeof.(model.term_types)
    7-element Vector{DataType}:
    + Kinetic{BlowupIdentity}
    + AtomicLocal
    + AtomicNonlocal
    + Ewald
    + PspCorrection
    + Hartree
    + Xc

    DFTK computes energies for all terms of the model individually, which are available in scfres.energies:

    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1739265 
    +    AtomicLocal         -2.1467693
    +    AtomicNonlocal      1.5858681 
    +    Ewald               -8.4004648
    +    PspCorrection       -0.2948928
    +    Hartree             0.5586661 
    +    Xc                  -2.4031990
    +
    +    total               -7.926865084096

    For now the following energy terms are available in DFTK:

    • Kinetic energy
    • Local potential energy, either given by analytic potentials or specified by the type of atoms.
    • Nonlocal potential energy, for norm-conserving pseudopotentials
    • Nuclei energies (Ewald or pseudopotential correction)
    • Hartree energy
    • Exchange-correlation energy
    • Power nonlinearities (useful for Gross-Pitaevskii type models)
    • Magnetic field energy
    • Entropy term

    Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.

    By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:

    • model_LDA: LDA model using the Teter parametrisation
    • model_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])
    • model_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).

    PlaneWaveBasis and plane-wave discretisations

    The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the $k$-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:

    PlaneWaveBasis(model; Ecut, kgrid)
    PlaneWaveBasis discretization:
    +    architecture         : DFTK.CPU()
    +    num. mpi processes   : 1
    +    num. julia threads   : 1
    +    num. blas  threads   : 2
    +    num. fft   threads   : 1
    +
    +    Ecut                 : 15.0 Ha
    +    fft_size             : (30, 30, 30), 27000 total points
    +    kgrid                : MonkhorstPack([4, 4, 4])
    +    num.   red. kpoints  : 64
    +    num. irred. kpoints  : 8
    +
    +    Discretized Model(lda_x+lda_c_pw, 3D):
    +        lattice (in Bohr)    : [0         , 5.13      , 5.13      ]
    +                               [5.13      , 0         , 5.13      ]
    +                               [5.13      , 5.13      , 0         ]
    +        unit cell volume     : 270.01 Bohr³
    +    
    +        atoms                : Si₂
    +        atom potentials      : ElementPsp(Si; psp="hgh/lda/si-q4")
    +                               ElementPsp(Si; psp="hgh/lda/si-q4")
    +    
    +        num. electrons       : 8
    +        spin polarization    : none
    +        temperature          : 0 Ha
    +    
    +        terms                : Kinetic()
    +                               AtomicLocal()
    +                               AtomicNonlocal()
    +                               Ewald(nothing)
    +                               PspCorrection()
    +                               Hartree()
    +                               Xc(lda_x, lda_c_pw)

    The PlaneWaveBasis by default uses symmetry to reduce the number of k-points explicitly treated. For details see Crystal symmetries.

    As mentioned, the periodic parts of Bloch waves are expanded in a set of normalized plane waves $e_G$:

    \[\begin{aligned} + \psi_{k}(x) &= e^{i k \cdot x} u_{k}(x)\\ + &= \sum_{G \in \mathcal R^{*}} c_{G} e^{i k \cdot x} e_{G}(x) +\end{aligned}\]

    where $\mathcal R^*$ is the set of reciprocal lattice vectors. The $c_{{G}}$ are $\ell^{2}$-normalized. The summation is truncated to a "spherical", $k$-dependent basis set

    \[ S_{k} = \left\{G \in \mathcal R^{*} \,\middle|\, + \frac 1 2 |k+ G|^{2} \le E_\text{cut}\right\}\]

    where $E_\text{cut}$ is the cutoff energy.

    Densities involve terms like $|\psi_{k}|^{2} = |u_{k}|^{2}$ and therefore products $e_{-{G}} e_{{G}'}$ for ${G}, {G}'$ in $S_{k}$. To represent these we use a "cubic", $k$-independent basis set large enough to contain the set $\{{G}-G' \,|\, G, G' \in S_{k}\}$. We can obtain the coefficients of densities on the $e_{G}$ basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.

    The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the $e_{G}$ basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as $\frac{|\Omega|}{N} \sum_{r} |\psi(r)|^{2} = 1$ where $N$ is the number of grid points.

    For example let us check the normalization of the first eigenfunction at the first $k$-point in reciprocal space:

    ψtest = scfres.ψ[1][:, 1]
    +sum(abs2.(ψtest))
    1.0000000000000007

    We now perform an IFFT to get ψ in real space. The $k$-point has to be passed because ψ is expressed on the $k$-dependent basis. Again the function is normalised:

    ψreal = ifft(basis, basis.kpoints[1], ψtest)
    +sum(abs2.(ψreal)) * basis.dvol
    1.0

    The list of $k$ points of the basis can be obtained with basis.kpoints.

    basis.kpoints
    8-element Vector{Kpoint{Float64, Vector{StaticArraysCore.SVector{3, Int64}}}}:
    + KPoint([     0,      0,      0], spin = 1, num. G vectors =   725)
    + KPoint([  0.25,      0,      0], spin = 1, num. G vectors =   754)
    + KPoint([  -0.5,      0,      0], spin = 1, num. G vectors =   754)
    + KPoint([  0.25,   0.25,      0], spin = 1, num. G vectors =   729)
    + KPoint([  -0.5,   0.25,      0], spin = 1, num. G vectors =   748)
    + KPoint([ -0.25,   0.25,      0], spin = 1, num. G vectors =   754)
    + KPoint([  -0.5,   -0.5,      0], spin = 1, num. G vectors =   740)
    + KPoint([ -0.25,   -0.5,   0.25], spin = 1, num. G vectors =   744)

    The $G$ vectors of the "spherical", $k$-dependent grid can be obtained with G_vectors:

    [length(G_vectors(basis, kpoint)) for kpoint in basis.kpoints]
    8-element Vector{Int64}:
    + 725
    + 754
    + 754
    + 729
    + 748
    + 754
    + 740
    + 744
    ik = 1
    +G_vectors(basis, basis.kpoints[ik])[1:4]
    4-element Vector{StaticArraysCore.SVector{3, Int64}}:
    + [0, 0, 0]
    + [1, 0, 0]
    + [2, 0, 0]
    + [3, 0, 0]

    The list of $G$ vectors (Fourier modes) of the "cubic", $k$-independent basis set can be obtained similarly with G_vectors(basis).

    length(G_vectors(basis)), prod(basis.fft_size)
    (27000, 27000)
    collect(G_vectors(basis))[1:4]
    4-element Vector{StaticArraysCore.SVector{3, Int64}}:
    + [0, 0, 0]
    + [1, 0, 0]
    + [2, 0, 0]
    + [3, 0, 0]

    Analogously the list of $r$ vectors (real-space grid) can be obtained with r_vectors(basis):

    length(r_vectors(basis))
    27000
    collect(r_vectors(basis))[1:4]
    4-element Vector{StaticArraysCore.SVector{3, Float64}}:
    + [0.0, 0.0, 0.0]
    + [0.03333333333333333, 0.0, 0.0]
    + [0.06666666666666667, 0.0, 0.0]
    + [0.1, 0.0, 0.0]

    Accessing Bloch waves and densities

    Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the $k$-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).

    rvecs = collect(r_vectors(basis))[:, 1, 1]  # slice along the x axis
    +x = [r[1] for r in rvecs]                   # only keep the x coordinate
    +plot(x, scfres.ρ[:, 1, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
    Example block output
    G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]
    +scatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);
    +        yscale=:log10, ylims=(1e-12, 1), label="", xlabel="Energy", ylabel="|ρ|")
    Example block output

    Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to $\frac 1 2|k+G|^2 ≤ E_{\rm cut}$.

    • 2If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].
    diff --git a/v0.6.17/developer/gpu_computations/index.html b/v0.6.17/developer/gpu_computations/index.html new file mode 100644 index 0000000000..e1b334c6f3 --- /dev/null +++ b/v0.6.17/developer/gpu_computations/index.html @@ -0,0 +1,20 @@ + +GPU computations · DFTK.jl

    GPU computations

    Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.

    To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.

    Current implementation

    For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.

    PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())
    +PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))
    GPU API is experimental

    It is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.

    Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.

    Pitfalls

    There are a few things to keep in mind when doing GPU programming in DFTK.

    • Transfers to and from a device can be done simply by converting an array to

    an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.

    cuda_gpu = DFTK.GPU(CuArray)
    +cpu_architecture = DFTK.CPU()
    +A = rand(10)  # A is on the CPU
    +B = DFTK.to_device(cuda_gpu, A)  # B is a copy of A on the CUDA GPU
    +B .+= 1.
    +C = DFTK.to_cpu(B)  # C is a copy of B on the CPU
    +D = DFTK.to_device(cpu_architecture, B)  # Equivalent to the previous line, but
    +                                         # should be avoided as it is less clear

    Note: similar could also be used, but then a reference array (one which already lives on the device) needs to be available at call time. This was done previously, with helper functions to easily build new arrays on a given architecture: see for example zeros_like.

    • Functions which will get executed on the GPU should always have arguments

    which are isbits (immutable and contains no references to other values). When using map, also make sure that every structure used is also isbits. For example, the following map will fail, as model contains strings and arrays which are not isbits.

    function map_lattice(model::Model, Gs::AbstractArray{Vec3})
    +    # model is not isbits
    +    map(Gs) do Gi
    +        model.lattice * Gi
    +    end
    +end

    However, the following map will run on a GPU, as the lattice is a static matrix.

    function map_lattice(model::Model, Gs::AbstractArray{Vec3})
    +    lattice = model.lattice # lattice is isbits
    +    map(Gs) do Gi
    +        model.lattice * Gi
    +    end
    +end
    • List comprehensions should be avoided, as they always return a CPU Array.

    Instead, we should use map which returns an array of the same type as the input one.

    • Sometimes, creating a new array or making a copy can be necessary to achieve good

    performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.

    diff --git a/v0.6.17/developer/setup/index.html b/v0.6.17/developer/setup/index.html new file mode 100644 index 0000000000..d63378e8a1 --- /dev/null +++ b/v0.6.17/developer/setup/index.html @@ -0,0 +1,9 @@ + +Developer setup · DFTK.jl

    Developer setup

    Source code installation

    If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).

    To achieve such a setup you have two recommended options:

    1. Clone DFTK into a location of your choice

      $ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/

      Whenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:

      import Pkg
      +Pkg.develop("/some/path/")

      To run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use

      $ julia --project=/some/path/

      The advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.

    2. Add a development version of DFTK to the global Julia environment:

      import Pkg
      +Pkg.develop("DFTK")

      This clones DFTK to the path ~/.julia/dev/DFTK" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.

    Disabling precompilation

    For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.

    At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:

    [DFTK]
    +precompile_workload = false

    Running the tests

    We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.

    Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use

    using TestEnv       # Optional: automatically installs required packages
    +TestEnv.activate()  # for tests in a temporary environment.
    +using TestItemRunner
    +cd("test")          # By default, the following macro runs everything from the parent folder.
    +@run_package_tests filter = ti -> :core ∈ ti.tags

    Or to only run the tests of a particular file serialisation.jl use

    @run_package_tests filter = ti -> occursin("serialisation.jl", ti.filename)

    If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with

    using .MySetup: my_function

    It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with

    using ..MySetup: my_function
    diff --git a/v0.6.17/developer/style_guide/index.html b/v0.6.17/developer/style_guide/index.html new file mode 100644 index 0000000000..d1058491e2 --- /dev/null +++ b/v0.6.17/developer/style_guide/index.html @@ -0,0 +1,2 @@ + +Developer's style guide · DFTK.jl

    Developer's style guide

    The following conventions are not strictly enforced in DFTK. The rule of thumb is readability over consistency.

    Coding and formatting conventions

    • Line lengths should be 92 characters.
    • Avoid shortening variable names only for its own sake.
    • Named tuples should be explicit, i.e., (; var=val) over (var=val).
    • Use NamedTuple unpacking to prevent ambiguities when getting multiple arguments from a function.
    • Empty callbacks should use identity.
    • Use = to loop over a range but in to loop over elements.
    • Always format the where keyword with explicit braces: where {T <: Any}.
    • Do not use implicit arguments in functions but explicit keyword.
    • Prefix function name by _ if it is an internal helper function, which is not of general use and should thus be kept close to the vicinity of the calling function.
    diff --git a/v0.6.17/developer/symmetries/index.html b/v0.6.17/developer/symmetries/index.html new file mode 100644 index 0000000000..7fe6890646 --- /dev/null +++ b/v0.6.17/developer/symmetries/index.html @@ -0,0 +1,58 @@ + +Crystal symmetries · DFTK.jl

    Crystal symmetries

    Theory

    In this discussion we will only describe the situation for a monoatomic crystal $\mathcal C \subset \mathbb R^3$, the extension being easy. A symmetry of the crystal is an orthogonal matrix $W$ and a real-space vector $w$ such that

    \[W \mathcal{C} + w = \mathcal{C}.\]

    The symmetries where $W = 1$ and $w$ is a lattice vector are always assumed and ignored in the following.

    We can define a corresponding unitary operator $U$ on $L^2(\mathbb R^3)$ with action

    \[ (Uu)(x) = u\left( W x + w \right).\]

    We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that $U$ commutes with the Hamiltonian.

    This operator acts on a plane-wave as

    \[\begin{aligned} +(U e^{iq\cdot x}) (x) &= e^{iq \cdot w} e^{i (W^T q) x}\\ +&= e^{- i(S q) \cdot \tau } e^{i (S q) \cdot x} +\end{aligned}\]

    where we set

    \[\begin{aligned} +S &= W^{T}\\ +\tau &= -W^{-1}w. +\end{aligned}\]

    It follows that the Fourier transform satisfies

    \[\widehat{Uu}(q) = e^{- iq \cdot \tau} \widehat u(S^{-1} q)\]

    (all of these equations being also valid in reduced coordinates). In particular, if $e^{ik\cdot x} u_{k}(x)$ is an eigenfunction, then by decomposing $u_k$ over plane-waves $e^{i G \cdot x}$ one can see that $e^{i(S^T k) \cdot x} (U u_k)(x)$ is also an eigenfunction: we can choose

    \[u_{Sk} = U u_k.\]

    This is used to reduce the computations needed. For a uniform sampling of the Brillouin zone (the reducible $k$-points), one can find a reduced set of $k$-points (the irreducible $k$-points) such that the eigenvectors at the reducible $k$-points can be deduced from those at the irreducible $k$-points.

    Symmetrization

    Quantities that are calculated by summing over the reducible $k$ points can be calculated by first summing over the irreducible $k$ points and then symmetrizing. Let $\mathcal{K}_\text{reducible}$ denote the reducible $k$-points sampling the Brillouin zone, $\mathcal{S}$ be the group of all crystal symmetries that leave this BZ mesh invariant ($\mathcal{S}\mathcal{K}_\text{reducible} = \mathcal{K}_\text{reducible}$) and $\mathcal{K}$ be the irreducible $k$-points obtained from $\mathcal{K}_\text{reducible}$ using the symmetries $\mathcal{S}$. Clearly

    \[\mathcal{K}_\text{red} = \{Sk \, | \, S \in \mathcal{S}, k \in \mathcal{K}\}.\]

    Let $Q$ be a $k$-dependent quantity to sum (for instance, energies, densities, forces, etc). $Q$ transforms in a particular way under symmetries: $Q(Sk) = S(Q(k))$ where the (linear) action of $S$ on $Q$ depends on the particular $Q$.

    \[\begin{aligned} +\sum_{k \in \mathcal{K}_\text{red}} Q(k) +&= \sum_{k \in \mathcal{K}} \ \sum_{S \text{ with } Sk \in \mathcal{K}_\text{red}} S(Q(k)) \\ +&= \sum_{k \in \mathcal{K}} \frac{1}{N_{\mathcal{S},k}} \sum_{S \in \mathcal{S}} S(Q(k))\\ +&= \frac{1}{N_{\mathcal{S}}} \sum_{S \in \mathcal{S}} + \left(\sum_{k \in \mathcal{K}} \frac{N_\mathcal{S}}{N_{\mathcal{S},k}} Q(k) \right) +\end{aligned}\]

    Here, $N_\mathcal{S} = |\mathcal{S}|$ is the total number of symmetry operations and $N_{\mathcal{S},k}$ denotes the number of operations such that leave $k$ invariant. The latter operations form a subgroup of the group of all symmetry operations, sometimes called the small/little group of $k$. The factor $\frac{N_\mathcal{S}}{N_{S,k}}$, also equal to the ratio of number of reducible points encoded by this particular irreducible $k$ to the total number of reducible points, determines the weight of each irreducible $k$ point.

    Example

    Let us demonstrate this in practice. We consider silicon, setup appropriately in the lattice, atoms and positions objects as in Tutorial and to reach a fast execution, we take a small Ecut of 5 and a [4, 4, 4] Monkhorst-Pack grid. First we perform the DFT calculation disabling symmetry handling

    model_nosym = model_LDA(lattice, atoms, positions; symmetries=false)
    +basis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid)
    +scfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.864793769471                   -0.72    3.5    275ms
    +  2   -7.868983687306       -2.38       -1.54    1.0    134ms
    +  3   -7.869173701198       -3.72       -2.58    1.0    177ms
    +  4   -7.869208889535       -4.45       -2.86    2.4    211ms
    +  5   -7.869209492164       -6.22       -3.05    1.0    137ms
    +  6   -7.869209805242       -6.50       -4.69    1.0    135ms
    +  7   -7.869209817301       -7.92       -4.64    2.6    232ms
    +  8   -7.869209817521       -9.66       -5.65    1.0    160ms
    +  9   -7.869209817528      -11.10       -5.61    2.1    189ms
    + 10   -7.869209817531      -11.69       -6.33    1.0    136ms
    +  1.795801 seconds (1.55 M allocations: 722.372 MiB, 3.33% gc time)

    and then redo it using symmetry (the default):

    model_sym = model_LDA(lattice, atoms, positions)
    +basis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)
    +scfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.864608878844                   -0.72    4.2   48.0ms
    +  2   -7.868993211270       -2.36       -1.54    1.0   25.3ms
    +  3   -7.869177373073       -3.73       -2.60    1.1   25.7ms
    +  4   -7.869209094769       -4.50       -2.88    2.5   35.3ms
    +  5   -7.869209540387       -6.35       -3.05    1.0   24.9ms
    +  6   -7.869209807013       -6.57       -4.08    1.0   25.1ms
    +  7   -7.869209817111       -8.00       -4.94    1.9   31.4ms
    +  8   -7.869209817521       -9.39       -5.29    1.9   32.4ms
    +  9   -7.869209817529      -11.08       -5.89    1.0   25.5ms
    + 10   -7.869209817529      -12.23       -5.67    1.5   33.9ms
    + 11   -7.869209817530      -12.06       -6.05    1.0   25.8ms
    +  0.338629 seconds (253.69 k allocations: 141.637 MiB)

    Clearly both yield the same energy but the version employing symmetry is faster, since less $k$-points are explicitly treated:

    (length(basis_sym.kpoints), length(basis_nosym.kpoints))
    (8, 64)

    Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.

    We can also explicitly verify both methods to yield the same density:

    (norm(scfres_sym.ρ - scfres_nosym.ρ),
    + norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))
    (4.97525798612449e-7, 1.195511038342423e-6)

    The symmetries can be used to map reducible to irreducible points:

    ikpt_red = rand(1:length(basis_nosym.kpoints))
    +# find a (non-unique) corresponding irreducible point in basis_nosym,
    +# and the symmetry that relates them
    +ikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])
    +[basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]
    3×2 StaticArraysCore.SMatrix{3, 2, Float64, 6} with indices SOneTo(3)×SOneTo(2):
    + 0.25  0.25
    + 0.0   0.0
    + 0.0   0.0

    The eigenvalues match also:

    [scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]
    7×2 Matrix{Float64}:
    + -0.14075   -0.14075
    +  0.120308   0.120309
    +  0.233237   0.233237
    +  0.233237   0.233237
    +  0.34283    0.34283
    +  0.391626   0.391626
    +  0.391626   0.391626
    diff --git a/v0.6.17/developer/useful_formulas/index.html b/v0.6.17/developer/useful_formulas/index.html new file mode 100644 index 0000000000..fd9ebc5a81 --- /dev/null +++ b/v0.6.17/developer/useful_formulas/index.html @@ -0,0 +1,17 @@ + +Useful formulas · DFTK.jl

    Useful formulas

    This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.

    Fourier transforms

    • The Fourier transform is

      \[\widehat{f}(q) = \int_{{\mathbb R}^{3}} e^{-i q \cdot x} f(x) dx\]

    • Fourier transforms of centered functions: If $f({x}) = R(x) Y_l^m(x/|x|)$, then

      \[\begin{aligned} + \hat f( q) + &= \int_{{\mathbb R}^3} R(x) Y_{l}^{m}(x/|x|) e^{-i {q} \cdot {x}} d{x} \\ + &= \sum_{l = 0}^\infty 4 \pi i^l + \sum_{m = -l}^l \int_{{\mathbb R}^3} + R(x) j_{l'}(|q| |x|)Y_{l'}^{m'}(-q/|q|) Y_{l}^{m}(x/|x|) + Y_{l'}^{m'\ast}(x/|x|) + d{x} \\ + &= 4 \pi Y_{l}^{m}(-q/|q|) i^{l} + \int_{{\mathbb R}^+} r^2 R(r) \ j_{l}(|q| r) dr\\ + &= 4 \pi Y_{l}^{m}(q/|q|) (-i)^{l} + \int_{{\mathbb R}^+} r^2 R(r) \ j_{l}(|q| r) dr + \end{aligned}\]

      This also holds true for real spherical harmonics.

    Spherical harmonics

    • Plane wave expansion formula

      \[e^{i {q} \cdot {r}} = + 4 \pi \sum_{l = 0}^\infty \sum_{m = -l}^l + i^l j_l(|q| |r|) Y_l^m(q/|q|) Y_l^{m\ast}(r/|r|)\]

    • Spherical harmonics orthogonality

      \[\int_{\mathbb{S}^2} Y_l^{m*}(r)Y_{l'}^{m'}(r) dr + = \delta_{l,l'} \delta_{m,m'}\]

      This also holds true for real spherical harmonics.

    • Spherical harmonics parity

      \[Y_l^m(-r) = (-1)^l Y_l^m(r)\]

      This also holds true for real spherical harmonics.

    diff --git a/v0.6.17/examples/Fe_afm.pwi b/v0.6.17/examples/Fe_afm.pwi new file mode 100644 index 0000000000..013703e2be --- /dev/null +++ b/v0.6.17/examples/Fe_afm.pwi @@ -0,0 +1,44 @@ +! Slightly modified from +! https://gitlab.com/QEF/material-for-ljubljana-qe-summer-school/-/raw/master/Day-1/example5.Fe/pw.fe_afm.scf.in + + &CONTROL + prefix='fe', + + !pseudo_dir = 'directory with pseudopotentials', + !outdir = 'temporary directory for large files' + !verbosity = 'high', + / + + &SYSTEM + ibrav = 1, + celldm(1) = 5.42, + nat = 2, + ntyp = 2, + ecutwfc = 25.0, + ecutrho = 200.0, + + occupations='smearing', + smearing='mv', + degauss=0.01, + + nspin=2, + starting_magnetization(1) = 0.6 + starting_magnetization(2) = -0.6 + / + + &ELECTRONS + / + +ATOMIC_SPECIES +# the second field, atomic mass, is not actually used +# except for MD calculations + Fe1 1. Fe.pbe-nd-rrkjus.UPF + Fe2 1. Fe.pbe-nd-rrkjus.UPF + +ATOMIC_POSITIONS crystal + Fe1 0.0 0.0 0.0 + Fe2 0.5 0.5 0.0 +! this is a comment that the code will ignore + +K_POINTS automatic + 8 8 8 1 1 1 diff --git a/v0.6.17/examples/Si.extxyz b/v0.6.17/examples/Si.extxyz new file mode 100644 index 0000000000..d7a30be06c --- /dev/null +++ b/v0.6.17/examples/Si.extxyz @@ -0,0 +1,4 @@ +2 +Lattice="0.0 2.715 2.715 2.715 0.0 2.715 2.715 2.715 0.0" Properties=species:S:1:pos:R:3 pbc="T T T" +Si 0.00000000 0.00000000 0.00000000 +Si 1.35750000 1.35750000 1.35750000 diff --git a/v0.6.17/examples/al_supercell.png b/v0.6.17/examples/al_supercell.png new file mode 100644 index 0000000000000000000000000000000000000000..48d6b04dd566031c8461ecfff5ac22934ecaa086 GIT binary patch literal 8042 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\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using StaticArrays\n", + "using Plots\n", + "\n", + "# Unit cell. Having one of the lattice vectors as zero means a 2D system\n", + "a = 14\n", + "lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n", + "\n", + "# Confining scalar potential\n", + "pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);\n", + "\n", + "# Parameters\n", + "Ecut = 50\n", + "n_electrons = 1\n", + "β = 5;\n", + "\n", + "# Collect all the terms, build and run the model\n", + "terms = [Kinetic(; scaling_factor=2),\n", + " ExternalFromReal(X -> pot(X...)),\n", + " Anyonic(1, β)\n", + "]\n", + "model = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # \"spinless electrons\"\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\n", + "scfres = direct_minimization(basis, tol=1e-14) # Reduce tol for production\n", + "E = scfres.energies.total\n", + "s = 2\n", + "E11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β\n", + "println(\"e(1,1) / (2π) = \", E11 / (2π))\n", + "heatmap(scfres.ρ[:, :, 1, 1], c=:blues)" + ], + "metadata": {}, + "execution_count": 1 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/anyons/78a6d6d5.svg b/v0.6.17/examples/anyons/78a6d6d5.svg new file mode 100644 index 0000000000..1d7a78b8b9 --- /dev/null +++ b/v0.6.17/examples/anyons/78a6d6d5.svg @@ -0,0 +1,462 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/anyons/index.html b/v0.6.17/examples/anyons/index.html new file mode 100644 index 0000000000..46b612c1f1 --- /dev/null +++ b/v0.6.17/examples/anyons/index.html @@ -0,0 +1,30 @@ + +Anyonic models · DFTK.jl

    Anyonic models

    We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf

    using DFTK
    +using StaticArrays
    +using Plots
    +
    +# Unit cell. Having one of the lattice vectors as zero means a 2D system
    +a = 14
    +lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];
    +
    +# Confining scalar potential
    +pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);
    +
    +# Parameters
    +Ecut = 50
    +n_electrons = 1
    +β = 5;
    +
    +# Collect all the terms, build and run the model
    +terms = [Kinetic(; scaling_factor=2),
    +         ExternalFromReal(X -> pot(X...)),
    +         Anyonic(1, β)
    +]
    +model = Model(lattice; n_electrons, terms, spin_polarization=:spinless)  # "spinless electrons"
    +basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))
    +scfres = direct_minimization(basis, tol=1e-14)  # Reduce tol for production
    +E = scfres.energies.total
    +s = 2
    +E11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β
    +println("e(1,1) / (2π) = ", E11 / (2π))
    +heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
    Example block output
    diff --git a/v0.6.17/examples/arbitrary_floattype.ipynb b/v0.6.17/examples/arbitrary_floattype.ipynb new file mode 100644 index 0000000000..c116732cbd --- /dev/null +++ b/v0.6.17/examples/arbitrary_floattype.ipynb @@ -0,0 +1,164 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Arbitrary floating-point types\n", + "\n", + "Since DFTK is completely generic in the floating-point type\n", + "in its routines, there is no reason to perform the computation\n", + "using double-precision arithmetic (i.e.`Float64`).\n", + "Other floating-point types such as `Float32` (single precision)\n", + "are readily supported as well.\n", + "On top of that we already reported[^HLC2020] calculations\n", + "in DFTK using elevated precision\n", + "from [DoubleFloats.jl](https://github.com/JuliaMath/DoubleFloats.jl)\n", + "or interval arithmetic\n", + "using [IntervalArithmetic.jl](https://github.com/JuliaIntervals/IntervalArithmetic.jl).\n", + "In this example, however, we will concentrate on single-precision\n", + "computations with `Float32`.\n", + "\n", + "The setup of such a reduced-precision calculation is basically identical\n", + "to the regular case, since Julia automatically compiles all routines\n", + "of DFTK at the precision, which is used for the lattice vectors.\n", + "Apart from setting up the model with an explicit cast of the lattice\n", + "vectors to `Float32`, there is thus no change in user code required:\n", + "\n", + "[^HLC2020]:\n", + " M. F. Herbst, A. Levitt, E. Cancès.\n", + " *A posteriori error estimation for the non-self-consistent Kohn-Sham equations*\n", + " [ArXiv 2004.13549](https://arxiv.org/abs/2004.13549)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.900543212891 -0.70 4.8 76.1s\n", + " 2 -7.905013561249 -2.35 -1.52 1.0 11.6s\n", + " 3 -7.905179977417 -3.78 -2.52 1.1 1.19s\n", + " 4 -7.905210494995 -4.52 -2.83 2.6 56.4ms\n", + " 5 -7.905211448669 -6.02 -2.99 1.0 75.5ms\n", + " 6 -7.905213356018 -5.72 -4.51 1.0 41.4ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "# Setup silicon lattice\n", + "a = 10.263141334305942 # lattice constant in Bohr\n", + "lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# Cast to Float32, setup model and basis\n", + "model = model_LDA(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])\n", + "\n", + "# Run the SCF\n", + "scfres = self_consistent_field(basis, tol=1e-3);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "To check the calculation has really run in Float32,\n", + "we check the energies and density are expressed in this floating-point type:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1021299 \n AtomicLocal -2.1988413\n AtomicNonlocal 1.7295793 \n Ewald -8.3978958\n PspCorrection -0.2946220\n Hartree 0.5530576 \n Xc -2.3986208\n\n total -7.905213356018" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Float32" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "eltype(scfres.energies.total)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Float32" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "eltype(scfres.ρ)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Generic linear algebra routines\"\n", + " For more unusual floating-point types (like IntervalArithmetic or DoubleFloats),\n", + " which are not directly supported in the standard `LinearAlgebra` and `FFTW`\n", + " libraries one additional step is required: One needs to explicitly enable the generic\n", + " versions of standard linear-algebra operations like `cholesky` or `qr` or standard\n", + " `fft` operations, which DFTK requires. THis is done by loading the\n", + " `GenericLinearAlgebra` package in the user script\n", + " (i.e. just add ad `using GenericLinearAlgebra` next to your `using DFTK` call)." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/arbitrary_floattype/index.html b/v0.6.17/examples/arbitrary_floattype/index.html new file mode 100644 index 0000000000..6f5b8b8cef --- /dev/null +++ b/v0.6.17/examples/arbitrary_floattype/index.html @@ -0,0 +1,32 @@ + +Arbitrary floating-point types · DFTK.jl

    Arbitrary floating-point types

    Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.

    The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:

    using DFTK
    +
    +# Setup silicon lattice
    +a = 10.263141334305942  # lattice constant in Bohr
    +lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +# Cast to Float32, setup model and basis
    +model = model_LDA(lattice, atoms, positions)
    +basis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])
    +
    +# Run the SCF
    +scfres = self_consistent_field(basis, tol=1e-3);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.900548458099                   -0.70    4.6   60.3ms
    +  2   -7.905013084412       -2.35       -1.52    1.0   56.6ms
    +  3   -7.905179023743       -3.78       -2.52    1.1   41.8ms
    +  4   -7.905212879181       -4.47       -2.83    2.6   52.1ms
    +  5   -7.905212402344   +   -6.32       -2.99    1.0   41.6ms
    +  6   -7.905210971832   +   -5.84       -4.55    1.0   41.7ms

    To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:

    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1021359 
    +    AtomicLocal         -2.1988492
    +    AtomicNonlocal      1.7295809 
    +    Ewald               -8.3978958
    +    PspCorrection       -0.2946220
    +    Hartree             0.5530618 
    +    Xc                  -2.3986230
    +
    +    total               -7.905210971832
    eltype(scfres.energies.total)
    Float32
    eltype(scfres.ρ)
    Float32
    Generic linear algebra routines

    For more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).

    • HLC2020M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549
    diff --git a/v0.6.17/examples/atomsbase.ipynb b/v0.6.17/examples/atomsbase.ipynb new file mode 100644 index 0000000000..dfd084c45f --- /dev/null +++ b/v0.6.17/examples/atomsbase.ipynb @@ -0,0 +1,301 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# AtomsBase integration" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "[AtomsBase.jl](https://github.com/JuliaMolSim/AtomsBase.jl) is a common interface\n", + "for representing atomic structures in Julia. DFTK directly supports using such\n", + "structures to run a calculation as is demonstrated here." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Feeding an AtomsBase AbstractSystem to DFTK\n", + "In this example we construct a silicon system using the `ase.build.bulk` routine\n", + "from the [atomistic simulation environment](https://wiki.fysik.dtu.dk/ase/index.html)\n", + "(ASE), which is exposed by [ASEconvert](https://github.com/mfherbst/ASEconvert.jl)\n", + "as an AtomsBase `AbstractSystem`." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Si₂, periodic = TTT):\n bounding_box : [ 0 2.715 2.715;\n 2.715 0 2.715;\n 2.715 2.715 0]u\"Å\"\n\n Atom(Si, [ 0, 0, 0]u\"Å\")\n Atom(Si, [ 1.3575, 1.3575, 1.3575]u\"Å\")\n\n \n \n \n \n Si \n \n Si \n \n \n \n \n" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "# Construct bulk system and convert to an AbstractSystem\n", + "using ASEconvert\n", + "system_ase = ase.build.bulk(\"Si\")\n", + "system = pyconvert(AbstractSystem, system_ase)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model,\n", + "discretise and solve:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921741235439 -0.69 5.9 225ms\n", + " 2 -7.926164689031 -2.35 -1.22 1.0 151ms\n", + " 3 -7.926838408655 -3.17 -2.37 1.9 193ms\n", + " 4 -7.926861186931 -4.64 -3.01 2.1 180ms\n", + " 5 -7.926861633294 -6.35 -3.33 2.0 179ms\n", + " 6 -7.926861662170 -7.54 -3.65 1.5 150ms\n", + " 7 -7.926861679474 -7.76 -4.17 1.0 141ms\n", + " 8 -7.926861681799 -8.63 -5.17 2.0 160ms\n", + " 9 -7.926861681864 -10.19 -5.25 3.2 185ms\n", + " 10 -7.926861681872 -11.07 -6.44 1.0 143ms\n", + " 11 -7.926861681873 -12.34 -6.77 3.2 196ms\n", + " 12 -7.926861681873 -15.05 -7.20 1.1 147ms\n", + " 13 -7.926861681873 -14.75 -8.22 1.8 157ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n", + "\n", + "model = model_LDA(system; temperature=1e-3)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\n", + "scfres = self_consistent_field(basis, tol=1e-8);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "If we did not want to use ASE we could of course use any other package\n", + "which yields an AbstractSystem object. This includes:" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Reading a system using AtomsIO" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921725807830 -0.69 6.0 203ms\n", + " 2 -7.926165187848 -2.35 -1.22 1.0 174ms\n", + " 3 -7.926838749087 -3.17 -2.37 1.9 170ms\n", + " 4 -7.926861220687 -4.65 -3.02 2.1 183ms\n", + " 5 -7.926861642423 -6.37 -3.36 1.8 167ms\n", + " 6 -7.926861666574 -7.62 -3.72 1.5 150ms\n", + " 7 -7.926861679246 -7.90 -4.14 1.2 148ms\n", + " 8 -7.926861681797 -8.59 -5.15 1.6 156ms\n", + " 9 -7.926861681861 -10.19 -5.21 3.4 188ms\n", + " 10 -7.926861681872 -10.97 -6.32 1.0 145ms\n", + " 11 -7.926861681873 -12.22 -6.71 2.8 182ms\n", + " 12 -7.926861681873 -14.15 -6.85 1.2 150ms\n", + " 13 -7.926861681873 + -15.05 -7.48 1.0 147ms\n", + " 14 -7.926861681873 -14.45 -7.87 2.1 167ms\n", + " 15 -7.926861681873 + -15.05 -9.30 1.4 149ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using AtomsIO\n", + "\n", + "# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),\n", + "# which directly yields an AbstractSystem.\n", + "system = load_system(\"Si.extxyz\")\n", + "\n", + "# Now run the LDA calculation:\n", + "system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n", + "model = model_LDA(system; temperature=1e-3)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\n", + "scfres = self_consistent_field(basis, tol=1e-8);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The same could be achieved using [ExtXYZ](https://github.com/libAtoms/ExtXYZ.jl)\n", + "by `system = Atoms(read_frame(\"Si.extxyz\"))`,\n", + "since the `ExtXYZ.Atoms` object is directly AtomsBase-compatible." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "### Directly setting up a system in AtomsBase" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921719064450 -0.69 5.9 280ms\n", + " 2 -7.926167879476 -2.35 -1.22 1.0 159ms\n", + " 3 -7.926842004318 -3.17 -2.37 1.9 186ms\n", + " 4 -7.926864621214 -4.65 -3.01 2.2 218ms\n", + " 5 -7.926865043749 -6.37 -3.32 1.9 172ms\n", + " 6 -7.926865073408 -7.53 -3.65 1.6 158ms\n", + " 7 -7.926865090785 -7.76 -4.19 1.1 151ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using AtomsBase\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "# Construct a system in the AtomsBase world\n", + "a = 10.26u\"bohr\" # Silicon lattice constant\n", + "lattice = a / 2 * [[0, 1, 1.], # Lattice as vector of vectors\n", + " [1, 0, 1.],\n", + " [1, 1, 0.]]\n", + "atoms = [:Si => ones(3)/8, :Si => -ones(3)/8]\n", + "system = periodic_system(atoms, lattice; fractional=true)\n", + "\n", + "# Now run the LDA calculation:\n", + "system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n", + "model = model_LDA(system; temperature=1e-3)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\n", + "scfres = self_consistent_field(basis, tol=1e-4);" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "## Obtaining an AbstractSystem from DFTK data" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "At any point we can also get back the DFTK model as an\n", + "AtomsBase-compatible `AbstractSystem`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Si₂, periodic = TTT):\n bounding_box : [ 0 5.13 5.13;\n 5.13 0 5.13;\n 5.13 5.13 0]u\"a₀\"\n\n Atom(Si, [ 1.2825, 1.2825, 1.2825]u\"a₀\")\n Atom(Si, [ -1.2825, -1.2825, -1.2825]u\"a₀\")\n\n \n \n \n \n Si \n \n Si \n \n \n \n \n" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "second_system = atomic_system(model)" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Similarly DFTK offers a method to the `atomic_system` and `periodic_system` functions\n", + "(from AtomsBase), which enable a seamless conversion of the usual data structures for\n", + "setting up DFTK calculations into an `AbstractSystem`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Si₂, periodic = TTT):\n bounding_box : [ 0 5.13155 5.13155;\n 5.13155 0 5.13155;\n 5.13155 5.13155 0]u\"a₀\"\n\n Atom(Si, [ 1.28289, 1.28289, 1.28289]u\"a₀\")\n Atom(Si, [-1.28289, -1.28289, -1.28289]u\"a₀\")\n\n \n \n \n \n Si \n \n Si \n \n \n \n \n" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "lattice = 5.431u\"Å\" / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]];\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "third_system = atomic_system(lattice, atoms, positions)" + ], + "metadata": {}, + "execution_count": 7 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/atomsbase/index.html b/v0.6.17/examples/atomsbase/index.html new file mode 100644 index 0000000000..2c85a30b0e --- /dev/null +++ b/v0.6.17/examples/atomsbase/index.html @@ -0,0 +1,138 @@ + +AtomsBase integration · DFTK.jl

    AtomsBase integration

    AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.

    using DFTK

    Feeding an AtomsBase AbstractSystem to DFTK

    In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.

    # Construct bulk system and convert to an AbstractSystem
    +using ASEconvert
    +system_ase = ase.build.bulk("Si")
    +system = pyconvert(AbstractSystem, system_ase)
    FlexibleSystem(Si₂, periodic = TTT):
    +    bounding_box      : [       0    2.715    2.715;
    +                            2.715        0    2.715;
    +                            2.715    2.715        0]u"Å"
    +
    +    Atom(Si, [       0,        0,        0]u"Å")
    +    Atom(Si, [  1.3575,   1.3575,   1.3575]u"Å")
    +
    +                       
    +                       
    +                       
    +                       
    +              Si       
    +                       
    +          Si           
    +                       
    +                       
    +                       
    +                       
    +

    To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model, discretise and solve:

    system = attach_psp(system; Si="hgh/lda/si-q4")
    +
    +model  = model_LDA(system; temperature=1e-3)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
    +scfres = self_consistent_field(basis, tol=1e-8);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.921714165181                   -0.69    6.0    202ms
    +  2   -7.926163177818       -2.35       -1.22    1.0    151ms
    +  3   -7.926838538885       -3.17       -2.37    2.0    195ms
    +  4   -7.926861233104       -4.64       -3.02    1.9    175ms
    +  5   -7.926861639218       -6.39       -3.35    1.9    161ms
    +  6   -7.926861664580       -7.60       -3.69    1.6    151ms
    +  7   -7.926861679303       -7.83       -4.15    1.0    150ms
    +  8   -7.926861681792       -8.60       -5.12    1.6    208ms
    +  9   -7.926861681856      -10.19       -5.14    3.1    194ms
    + 10   -7.926861681872      -10.81       -6.21    1.0    147ms
    + 11   -7.926861681873      -12.14       -6.62    2.5    186ms
    + 12   -7.926861681873      -14.10       -7.30    1.4    155ms
    + 13   -7.926861681873   +  -14.75       -7.81    2.1    184ms
    + 14   -7.926861681873   +  -14.75       -8.35    2.5    181ms

    If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:

    Reading a system using AtomsIO

    using AtomsIO
    +
    +# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),
    +# which directly yields an AbstractSystem.
    +system = load_system("Si.extxyz")
    +
    +# Now run the LDA calculation:
    +system = attach_psp(system; Si="hgh/lda/si-q4")
    +model  = model_LDA(system; temperature=1e-3)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
    +scfres = self_consistent_field(basis, tol=1e-8);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.921730203583                   -0.69    5.9    218ms
    +  2   -7.926163775903       -2.35       -1.22    1.0    155ms
    +  3   -7.926838799034       -3.17       -2.37    1.9    228ms
    +  4   -7.926861206870       -4.65       -3.04    2.2    190ms
    +  5   -7.926861651413       -6.35       -3.40    1.9    168ms
    +  6   -7.926861670311       -7.72       -3.80    1.6    158ms
    +  7   -7.926861678552       -8.08       -4.07    1.4    151ms
    +  8   -7.926861681794       -8.49       -5.01    1.1    165ms
    +  9   -7.926861681858      -10.20       -5.19    2.5    217ms
    + 10   -7.926861681872      -10.85       -6.34    1.0    147ms
    + 11   -7.926861681873      -12.03       -6.49    3.1    202ms
    + 12   -7.926861681873   +  -14.35       -6.43    1.0    150ms
    + 13   -7.926861681873      -14.15       -7.55    1.0    154ms
    + 14   -7.926861681873   +    -Inf       -7.63    2.5    180ms
    + 15   -7.926861681873   +  -14.57       -8.48    1.0    179ms

    The same could be achieved using ExtXYZ by system = Atoms(read_frame("Si.extxyz")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.

    Directly setting up a system in AtomsBase

    using AtomsBase
    +using Unitful
    +using UnitfulAtomic
    +
    +# Construct a system in the AtomsBase world
    +a = 10.26u"bohr"  # Silicon lattice constant
    +lattice = a / 2 * [[0, 1, 1.],  # Lattice as vector of vectors
    +                   [1, 0, 1.],
    +                   [1, 1, 0.]]
    +atoms  = [:Si => ones(3)/8, :Si => -ones(3)/8]
    +system = periodic_system(atoms, lattice; fractional=true)
    +
    +# Now run the LDA calculation:
    +system = attach_psp(system; Si="hgh/lda/si-q4")
    +model  = model_LDA(system; temperature=1e-3)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])
    +scfres = self_consistent_field(basis, tol=1e-4);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.921713940923                   -0.69    5.9    271ms
    +  2   -7.926164973705       -2.35       -1.22    1.0    187ms
    +  3   -7.926841729201       -3.17       -2.37    1.9    197ms
    +  4   -7.926864609318       -4.64       -3.03    2.1    251ms
    +  5   -7.926865054582       -6.35       -3.36    2.0    183ms
    +  6   -7.926865077477       -7.64       -3.72    1.6    163ms
    +  7   -7.926865090171       -7.90       -4.11    1.1    152ms

    Obtaining an AbstractSystem from DFTK data

    At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:

    second_system = atomic_system(model)
    FlexibleSystem(Si₂, periodic = TTT):
    +    bounding_box      : [       0     5.13     5.13;
    +                             5.13        0     5.13;
    +                             5.13     5.13        0]u"a₀"
    +
    +    Atom(Si, [  1.2825,   1.2825,   1.2825]u"a₀")
    +    Atom(Si, [ -1.2825,  -1.2825,  -1.2825]u"a₀")
    +
    +                       
    +                       
    +                       
    +                       
    +              Si       
    +                       
    +          Si           
    +                       
    +                       
    +                       
    +                       
    +

    Similarly DFTK offers a method to the atomic_system and periodic_system functions (from AtomsBase), which enable a seamless conversion of the usual data structures for setting up DFTK calculations into an AbstractSystem:

    lattice = 5.431u"Å" / 2 * [[0 1 1.];
    +                           [1 0 1.];
    +                           [1 1 0.]];
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +third_system = atomic_system(lattice, atoms, positions)
    FlexibleSystem(Si₂, periodic = TTT):
    +    bounding_box      : [       0  5.13155  5.13155;
    +                          5.13155        0  5.13155;
    +                          5.13155  5.13155        0]u"a₀"
    +
    +    Atom(Si, [ 1.28289,  1.28289,  1.28289]u"a₀")
    +    Atom(Si, [-1.28289, -1.28289, -1.28289]u"a₀")
    +
    +                       
    +                       
    +                       
    +                       
    +              Si       
    +                       
    +          Si           
    +                       
    +                       
    +                       
    +                       
    +
    diff --git a/v0.6.17/examples/cohen_bergstresser.ipynb b/v0.6.17/examples/cohen_bergstresser.ipynb new file mode 100644 index 0000000000..6918baae16 --- /dev/null +++ b/v0.6.17/examples/cohen_bergstresser.ipynb @@ -0,0 +1,568 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Cohen-Bergstresser model\n", + "\n", + "This example considers the Cohen-Bergstresser model[^CB1966],\n", + "reproducing the results of the original paper. This model is particularly\n", + "simple since its linear nature allows one to get away without any\n", + "self-consistent field calculation.\n", + "\n", + "[^CB1966]: M. L. Cohen and T. K. Bergstresser Phys. Rev. **141**, 789 (1966) DOI [10.1103/PhysRev.141.789](https://doi.org/10.1103/PhysRev.141.789)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We build the lattice using the tabulated lattice constant from the original paper,\n", + "stored in DFTK:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "Si = ElementCohenBergstresser(:Si)\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "lattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Next we build the rather simple model and discretize it with moderate `Ecut`:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\n", + "basis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We diagonalise at the Gamma point to find a Fermi level …" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.40173105002163256" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "ham = Hamiltonian(basis)\n", + "eigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)\n", + "εF = DFTK.compute_occupation(basis, eigres.λ).εF" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "… and compute and plot 8 bands:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Discarding DFTK-specific details for element type ElementCohenBergstresser (i.e. this element is treated as a ElementCoulomb).\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/external/atomsbase.jl:100\n", + "┌ Warning: Discarding DFTK-specific details for element type ElementCohenBergstresser (i.e. this element is treated as a ElementCoulomb).\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/external/atomsbase.jl:100\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=18}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "using Unitful\n", + "\n", + "bands = compute_bands(basis; n_bands=8, εF, kline_density=10)\n", + "p = plot_bandstructure(bands; unit=u\"eV\")\n", + "ylims!(p, (-5, 6))" + ], + "metadata": {}, + "execution_count": 4 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/cohen_bergstresser/bd6318a6.svg b/v0.6.17/examples/cohen_bergstresser/bd6318a6.svg new file mode 100644 index 0000000000..348fc5861d --- /dev/null +++ b/v0.6.17/examples/cohen_bergstresser/bd6318a6.svg @@ -0,0 +1,212 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/cohen_bergstresser/index.html b/v0.6.17/examples/cohen_bergstresser/index.html new file mode 100644 index 0000000000..b5c6c9e6fb --- /dev/null +++ b/v0.6.17/examples/cohen_bergstresser/index.html @@ -0,0 +1,15 @@ + +Cohen-Bergstresser model · DFTK.jl

    Cohen-Bergstresser model

    This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.

    We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:

    using DFTK
    +
    +Si = ElementCohenBergstresser(:Si)
    +atoms = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +lattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];

    Next we build the rather simple model and discretize it with moderate Ecut:

    model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])
    +basis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));

    We diagonalise at the Gamma point to find a Fermi level …

    ham = Hamiltonian(basis)
    +eigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)
    +εF = DFTK.compute_occupation(basis, eigres.λ).εF
    0.4017310500217348

    … and compute and plot 8 bands:

    using Plots
    +using Unitful
    +
    +bands = compute_bands(basis; n_bands=8, εF, kline_density=10)
    +p = plot_bandstructure(bands; unit=u"eV")
    +ylims!(p, (-5, 6))
    Example block output
    diff --git a/v0.6.17/examples/collinear_magnetism.ipynb b/v0.6.17/examples/collinear_magnetism.ipynb new file mode 100644 index 0000000000..83f941043a --- /dev/null +++ b/v0.6.17/examples/collinear_magnetism.ipynb @@ -0,0 +1,1687 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Collinear spin and magnetic systems\n", + "\n", + "In this example we consider iron in the BCC phase.\n", + "To show that this material is ferromagnetic we will model it once\n", + "allowing collinear spin polarization and once without\n", + "and compare the resulting SCF energies. In particular\n", + "the ground state can only be found if collinear spins are allowed.\n", + "\n", + "First we setup BCC iron without spin polarization\n", + "using a single iron atom inside the unit cell." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "a = 5.42352 # Bohr\n", + "lattice = a / 2 * [[-1 1 1];\n", + " [ 1 -1 1];\n", + " [ 1 1 -1]]\n", + "atoms = [ElementPsp(:Fe; psp=load_psp(\"hgh/lda/Fe-q8.hgh\"))]\n", + "positions = [zeros(3)];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "To get the ground-state energy we use an LDA model and rather moderate\n", + "discretisation parameters." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -16.65007848439 -0.48 5.2 114ms\n", + " 2 -16.65071323156 -3.20 -1.01 1.0 2.31s\n", + " 3 -16.65081655099 -3.99 -2.31 1.8 19.5ms\n", + " 4 -16.65082425905 -5.11 -2.85 1.8 19.7ms\n", + " 5 -16.65082465545 -6.40 -3.38 1.8 19.4ms\n", + " 6 -16.65082469448 -7.41 -4.00 1.8 32.6ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "kgrid = [3, 3, 3] # k-point grid (Regular Monkhorst-Pack grid)\n", + "Ecut = 15 # kinetic energy cutoff in Hartree\n", + "model_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)\n", + "basis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)\n", + "\n", + "scfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 15.9205199\n AtomicLocal -5.0691442\n AtomicNonlocal -5.2200508\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.7792917 \n Xc -3.4467326\n Entropy -0.0182878\n\n total -16.650824694481" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "scfres_nospin.energies" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Since we did not specify any initial magnetic moment on the iron atom,\n", + "DFTK will automatically assume that a calculation with only spin-paired\n", + "electrons should be performed. As a result the obtained ground state\n", + "features no spin-polarization." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Now we repeat the calculation, but give the iron atom an initial magnetic moment.\n", + "For specifying the magnetic moment pass the desired excess of spin-up over spin-down\n", + "electrons at each centre to the `Model` and the guess density functions.\n", + "In this case we seek the state with as many spin-parallel\n", + "$d$-electrons as possible. In our pseudopotential model the 8 valence\n", + "electrons are 2 pair of $s$-electrons, 1 pair of $d$-electrons\n", + "and 4 unpaired $d$-electrons giving a desired magnetic moment of `4` at the iron centre.\n", + "The structure (i.e. pair mapping and order) of the `magnetic_moments` array needs to agree\n", + "with the `atoms` array and `0` magnetic moments need to be specified as well." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "magnetic_moments = [4];" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! tip \"Units of the magnetisation and magnetic moments in DFTK\"\n", + " Unlike all other quantities magnetisation and magnetic moments in DFTK\n", + " are given in units of the Bohr magneton $μ_B$, which in atomic units has the\n", + " value $\\frac{1}{2}$. Since $μ_B$ is (roughly) the magnetic moment of\n", + " a single electron the advantage is that one can directly think of these\n", + " quantities as the excess of spin-up electrons or spin-up electron density.\n", + "\n", + "We repeat the calculation using the same model as before. DFTK now detects\n", + "the non-zero moment and switches to a collinear calculation." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", + "--- --------------- --------- --------- ------ ---- ------\n", + " 1 -16.66166922330 -0.51 2.618 5.0 59.9ms\n", + " 2 -16.66823096659 -2.18 -1.09 2.445 1.5 1.47s\n", + " 3 -16.66905750640 -3.08 -2.07 2.340 2.0 40.2ms\n", + " 4 -16.66909859976 -4.39 -2.61 2.304 1.4 47.0ms\n", + " 5 -16.66910265664 -5.39 -2.95 2.297 1.8 38.2ms\n", + " 6 -16.66910410252 -5.84 -3.49 2.288 1.5 37.2ms\n", + " 7 -16.66910417162 -7.16 -3.82 2.286 2.0 49.9ms\n", + " 8 -16.66910417418 -8.59 -4.30 2.286 1.6 37.7ms\n", + " 9 -16.66910417506 -9.06 -4.82 2.286 1.1 34.8ms\n", + " 10 -16.66910417511 -10.31 -5.21 2.286 1.9 42.1ms\n", + " 11 -16.66910417508 + -10.56 -5.72 2.286 2.0 41.9ms\n", + " 12 -16.66910417509 -11.02 -6.07 2.286 1.2 37.2ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "ρ0 = guess_density(basis, magnetic_moments)\n", + "scfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 16.2947226\n AtomicLocal -5.2227278\n AtomicNonlocal -5.4100297\n Ewald -21.4723040\n PspCorrection 1.8758831 \n Hartree 0.8191967 \n Xc -3.5406838\n Entropy -0.0131612\n\n total -16.669104175091" + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Model and magnetic moments\"\n", + " DFTK does not store the `magnetic_moments` inside the `Model`, but only uses them\n", + " to determine the lattice symmetries. This step was taken to keep `Model`\n", + " (which contains the physical model) independent of the details of the numerical details\n", + " such as the initial guess for the spin density.\n", + "\n", + "In direct comparison we notice the first, spin-paired calculation to be\n", + "a little higher in energy" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No magnetization: -16.65082469448123\n", + "Magnetic case: -16.669104175090705\n", + "Difference: -0.018279480609475485\n" + ] + } + ], + "cell_type": "code", + "source": [ + "println(\"No magnetization: \", scfres_nospin.energies.total)\n", + "println(\"Magnetic case: \", scfres.energies.total)\n", + "println(\"Difference: \", scfres.energies.total - scfres_nospin.energies.total);" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Notice that with the small cutoffs we use to generate the online\n", + "documentation the calculation is far from converged.\n", + "With more realistic parameters a larger energy difference of about\n", + "0.1 Hartree is obtained." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The spin polarization in the magnetic case is visible if we\n", + "consider the occupation of the spin-up and spin-down Kohn-Sham orbitals.\n", + "Especially for the $d$-orbitals these differ rather drastically.\n", + "For example for the first $k$-point:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(scfres.occupation[iup])[1:7] = [1.0, 0.9999987814469476, 0.9999987814469476, 0.9999987814469476, 0.9582255340041533, 0.95822553400415, 1.1265705375862129e-29]\n", + "(scfres.occupation[idown])[1:7] = [1.0, 0.8438901858440638, 0.8438901858440594, 0.8438901858439029, 8.140639900953089e-6, 8.140639900951383e-6, 1.6227064617025384e-32]\n" + ] + } + ], + "cell_type": "code", + "source": [ + "iup = 1\n", + "idown = iup + length(scfres.basis.kpoints) ÷ 2\n", + "@show scfres.occupation[iup][1:7]\n", + "@show scfres.occupation[idown][1:7];" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Similarly the eigenvalues differ" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "(scfres.eigenvalues[iup])[1:7] = [-0.06935861276197537, 0.3568854591724482, 0.35688545917244824, 0.3568854591724482, 0.46173593244006994, 0.4617359324400707, 1.1596218072576088]\n", + "(scfres.eigenvalues[idown])[1:7] = [-0.0312573948110278, 0.4761892844637887, 0.47618928446378905, 0.47618928446380093, 0.6102502475290706, 0.6102502475290728, 1.2250501868963677]\n" + ] + } + ], + "cell_type": "code", + "source": [ + "@show scfres.eigenvalues[iup][1:7]\n", + "@show scfres.eigenvalues[idown][1:7];" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"$k$-points in collinear calculations\"\n", + " For collinear calculations the `kpoints` field of the `PlaneWaveBasis` object contains\n", + " each $k$-point coordinate twice, once associated with spin-up and once with down-down.\n", + " The list first contains all spin-up $k$-points and then all spin-down $k$-points,\n", + " such that `iup` and `idown` index the same $k$-point, but differing spins." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can observe the spin-polarization by looking at the density of states (DOS)\n", + "around the Fermi level, where the spin-up and spin-down DOS differ." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=3}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "bands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6)) # Increase kgrid to get nicer DOS.\n", + "plot_dos(bands_666)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Note that if same k-grid as SCF should be employed, a simple `plot_dos(scfres)`\n", + "is sufficient." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Similarly the band structure shows clear differences between both spin components." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=98}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "using Unitful\n", + "using UnitfulAtomic\n", + "bands_kpath = compute_bands(scfres; kline_density=6)\n", + "plot_bandstructure(bands_kpath)" + ], + "metadata": {}, + "execution_count": 11 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/collinear_magnetism/2f71a378.svg b/v0.6.17/examples/collinear_magnetism/2f71a378.svg new file mode 100644 index 0000000000..958afb5647 --- /dev/null +++ b/v0.6.17/examples/collinear_magnetism/2f71a378.svg @@ -0,0 +1,593 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/collinear_magnetism/5ffa70f8.svg b/v0.6.17/examples/collinear_magnetism/5ffa70f8.svg new file mode 100644 index 0000000000..8144541404 --- /dev/null +++ b/v0.6.17/examples/collinear_magnetism/5ffa70f8.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/collinear_magnetism/index.html b/v0.6.17/examples/collinear_magnetism/index.html new file mode 100644 index 0000000000..74dee8dbe6 --- /dev/null +++ b/v0.6.17/examples/collinear_magnetism/index.html @@ -0,0 +1,73 @@ + +Collinear spin and magnetic systems · DFTK.jl

    Collinear spin and magnetic systems

    In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.

    First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.

    using DFTK
    +
    +a = 5.42352  # Bohr
    +lattice = a / 2 * [[-1  1  1];
    +                   [ 1 -1  1];
    +                   [ 1  1 -1]]
    +atoms     = [ElementPsp(:Fe; psp=load_psp("hgh/lda/Fe-q8.hgh"))]
    +positions = [zeros(3)];

    To get the ground-state energy we use an LDA model and rather moderate discretisation parameters.

    kgrid = [3, 3, 3]  # k-point grid (Regular Monkhorst-Pack grid)
    +Ecut = 15          # kinetic energy cutoff in Hartree
    +model_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)
    +basis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)
    +
    +scfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -16.65008916079                   -0.48    5.8   33.4ms
    +  2   -16.65071456378       -3.20       -1.01    1.0   17.5ms
    +  3   -16.65081611198       -3.99       -2.31    1.5   18.9ms
    +  4   -16.65082425860       -5.09       -2.86    1.8   19.9ms
    +  5   -16.65082464292       -6.42       -3.39    1.8   19.1ms
    +  6   -16.65082469282       -7.30       -3.99    1.8   19.9ms
    +  7   -16.65082469742       -8.34       -4.41    1.5   19.2ms
    scfres_nospin.energies
    Energy breakdown (in Ha):
    +    Kinetic             15.9208610
    +    AtomicLocal         -5.0693362
    +    AtomicNonlocal      -5.2202375
    +    Ewald               -21.4723040
    +    PspCorrection       1.8758831 
    +    Hartree             0.7793483 
    +    Xc                  -3.4467513
    +    Entropy             -0.0182879
    +
    +    total               -16.650824697420

    Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.

    Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel $d$-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of $s$-electrons, 1 pair of $d$-electrons and 4 unpaired $d$-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.

    magnetic_moments = [4];
    Units of the magnetisation and magnetic moments in DFTK

    Unlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton $μ_B$, which in atomic units has the value $\frac{1}{2}$. Since $μ_B$ is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.

    We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.

    model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +ρ0 = guess_density(basis, magnetic_moments)
    +scfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -16.66165800881                   -0.51    2.618    5.5   61.2ms
    +  2   -16.66827990348       -2.18       -1.09    2.445    1.5   36.4ms
    +  3   -16.66905831002       -3.11       -2.08    2.342    2.0   59.9ms
    +  4   -16.66909769978       -4.40       -2.55    2.305    1.1   34.4ms
    +  5   -16.66910281720       -5.29       -2.97    2.296    1.9   39.3ms
    +  6   -16.66910411649       -5.89       -3.58    2.288    1.9   39.5ms
    +  7   -16.66910417123       -7.26       -3.92    2.286    1.8   40.0ms
    +  8   -16.66910417436       -8.50       -4.29    2.286    1.2   36.1ms
    +  9   -16.66910417498       -9.21       -4.81    2.286    1.2   35.9ms
    + 10   -16.66910417507      -10.05       -5.32    2.286    1.9   40.5ms
    + 11   -16.66910417508      -10.97       -5.67    2.286    1.5   38.2ms
    + 12   -16.66910417509      -11.16       -6.34    2.286    1.4   38.0ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.2947160
    +    AtomicLocal         -5.2227241
    +    AtomicNonlocal      -5.4100262
    +    Ewald               -21.4723040
    +    PspCorrection       1.8758831 
    +    Hartree             0.8191956 
    +    Xc                  -3.5406833
    +    Entropy             -0.0131612
    +
    +    total               -16.669104175087
    Model and magnetic moments

    DFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.

    In direct comparison we notice the first, spin-paired calculation to be a little higher in energy

    println("No magnetization: ", scfres_nospin.energies.total)
    +println("Magnetic case:    ", scfres.energies.total)
    +println("Difference:       ", scfres.energies.total - scfres_nospin.energies.total);
    No magnetization: -16.65082469742012
    +Magnetic case:    -16.669104175086716
    +Difference:       -0.018279477666595767

    Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.

    The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the $d$-orbitals these differ rather drastically. For example for the first $k$-point:

    iup   = 1
    +idown = iup + length(scfres.basis.kpoints) ÷ 2
    +@show scfres.occupation[iup][1:7]
    +@show scfres.occupation[idown][1:7];
    (scfres.occupation[iup])[1:7] = [1.0, 0.9999987814415837, 0.9999987814415837, 0.9999987814415837, 0.9582253547889279, 0.9582253547889228, 1.1267136340347059e-29]
    +(scfres.occupation[idown])[1:7] = [1.0, 0.8438926614919571, 0.8438926614918533, 0.8438926614916749, 8.14080033880549e-6, 8.140800338798171e-6, 1.6176034855113481e-32]

    Similarly the eigenvalues differ

    @show scfres.eigenvalues[iup][1:7]
    +@show scfres.eigenvalues[idown][1:7];
    (scfres.eigenvalues[iup])[1:7] = [-0.06935851851954129, 0.3568856652537432, 0.35688566525375426, 0.3568856652537592, 0.46173613927349805, 0.4617361392734993, 1.159620699205651]
    +(scfres.eigenvalues[idown])[1:7] = [-0.03125751557798618, 0.47618925860526695, 0.47618925860527483, 0.4761892586052884, 0.610250212509378, 0.610250212509387, 1.2250818458249406]
    ``k``-points in collinear calculations

    For collinear calculations the kpoints field of the PlaneWaveBasis object contains each $k$-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up $k$-points and then all spin-down $k$-points, such that iup and idown index the same $k$-point, but differing spins.

    We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.

    using Plots
    +bands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6))  # Increase kgrid to get nicer DOS.
    +plot_dos(bands_666)
    Example block output

    Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.

    Similarly the band structure shows clear differences between both spin components.

    using Unitful
    +using UnitfulAtomic
    +bands_kpath = compute_bands(scfres; kline_density=6)
    +plot_bandstructure(bands_kpath)
    Example block output
    diff --git a/v0.6.17/examples/compare_solvers.ipynb b/v0.6.17/examples/compare_solvers.ipynb new file mode 100644 index 0000000000..3b43fd118b --- /dev/null +++ b/v0.6.17/examples/compare_solvers.ipynb @@ -0,0 +1,308 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Comparison of DFT solvers" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We compare four different approaches for solving the DFT minimisation problem,\n", + "namely a density-based SCF, a potential-based SCF, direct minimisation and Newton." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "First we setup our problem" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.0e-6" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "\n", + "a = 10.26 # Silicon lattice constant in Bohr\n", + "lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "model = model_LDA(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])\n", + "\n", + "# Convergence we desire in the density\n", + "tol = 1e-6" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Density-based self-consistent field" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.847727350622 -0.70 4.5 28.7ms\n", + " 2 -7.852399974528 -2.33 -1.53 1.0 17.0ms\n", + " 3 -7.852609612559 -3.68 -2.54 1.2 17.4ms\n", + " 4 -7.852645445696 -4.45 -2.77 2.5 48.0ms\n", + " 5 -7.852646084943 -6.19 -2.87 1.0 17.5ms\n", + " 6 -7.852646665599 -6.24 -3.83 1.0 17.7ms\n", + " 7 -7.852646684886 -7.71 -4.66 1.5 19.4ms\n", + " 8 -7.852646686679 -8.75 -5.01 1.8 20.6ms\n", + " 9 -7.852646686705 -10.58 -5.13 1.2 18.6ms\n", + " 10 -7.852646686727 -10.66 -5.58 1.0 17.9ms\n", + " 11 -7.852646686730 -11.54 -6.16 1.2 18.5ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_scf = self_consistent_field(basis; tol);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "## Potential-based SCF" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) α Diag Δtime\n", + "--- --------------- --------- --------- ---- ---- ------\n", + " 1 -7.847752665561 -0.70 4.5 401ms\n", + " 2 -7.852562076064 -2.32 -1.62 0.80 2.2 2.30s\n", + " 3 -7.852641328256 -4.10 -2.70 0.80 1.0 227ms\n", + " 4 -7.852646511100 -5.29 -3.40 0.80 1.8 18.8ms\n", + " 5 -7.852646681980 -6.77 -4.43 0.80 2.0 18.8ms\n", + " 6 -7.852646686627 -8.33 -4.91 0.80 2.2 20.7ms\n", + " 7 -7.852646686726 -10.01 -5.55 0.80 1.2 16.4ms\n", + " 8 -7.852646686730 -11.45 -6.72 0.80 1.8 17.9ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_scfv = DFTK.scf_potential_mixing(basis; tol);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "## Direct minimization\n", + "Note: Unlike the other algorithms, tolerance for this one is in the energy,\n", + "thus we square the density tolerance value to be roughly equivalent." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +1.348191839589 -1.05 4.61s\n", + " 2 -1.431696375520 0.44 -0.65 105ms\n", + " 3 -3.656713203952 0.35 -0.43 32.7ms\n", + " 4 -4.847730875617 0.08 -0.56 32.7ms\n", + " 5 -6.572732137641 0.24 -0.70 32.7ms\n", + " 6 -7.335425628804 -0.12 -1.06 32.7ms\n", + " 7 -7.608493007253 -0.56 -1.44 24.6ms\n", + " 8 -7.714953683312 -0.97 -1.92 24.7ms\n", + " 9 -7.743786113871 -1.54 -1.84 24.6ms\n", + " 10 -7.775443711426 -1.50 -2.16 24.7ms\n", + " 11 -7.798934401337 -1.63 -2.14 24.7ms\n", + " 12 -7.817784447370 -1.72 -2.14 24.7ms\n", + " 13 -7.835645758700 -1.75 -2.24 24.8ms\n", + " 14 -7.847399932752 -1.93 -2.27 24.7ms\n", + " 15 -7.850262882215 -2.54 -3.12 25.6ms\n", + " 16 -7.851992700991 -2.76 -2.88 24.7ms\n", + " 17 -7.852441353884 -3.35 -3.66 24.6ms\n", + " 18 -7.852576344133 -3.87 -3.56 24.7ms\n", + " 19 -7.852622597943 -4.33 -3.84 24.6ms\n", + " 20 -7.852637924201 -4.81 -4.16 24.6ms\n", + " 21 -7.852643681106 -5.24 -4.45 24.7ms\n", + " 22 -7.852645748566 -5.68 -4.52 24.6ms\n", + " 23 -7.852646295981 -6.26 -5.29 24.6ms\n", + " 24 -7.852646523503 -6.64 -4.99 24.7ms\n", + " 25 -7.852646604282 -7.09 -5.47 24.7ms\n", + " 26 -7.852646647516 -7.36 -5.42 24.8ms\n", + " 27 -7.852646673146 -7.59 -5.76 24.6ms\n", + " 28 -7.852646681839 -8.06 -6.55 24.6ms\n", + " 29 -7.852646685347 -8.45 -6.32 24.6ms\n", + " 30 -7.852646686371 -8.99 -6.29 50.9ms\n", + " 31 -7.852646686607 -9.63 -6.96 25.3ms\n", + " 32 -7.852646686693 -10.07 -6.88 24.9ms\n", + " 33 -7.852646686717 -10.61 -7.11 31.6ms\n", + " 34 -7.852646686726 -11.09 -7.28 25.0ms\n", + " 35 -7.852646686728 -11.54 -7.64 24.8ms\n", + " 36 -7.852646686729 -12.05 -7.99 24.7ms\n", + " 37 -7.852646686730 -12.44 -8.16 24.8ms\n", + " 38 -7.852646686730 -12.85 -8.55 24.7ms\n", + " 39 -7.852646686730 -13.37 -8.79 24.7ms\n", + " 40 -7.852646686730 -13.88 -8.87 24.6ms\n", + " 41 -7.852646686730 -14.57 -9.40 24.6ms\n", + " 42 -7.852646686730 -14.57 -9.20 24.6ms\n", + " 43 -7.852646686730 -15.05 -9.12 97.5ms\n", + " 44 -7.852646686730 + -Inf -8.78 41.1ms\n", + " 45 -7.852646686730 + -Inf -9.54 89.0ms\n", + "┌ Warning: DM not converged.\n", + "└ @ DFTK ~/work/DFTK.jl/DFTK.jl/src/scf/scf_callbacks.jl:60\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_dm = direct_minimization(basis; tol=tol^2);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "## Newton algorithm" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Start not too far from the solution to ensure convergence:\n", + "We run first a very crude SCF to get close and then switch to Newton." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.847728572261 -0.70 4.8 34.8ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres_start = self_consistent_field(basis; tol=0.5);" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Remove the virtual orbitals (which Newton cannot treat yet)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 -7.852645821338 -1.63 13.6s\n", + " 2 -7.852646686730 -6.06 -3.69 3.60s\n", + " 3 -7.852646686730 -13.16 -7.18 126ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ\n", + "scfres_newton = newton(basis, ψ; tol);" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "## Comparison of results" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "|ρ_newton - ρ_scf| = 7.786126011006329e-7\n", + "|ρ_newton - ρ_scfv| = 4.813174774539961e-7\n", + "|ρ_newton - ρ_dm| = 1.1456275422720287e-9\n" + ] + } + ], + "cell_type": "code", + "source": [ + "println(\"|ρ_newton - ρ_scf| = \", norm(scfres_newton.ρ - scfres_scf.ρ))\n", + "println(\"|ρ_newton - ρ_scfv| = \", norm(scfres_newton.ρ - scfres_scfv.ρ))\n", + "println(\"|ρ_newton - ρ_dm| = \", norm(scfres_newton.ρ - scfres_dm.ρ))" + ], + "metadata": {}, + "execution_count": 7 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/compare_solvers/index.html b/v0.6.17/examples/compare_solvers/index.html new file mode 100644 index 0000000000..cc30d69ede --- /dev/null +++ b/v0.6.17/examples/compare_solvers/index.html @@ -0,0 +1,95 @@ + +Comparison of DFT solvers · DFTK.jl

    Comparison of DFT solvers

    We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.

    First we setup our problem

    using DFTK
    +using LinearAlgebra
    +
    +a = 10.26  # Silicon lattice constant in Bohr
    +lattice = a / 2 * [[0 1 1.];
    +                   [1 0 1.];
    +                   [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +model = model_LDA(lattice, atoms, positions)
    +basis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])
    +
    +# Convergence we desire in the density
    +tol = 1e-6
    1.0e-6

    Density-based self-consistent field

    scfres_scf = self_consistent_field(basis; tol);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.847778215037                   -0.70    4.8   30.1ms
    +  2   -7.852410733995       -2.33       -1.53    1.0   17.3ms
    +  3   -7.852610437714       -3.70       -2.54    1.0   17.0ms
    +  4   -7.852645471534       -4.46       -2.78    2.2   21.6ms
    +  5   -7.852646078009       -6.22       -2.87    1.0   17.8ms
    +  6   -7.852646666993       -6.23       -3.84    1.0   20.4ms
    +  7   -7.852646684896       -7.75       -4.53    1.5   19.0ms
    +  8   -7.852646686675       -8.75       -5.02    1.5   19.1ms
    +  9   -7.852646686724      -10.31       -5.73    1.0   17.4ms
    + 10   -7.852646686729      -11.28       -5.73    1.8   20.8ms
    + 11   -7.852646686730      -12.03       -6.13    1.0   17.3ms

    Potential-based SCF

    scfres_scfv = DFTK.scf_potential_mixing(basis; tol);
    n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ----   ------
    +  1   -7.847758456653                   -0.70           4.5   29.3ms
    +  2   -7.852562201400       -2.32       -1.62   0.80    2.2   20.7ms
    +  3   -7.852641242857       -4.10       -2.70   0.80    1.0   16.0ms
    +  4   -7.852646519213       -5.28       -3.37   0.80    1.8   19.2ms
    +  5   -7.852646678000       -6.80       -4.33   0.80    2.0   19.3ms
    +  6   -7.852646686602       -8.07       -4.77   0.80    2.2   21.6ms
    +  7   -7.852646686725       -9.91       -5.50   0.80    1.2   16.9ms
    +  8   -7.852646686729      -11.31       -6.75   0.80    1.8   19.1ms

    Direct minimization

    Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.

    scfres_dm = direct_minimization(basis; tol=tol^2);
    n     Energy            log10(ΔE)   log10(Δρ)   Δtime
    +---   ---------------   ---------   ---------   ------
    +  1   +1.150298549169                   -1.04   45.1ms
    +  2   -1.652761237842        0.45       -0.63   25.2ms
    +  3   -3.744571444365        0.32       -0.45   32.9ms
    +  4   -4.974150044835        0.09       -0.59   32.9ms
    +  5   -6.618696655164        0.22       -0.74   32.7ms
    +  6   -7.243611582008       -0.20       -1.21   32.8ms
    +  7   -7.489961741391       -0.61       -1.46   24.6ms
    +  8   -7.643902061015       -0.81       -1.86   24.6ms
    +  9   -7.728928504029       -1.07       -1.78   24.7ms
    + 10   -7.783520481536       -1.26       -1.89   24.8ms
    + 11   -7.816674059642       -1.48       -1.96   24.7ms
    + 12   -7.840330289882       -1.63       -2.16   24.7ms
    + 13   -7.848719818518       -2.08       -2.56   25.0ms
    + 14   -7.851167960889       -2.61       -3.18   24.8ms
    + 15   -7.852129522566       -3.02       -3.41   24.6ms
    + 16   -7.852496726776       -3.44       -3.63   24.9ms
    + 17   -7.852614858391       -3.93       -3.80   24.9ms
    + 18   -7.852637885410       -4.64       -3.93   24.7ms
    + 19   -7.852643731965       -5.23       -4.40   24.7ms
    + 20   -7.852645788096       -5.69       -4.58   24.8ms
    + 21   -7.852646277791       -6.31       -5.19   24.7ms
    + 22   -7.852646487720       -6.68       -5.00   24.7ms
    + 23   -7.852646611124       -6.91       -5.18   24.7ms
    + 24   -7.852646661059       -7.30       -5.76   24.7ms
    + 25   -7.852646677222       -7.79       -6.21   34.3ms
    + 26   -7.852646682861       -8.25       -5.94   25.1ms
    + 27   -7.852646685214       -8.63       -5.97   24.9ms
    + 28   -7.852646686165       -9.02       -6.70   24.9ms
    + 29   -7.852646686541       -9.43       -6.72   25.1ms
    + 30   -7.852646686679       -9.86       -6.85   25.1ms
    + 31   -7.852646686715      -10.44       -7.02   24.9ms
    + 32   -7.852646686725      -11.03       -7.39   24.8ms
    + 33   -7.852646686728      -11.47       -7.85   24.7ms
    + 34   -7.852646686729      -11.90       -7.83   24.8ms
    + 35   -7.852646686730      -12.39       -8.13   24.8ms
    + 36   -7.852646686730      -12.89       -8.36   25.0ms
    + 37   -7.852646686730      -13.57       -8.70   24.9ms
    + 38   -7.852646686730      -13.80       -8.95   25.0ms
    + 39   -7.852646686730      -14.45       -8.97   24.9ms
    + 40   -7.852646686730      -14.57       -9.22   25.1ms
    + 41   -7.852646686730      -15.05       -9.70   34.0ms
    + 42   -7.852646686730   +    -Inf       -9.94   47.7ms
    + 43   -7.852646686730   +    -Inf       -9.70   25.2ms
    +┌ Warning: DM not converged.
    +@ DFTK ~/work/DFTK.jl/DFTK.jl/src/scf/scf_callbacks.jl:60

    Newton algorithm

    Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.

    scfres_start = self_consistent_field(basis; tol=0.5);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.847806328228                   -0.70    4.8   30.4ms

    Remove the virtual orbitals (which Newton cannot treat yet)

    ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ
    +scfres_newton = newton(basis, ψ; tol);
    n     Energy            log10(ΔE)   log10(Δρ)   Δtime
    +---   ---------------   ---------   ---------   ------
    +  1   -7.852645865895                   -1.63    413ms
    +  2   -7.852646686730       -6.09       -3.69    278ms
    +  3   -7.852646686730      -13.25       -7.21    121ms

    Comparison of results

    println("|ρ_newton - ρ_scf|  = ", norm(scfres_newton.ρ - scfres_scf.ρ))
    +println("|ρ_newton - ρ_scfv| = ", norm(scfres_newton.ρ - scfres_scfv.ρ))
    +println("|ρ_newton - ρ_dm|   = ", norm(scfres_newton.ρ - scfres_dm.ρ))
    |ρ_newton - ρ_scf|  = 7.166760918420706e-7
    +|ρ_newton - ρ_scfv| = 5.575279664931438e-7
    +|ρ_newton - ρ_dm|   = 8.482304284779694e-10
    diff --git a/v0.6.17/examples/convergence_study.ipynb b/v0.6.17/examples/convergence_study.ipynb new file mode 100644 index 0000000000..16690b7d70 --- /dev/null +++ b/v0.6.17/examples/convergence_study.ipynb @@ -0,0 +1,569 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Performing a convergence study\n", + "\n", + "This example shows how to perform a convergence study to find an appropriate\n", + "discretisation parameters for the Brillouin zone (`kgrid`) and kinetic energy\n", + "cutoff (`Ecut`), such that the simulation results are converged to a desired\n", + "accuracy tolerance.\n", + "\n", + "Such a convergence study is generally performed by starting with a\n", + "reasonable base line value for `kgrid` and `Ecut` and then increasing these\n", + "parameters (i.e. using finer discretisations) until a desired property (such\n", + "as the energy) changes less than the tolerance.\n", + "\n", + "This procedure must be performed for each discretisation parameter. Beyond\n", + "the `Ecut` and the `kgrid` also convergence in the smearing temperature or\n", + "other numerical parameters should be checked. For simplicity we will neglect\n", + "this aspect in this example and concentrate on `Ecut` and `kgrid`. Moreover\n", + "we will restrict ourselves to using the same number of $k$-points in each\n", + "dimension of the Brillouin zone.\n", + "\n", + "As the objective of this study we consider bulk platinum. For running the SCF\n", + "conveniently we define a function:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "using Statistics\n", + "\n", + "function run_scf(; a=5.0, Ecut, nkpt, tol)\n", + " atoms = [ElementPsp(:Pt; psp=load_psp(\"hgh/lda/Pt-q10\"))]\n", + " position = [zeros(3)]\n", + " lattice = a * Matrix(I, 3, 3)\n", + "\n", + " model = model_LDA(lattice, atoms, position; temperature=1e-2)\n", + " basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n", + " println(\"nkpt = $nkpt Ecut = $Ecut\")\n", + " self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Moreover we define some parameters. To make the calculations run fast for the\n", + "automatic generation of this documentation we target only a convergence to\n", + "1e-2. In practice smaller tolerances (and thus larger upper bounds for\n", + "`nkpts` and `Ecuts` are likely needed." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tol = 1e-2 # Tolerance to which we target to converge\n", + "nkpts = 1:7 # K-point range checked for convergence\n", + "Ecuts = 10:2:24; # Energy cutoff range checked for convergence" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "As the first step we converge in the number of $k$-points employed in each\n", + "dimension of the Brillouin zone …" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nkpt = 1 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -26.49637822066 -0.22 9.0 131ms\n", + " 2 -26.59143155680 -1.02 -0.63 2.0 32.0ms\n", + " 3 -26.61282653438 -1.67 -1.40 2.0 24.0ms\n", + " 4 -26.61325903577 -3.36 -2.10 2.0 30.9ms\n", + "nkpt = 2 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.79133345590 -0.09 7.2 159ms\n", + " 2 -26.23218175311 -0.36 -0.70 2.0 86.6ms\n", + " 3 -26.23818506445 -2.22 -1.32 2.0 92.6ms\n", + " 4 -26.23847750103 -3.53 -2.32 1.0 73.5ms\n", + "nkpt = 3 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.78463460692 -0.09 5.0 139ms\n", + " 2 -26.23820239385 -0.34 -0.78 2.0 88.5ms\n", + " 3 -26.25074879463 -1.90 -1.62 2.0 93.2ms\n", + " 4 -26.25103633008 -3.54 -2.16 1.0 69.7ms\n", + "nkpt = 4 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.91132110631 -0.11 5.6 326ms\n", + " 2 -26.29288777504 -0.42 -0.76 2.0 165ms\n", + " 3 -26.30834550413 -1.81 -1.75 2.1 194ms\n", + " 4 -26.30842662644 -4.09 -2.72 1.0 123ms\n", + "nkpt = 5 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90242337647 -0.11 3.9 266ms\n", + " 2 -26.26527578006 -0.44 -0.71 2.0 164ms\n", + " 3 -26.28544796020 -1.70 -1.64 2.0 191ms\n", + " 4 -26.28571266265 -3.58 -2.29 1.0 127ms\n", + "nkpt = 6 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.87448576360 -0.10 5.5 606ms\n", + " 2 -26.27242691973 -0.40 -0.76 2.0 302ms\n", + " 3 -26.28808917752 -1.81 -1.72 2.0 360ms\n", + " 4 -26.28818882987 -4.00 -2.63 1.0 221ms\n", + "nkpt = 7 Ecut = 17.0\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.89620535073 -0.11 3.4 465ms\n", + " 2 -26.27730285881 -0.42 -0.74 2.0 302ms\n", + " 3 -26.29414772185 -1.77 -1.75 2.0 352ms\n", + " 4 -26.29420708165 -4.23 -2.68 1.0 217ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "5" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "function converge_kgrid(nkpts; Ecut, tol)\n", + " energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]\n", + " errors = abs.(energies[1:end-1] .- energies[end])\n", + " iconv = findfirst(errors .< tol)\n", + " (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])\n", + "end\n", + "result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)\n", + "nkpt_conv = result.nkpt_conv" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "… and plot the obtained convergence:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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AAAAQL1T1Y36hg4dOnDgwGoppYINRoE2jcKYPonjn0nbMr94feqCadEDAzI13QMAAABkUNVg9Ac/+EG11AGwpe/vHh+yd+q+d5PpJjy4IPntjrEf7GnZOwAAALAjZApALXX7EYnOzTMtIT/vhWjRepuNAgAAADtCMArUUk0Lw/h+iUT6aHTVpnDOlEgyCgAAAOwAwShQe/XZNXbxgZleU88sTv15btp2ewAAAIB0BKNArXZNj0S3Vpka6n82PXprpWWjAAAAwPYRjAK1WlEiTDgq0TD9+fMlUThjclRm2SgAAACwPap6Kn0GGzZseP3115cuXbpq1arVq1c3bty4uLh4p5122n///XfZZZea+71APbN/cew3PRKXvRKlm/Da8tS1s6Kre6RPTwEAAAC+rPqD0Y8//njMmDFPPvnk7Nmzy8vLtzpnzz337Nev37Bhw3r37l3tBQD1zyUHxp9clHz+k7Qt89fPTh7bIX54m0xN9wAAAACVqrOVftmyZaeddlqnTp2uvfbamTNnpktFQwjvv//++PHjjzjiiF69er300kvVWANQL8Vj4f4BieKitBPKk+G056O1ZVmsCQAAAKjLqi0YffLJJw866KCHHnooQx7632bMmNGvX7+rrroqitI2yQKEENo3if3p8EzN8u+vTWVotwcAAADYUvUEoxMnTvzud7+7dOnSHbg3iqJrr732/PPPr5ZKgHpsyN7xU/bM9Na6c15y4kIn1AMAAABfrxr2GJ0xY8Ypp5zylYWiRUVFAwcO7NWrV9euXVu1atWiRYv169evXbv2/fffnzVr1tNPP/3pp59uOf+uu+7afffdR40aVfV6gHrsz0ckpn6a/GRD2gnnTC1/44TCNo2yWBMAAABQB1U1GE2lUj/+8Y83btxYeaVFixZXXnnlOeecU1xcnO6uKIqeeuqpUaNGzZkzp/LiNddcc+qpp+6xxx5VLAmox1o3DOP7FxzzZHm6daHLNobhL0SPDXJCPQAAAJBJVVvpH3300enTp1f+eOihh86bN+/SSy/NkIqGEBKJxHHHHTdz5szLL7+88mJJSclVV11VxXqAeu/odrHzumZ6dz3+UfK+d5NZqwcAAACoi6oajE6YMKFy3L179+eee65t27bbeG9BQcENN9xwxRVXVF559NFHt1x8CrBVvz8ssU+LWIYJP34pem+NzUYBAACA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8+bNmzt3bnWUlFWrVq2qltPeL7300spUtFOnTtddd90jjzwyduzY73//+/F4PISwePHi73znO0uXLq3679rShg0bVm4hlUqFEJLJ5JYXN25Mc+4M5JPebWJXdMv0xpv6aermN9O22wMAAAD1TFX31Lv44osbN25cMb788surXE/OdO7c+ZRTTrnxxhv//ve/b++9L7zwws0331wx/s53vvPWW2+NGjXqpJNOGjp06GOPPfbwww8XFhaGED766KNLLrmkesu+6KKLWm1h7dq1IYSFCxduefGaa66p3l8KddSvD0n02jnTitBRM6I5K9K22wMAAAD1SVWD0Y4dO/7ud7+rGE+cOPEXv/hFlUvKqm7duj377LMrVqxYsGDBww8/fNlll/Xv3397HzJq1KiKQceOHSdMmNCoUaMtPz3ppJOuuOKKivFf/vKXN954o+plAzugIB7u659olH4HkdIoDJkcbbJsFAAAAPJAlfYYrTBy5MhPPvnkuuuuCyFcf/31c+fOvfXWWzt06FD1J2fB7rvvvvvuu1flCfPnz586dWrF+PLLL9/qAfSXXXbZLbfcsmbNmmQyec899/zpT3+qym/c0rBhwwYOHJh5zr777ltdvw7quq4tY7/tmfjpy1G6Ca9/nvrVzOi3vRLZrAoAAADIvqoGo+vWrSsrK7vkkkvatWt3+eWXr1279vHHH3/iiSeOPfbYQYMGde/evV27di1btozFtvVAk+Li4iqWlGX/+Mc/KgYFBQWnnXbaVuc0bdr0xBNPvPfee0MIjz/+eDUGoz169OjRo0d1PW1bVGxjGkIYN25cQcHX//kZMGBAly5dargo2A4XHBB/enHyyUVpW+Z/Nyd5TPt4/7aOYQIAAID6rKrB6PHHH//ss89+5WIURRMnTpw4ceIOPDCZTG57ilobPPfccxWDgw8+uEWLFummDRgwoCIY/fDDD997773OnTtnqb7qVlZWVjEYOXLktsxv2rTp7Nmzqz3vXrNmTWlpacXmrbC9fn9g7OWljVdu2vqrJpkKQyaVTRm4oVmB/Ua/atOmTatXr47H4w0aNMh1LZBfVq1aVVRUlEza7AOyat26devXr2/YsGGuC4H8Ul5evnr16hBCSUlJrmuB/LJq1ap4PP7/2bvT+KbK9P/j10nSpi2Upi0UCrLvUJFd2QqoCAjI4uAGioIg6oyif5fRccGf4KgDOrggIA4IoiKKKKsrtFCUfZFFsbIWpHvTfUly/g/CxA426XLSnLb5vB/dObnPyYWvmUP45r7uo3suFxQUdNk2ldXHC630fu748ePOQe/evT1MK/3usWPHam8wWlkFBQVWq7V+/frevWxJSYnNZnOltEClNDTJvG7qtL1u/2d5Jk956kDA693zfFlVreD8/53NZtP9b0rA39hsNoPBwF98gI+V/JfehQD+xfmds6SkxGhkhyvAp2rId05fLoMjGNUkNzc3KSnJOW7RooWHma1atXKNjx8/PmbMmGotrPoEBAQUFxeLyLRp0yryt9SIESN69Ojh9TLMZnNRUVFUVJTXrww/MTVKvs20f/Sb27VXH54NHN8++C+ttT6hro4pLi42GAyRkZGsGAV8z2w2e+hNAVAdgoODg4OD+c4J+JjzZ3iLxeKzJWMAnAwGg8FgiIiI0LsQ3yEY1SQlJcW152azZs08zAwJCQkPD8/MzBSR5ORkXxRXPVzLxN5++22z2axvMYAWCwcYE5LVs7lu++XvT7APbGJowpcxAAAAAADqIq3B6KxZsyZOnOiVUpxqV3tmbm6ua1yvXj3Pk+vVq+cMRkufBUAvlkD5T6xx2Cabu2Q0rVDuibNtGmGqTXclAAAAAABQMVqD0VGjRnmljloqL++PLQjL3ZQ9JCTEOcjJyanGmgBU2HVNlb91Nbxx1G1D/ZYkdenPjumdaKgHAAAAAKCu4V/7vuN6kqzBwH92oKZ4pa8xJtzTktBHfrT/auXx9AAAAAAA1DVeSOgy/8v5TB6/Uvph64WFhZ4nFxQU/PksAPoKMsqKIcZA9/fCPJtMibPbiUYBAAAAAKhbNAWju3fvVhQl4r8SExO9VVZtUTriLHfnUFffPcEoUKP0iFSe7WH0MOGHFPXlQ27b7QEAAAAAQG2kKRg9d+6ca9yjR48uXbporqeWady4sasvPikpycPMnJycrKws5zg6OrraKwNQGU93N8Q28dRQP3u/fU8qq0YBAAAAAKg7NAWjrt5wEenUqZPmYmqfkJCQli1bOsdnzpzxMPP06dOucefOnau1KgCVZVBk2WBjaIDbCTaHTImzF9h8WBMAAAAAAKhOmoLR0i3hUVFRmouplVzrZHfv3u1hWul3u3btWr01Aai8NqHKvKs9NdQfz1Kf2mv3WT0AAAAAAKBaaQpGW7du7RpbrVbNxdRK119/vXNw5MiRtLQ0d9O2bt3qHHTo0MG1yBRAjTKjk2FMC093xTeOODafo6EeAAAAAIC6QFMw2rlz59DQUOf4xIkT3qin9hk3bpxzYLfbV6xYUeYcq9X6+eefO8cTJkzwUWUAKu+9WGPjYLfvqiLTd9gzinxYEAAAAAAAqB6agtHAwMAbb7zROd61a1dqaqo3SqplWrVqNWLECOf41VdfTU9P//Oc2bNn5+fni4jJZJo6dapP6wNQGY2CZPFATw315/PUGTtoqAcAAAAAoNbTFIyKyKOPPqooiojY7faXXnrJGyX5WnZ2dmYprmfHi0h+fn7m/3I4Q3sxbQAAIABJREFUHH++wpw5c5z/EZKTkydMmFD6CiKyePHiN954wzm+55572rdvX51/GgBajW1pmNrB073xs1OOj34r41YAAAAAAABqEUVVte6XN3PmzMWLF4uIyWT69NNPx44d643CfKd379779u2r4OSTJ0+W3lnV5YUXXpg9e7ZzHBkZOWnSpA4dOmRlZW3cuPGHH35wHu/UqdPOnTvDw8O9UbVugoKCioqKRKSwsNBsNutVhtVqLSoq8ttHfqG65dmk+1pbYrbb26MlUA5NMLWor/iyqpqguLg4PT09MjIyMDBQ71oA/5KSkmI2m8PCwvQuBPAvOTk5ubm50dHRehcC+BebzZaammqxWIKD3e9yBaAapKWlGQyGiIgIvQvxHZP2SyxYsOC333779ttvbTbbrbfe+tJLLz388MNGo6de1Lrnueeey8rKWrBggaqq6enpriWiLp07d96wYUNtT0UBP1HPJMsHGwdvsNndRKNZxTI13v7NjSa/S0YBAAAAAKgrtLbSi4jZbN64ceMDDzygKEpRUdH/+3//r0uXLq+++urBgwdLSkq0X7+6NWvWrE2FBQQElHkRRVFef/31jRs3DhgwwNlW7xIdHf3000/v27evTZs2PvkDAfCCAY2Vx7t5ukN+d0F98ygN9QAAAAAA1FZaW+kfeOCB3bt3O8e//vprdnZ26XfNZnOjRo3CwsKCgoIqeME9e/ZcFizWOufOnTt+/PiFCxcsFkuzZs169uxZl9bP0koP/1HikP5f2vamub1JBhllzzhTTHjtvmVVCq30gF5opQd0QSs9oAta6QG90Epfab/++quHDTqLioqSkpKSkpI0fkrt0rx58+bNm+tdBQCtAgzy/hBj73W2AlvZEwrtctc2+49jTYFeWHwPAAAAAAB8in/NA4BbXSzKnF6eVnwfSFdfPGD3WT0AAAAAAMBbCEYBwJNZMYZrm3pqln/poCP+oqY9SQAAAAAAgO9pbaUfNWoUzxQCUIcZFHl/sLHbWltmUdkTHKrcE2c/OMEUWvaz2QAAAAAAQE2kNRidNWuWV+oAgBrrinrKgn7Gu7a5bZk/maM+tsu+eGDdecwaAAAAAAB1Hq30AFC+O9sZbm3j6Ya55GfH+rMOn9UDAAAAAAA0IhgFgApZNNDYvJ6nzUanxduTC3xWDgAAAAAA0IRgFAAqxBIo78UaPSSjqYVy3w6eUA8AAAAAQO1AMAoAFTWsmfJAF0+3zS/OOP5zgoZ6AAAAAABqAYJRAKiEV/saO4Z5aqh/aKc9MVv1WT0AAAAAAKBqtD6V3oPff//93LlzmZmZ2dnZItKsWbP+/ftX38cBgA+EmOTDocZrvrSVuFkYmmeTu+PscaNNnrruAQAAAACA3rwfjG7dunX58uXbt28/depU6ePjx49fu3btZZNPnDhx6NAh57hp06YDBgzwej0A4F09Gyr/6G6cvd/tdqIJyeq/Djv+fhVL8gEAAAAAqLm8GYzu2LHjoYceOnDgQMVPURTl9ttvt9vtItKwYcPz588HBgZ6sSQAqA7/6G7YkuT4McVty/xz++zXN1N6N2TVKAAAAAAANZR3FjSpqjp37tyhQ4dWKhUVkfbt248bN845TktL27Rpk1fqAYBqZTLIB0OM9QPcTihxyJRt9gKbD2sCAAAAAACV4Z1g9JlnnnnmmWdstqpkADNmzHCNP/vsM6/UAwDVrW0D5dW+Rg8TjmWpz+xz224PAAAAAAD05YVgdPny5S+99FLpIz169Jg/f/7u3bvPnz9f7rahQ4cOjYiIcI6///57VeVpzgBqh5mdDaOae2qW//cRx/cXuKcBAAAAAFATaQ1Gc3JynnzySddLi8WyevXq/fv3P/roo3369GnatGlAgPteUxERCQgIGDlypHN84cKFEydOaCwJAHxDEflPrCkq2O0EhypT4uyZRT6sCQAAAAAAVIzWYPTNN99MSUlxji0WS3x8/C233FLZi/Tu3ds1Pnr0qMaSAMBnooJl8UBPDfVJeerDP9BQDwAAAABAjaM1GF27dq1rvHDhwiuvvLIKF+nRo4dr/PPPP2ssCQB8aVxLw5T2nu6lKxMdq086fFYPAAAAAACoCE3BaEpKyv79+53jjh073nbbbX+eoyieNuBzatasmWt8/vx5LSUBgO+90d/Ysr6ne93MHfZzeWw2CgAAAABADaIpGE1MTHQ9K2n06NEVyUDLZLFYXOPs7GwtJQGA7zUIkA+GGI3ub4FZxTIt3k4yCgAAAABAzaEpGE1NTXWN27ZtW+aciqSlQUFBrnF+fr6WkgBAFwObKI/EeLqjfnNeXXiMhnoAAAAAAGoKTcFobm6ua1yvXr0qXycjI8M1btCggZaSAEAvc3obu0V4+inoid32X6wsGwUAAAAAoEbQFIxGRka6xqXDzdIqsmK09L6iDRs21FISAOjFbJQPhxqD3D+jPt8md2y1l7BsFAAAAACAGkBTMBoVFeUaa3mafEJCgmvcpEkTLSUBgI66hisv9HKfjIrsT1PnHrT7rB4AAAAAAOCOpmC0bdu2JpPJOf7uu+9cD2IqrSIrRj///HPXuH///lpKAgB9PXalYUi0p/ve3IOOH1NoqAcAAAAAQGeagtGwsLB+/fo5x4mJiZs3b67CReLi4nbu3Okch4aG9unTR0tJAKAvgyIrhxjDzW4n2BwyeZs9t8SHNQEAAAAAgD/RFIyKyKhRo1zjhx9+ODs7u1KnW63We++91/Vy9OjRriWoAFBLXVFPee1qTw31v2WrT+ymoR4AAAAAAD1pDUbvu+++iIgI5zgxMXHcuHFZWVmlJ3hopU9OTh41alRiYuKlUgyGp59+WmM9AFAT3N3BMLG1pxvsouOOjedoqAcAAAAAQDdag1GLxfLUU0+5Xm7durVXr16ffvqpw+HpucslJSXvvvtuz549Sz92aeLEiTExMRrrAYAaYuEAY3SI23dVkanxtpQCHxYEAAAAAABK8ULf+qxZs7777rstW7Y4X548eXLixInR0dGjR4/u3r17SkqK87jVav3+++9PnjwZHx+/ZcuW1NTU0hdp27btO++8o70YAKghGgbJ8sGmEZtt7taFphTIfTvsnw/z1HQPAAAAAACqiVLmo+QrKycnZ/DgwQcOHKja6RaLJS4urlu3btorQXULCgoqKioSkcLCQrPZ/fNlqpnVai0qKoqKitKrAKCC7k+wLzruaQX9+4ONd7XXunjfZ4qLi9PT0yMjIwMDA/WuBfAvKSkpZrM5LCxM70IA/5KTk5ObmxsdHa13IYB/sdlsqampFoslODhY71oA/5KWlmYwGFx7ZvoD7/xrPDQ0NC4ubvLkyVU4t0OHDjt37iQVBVAnzb/a2CHM7VbLIvLQD/YzuWw2CgAAAACAr3ltmVJoaOjKlSs/+OCDDh06VPCUkJCQRx99dO/evZ07d/ZWGQBQo4SY5MOhxgD391prsUzeZrcTjQIAAAAA4Fte7t+cNGnS8ePH161bd+utt7prOTGZTNdcc83zzz9/6tSp+fPnh4aGercGAKhRejVUnrrK0812x0X19SOe2u0BAAAAAIDXeeHhS5cxGAxjx44dO3asiJw8efLMmTPp6ekZGRkBAQGRkZENGzaMiYlp0KCB1z8XAGqsZ3sYvzqv7kpxuy70mb32G5op3SI8Nd0DAAAAAAAv8n4wWlqbNm3atGlTrR8BADWfySDLY4291tnybWVPKLLLHVvte8eZgnhGPQAAAAAAPlFrHoUMALVaJ4vych9PqefRTPX5fXaf1QMAAAAAgJ8jGAUAH/lrV8PI5p6a5ef95Nj2O49hAgAAAADAFwhGAcBHFJGlg4yRZrcTHKrcuc2eWeTDmgAAAAAA8FcEowDgO01DlCWDPDXUJ+Wpj+6ioR4AAAAAgGpHMAoAPjWhlWFSO0/33uUnHGtOOXxWDwAAAAAA/olgFAB87e3+xhb1PW02+kCC/fd8n5UDAAAAAIA/IhgFAF8LC5QPhhgN7qPRtEK5O87GY5gAAAAAAKg+BKMAoINBTZSHu3q6A399Xl18nIZ6AAAAAACqC8EoAOjjn32MV0Z4aqj/f7vsJ6wsGwUAAAAAoFoQjAKAPsxGWTHYGOj+Npxvkzu22ktYNgoAAAAAQDUgGAUA3XSPVGb3MnqYsC9N/echklEAAAAAALyPYBQA9PRkN8PgaE8N9S8esO9OpaEeAAAAAAAvIxgFAD0ZFFkWa2wQ4HaCzSFT4uz5Nh/WBAAAAACAHyAYBQCdtQ5VXrvGU0P9z1nq3/fYfVYPAAAAAAD+gGAUAPQ3raPhL6093ZDfOurYfI6GegAAAAAAvIZgFABqhHcGGJsEu31XFbl3uz29yIcFAQAAAABQpxGMAkCN0DBIlg02eXgM04V8dcZ2GuoBAAAAAPAOglEAqClGXKFM6+jptrz2tGNVosNn9QAAAAAAUIcRjAJADfLvfsb2YR6WjcqDO+1nc9lsFAAAAAAArUzVcdH8/Pzdu3fv3Lnz3LlzmZmZGRkZqqoOGDBg9uzZ1fFxAFBn1DPJ8lhj7Aab3U34aS2Wydvs20aZDJ7iUwAAAAAAUA4vB6MHDx587bXXVq9eXVxcfNlboaGhf57/3Xffvfzyy85xTEzM66+/7t16AKDW6d9YefIqw0sH3bbMb7+oLjjqeCSGJf8AAAAAAFSd14LRgoKCWbNmLVmypFJn9evX79ChQ6mpqSKydevWJ554Ijo62lslAUAt9UJP4zfn1T2pblvmn9pjv76pcmUEq0YBAAAAAKgi7yw4unjxYt++fSubiopISEjI/fff7xzb7faPPvrIK/UAQK1mMsj7g43B7n+6KrLLXXH2Yp7DBAAAAABAVXkhGM3Ozr7xxhuPHDnyP9c1GLp06TJ8+PBGjRp5Pn3SpEmu8aZNm7TXAwB1QGeL8lJvo4cJB9PV2fvsPqsHAAAAAIA6xgvB6EMPPXTgwAHXyyuuuOKNN95ISUk5evToli1bunTp4vn0Dh06dOvWzTlOSEgoKCjQXhIA1AEPxxhGXOGpWf6Vw46433lCPQAAAAAAVaE1GD106NDKlStdL0eNGnX48OG//e1vkZGRziOKUv4WeNddd51zUFhYWDpjBQB/pogsHWSMMLud4FDlnnh7dokPawIAAAAAoK7QGowuWLDA4bi0y11sbOxnn30WHh5e2Yv06NHDNf7ll180lgQAdUazesqb/T011J/KUR/9kYZ6AAAAAAAqTVMwqqrqli1bnGOTybRkyRKz+fKlTRVZMRoTE+ManzhxQktJAFDH3NHWcFtbT/fq935xfHqKxzABAAAAAFA5moLRX3755ffff3eOr7vuuo4dO1btOq6+exFJT0/XUhIA1D3vDDC2qO/pR6b7E+wX2Z8ZAAAAAIDK0BSMXrhwwTWOjY2t8nUsFotrnJ2draUkAKh7LIHy3iCjh2Q0rVDuibPxGCYAAAAAACpOUzCamprqGkdHR5c5pyKt9DabzTV27VgKAHC5vpnyt66e7thbktT3fuH+CQAAAABARWkKRg2GP06326v+9I/S7fMNGzbUUhIA1FWv9DXGhHv6qWnWD/ZfrSwbBQAAAACgQjQFo1FRUa5xSkpKmXMqsmL0+PHjrnHp/UYBAC5BRlkxxBjo/radZ5O74+12olEAAAAAACrAa8Ho7t27q3yduLg417hNmzZaSgKAOqxHpPJsD6OHCTuT1VcO0VAPAAAAAED5NAWjHTp0cC3w/P77761W65/nlLtitKCgYNWqVa6XQ4cO1VISANRtT3c3DGri6b76/H77nlRWjQIAAAAAUA5NwajRaBw2bJhznJOTs2DBgipcZMGCBcnJyc5xmzZtWrVqpaUkAKjbDIosH2wMDXA7weaQKXH2ApvbCQAAAAAAQDQGoyJy6623usZz5szZuXPnZRM8rxiNj49/7rnnXC+nT5+usR4AqPPahCr/utpTQ/3xLPXpvVV/IB4AAAAAAP5AazA6duzYq6++2jkuKSkZPnz4unXrKnjuihUrRowYUVJS4nwZERHx4IMPaqwHAPzBfZ0Mo1t4+tlpwRHHliQa6gEAAAAAcEtrMKooyrx580wmk/Nlbm7u+PHjb7zxxk2bNhUXF0tZK0bz8vI+//zz/v37T5kypaCgwHV87ty5oaGhGusBAD/xn1hT42C376oi9263ZxT5sCAAAAAAAGoVrcGoiAwcOPDtt98ufWTz5s2jRo0KDw/v1avXgQMHnAd/+umnyZMn9+vXLzIycsKECT/88EPpU6ZMmTJz5kztxQCAn2gUJIsHemqoP5+n/m0nDfUAAAAAAJTN5JWrzJgxIz09/ZlnnnE4HK6D+fn5+/fvd71MTExMTEws8/QxY8YsWrTIK5UAgP8Y29JwTwd12QmHuwkf/uYY00K5ra0XfgMDAAAAAKCO8dq/lp966qktW7Y0bty4UmcpivLcc8+tW7cuKCjIW5UAgP94o5+xXQNPm43en2A/m8tmowAAAAAAXM6by4iGDRt2/Pjxl156KTo6uvwPNhgmTpx46NChF154wWBgNRMAVEX9AFk+2Gh0H41mFcu07XaSUQAAAAAALuOdVnqX8PDwp5566tFHH922bduOHTu2b99++vTpjIyMnJwcRVEaNmwYGRl51VVXXXfddcOGDWvVqpV3Px0A/NCAxspj3QyvHHLbUP/tefXNo46HuvITFAAAAAAAf/ByMOpkNpuHDx8+fPhw15GSkhKTyfTnJ9QDALT7v17GLefUQxluF4Y+udt+bVMlJpybMAAAAAAAl/hoAVFAQACpKABUk0CDfHitMdj9T12Fdrlrm73Y7aJSAAAAAAD8Dp2VAFAXdLEoL/YyephwIF2dc8Dus3oAAAAAAKjhtAajubm5mZmZmZmZubm5Vb5IXl5e5n9prAcA/NYjMYZrm3pamz/3oGP7RZ7DBAAAAACAiPZgdPz48REREREREVOmTKnyRe6+++6I/1JV/tEOAFVhUOT9wcZws9sJDlXujrPnlPiwJgAAAAAAaipa6QGg7riinrKgn6eG+pM56uO7aKgHAAAAAIBgFADqljvbGW5p4+nevvhnx4azrM0HAAAAAPg7glEAqGsWDTBeUc/TZqNT423JBT4rBwAAAACAmqhGBKMlJZd2vDMYDIri6R/zAIByhZvlP7FGDzfT1EK5bwcN9QAAAAAAv1YjgtGLFy86B/Xr19e3EgCoG4Y1U+7v4ukO/8UZx7ITDp/VAwAAAABATVMjgtGkpCTnoEGDBvpWAgB1xr/6GjuGeVqD/9AP9sRsNhsFAAAAAPgp/YPR7du3nz9/3jlu166dvsUAQJ0RYpJVQ40B7m/zuSVyd5zdTjQKAAAAAPBLpgrOKy4uzsvL+/Nx1/agxcXFmZmZFbyaqqqpqalpaWkJCQnz5s1zHe/Ro0cFrwAAKFevhsrT3Q0v7HfbMp+QrM477HjyKv1/JAMAAAAAwMcqGoyuX7/+L3/5i4cJGzZsiIiI0FiN548AAFTWM92NW5LUXSlu14U+t88+orlyVQQPvgMAAAAA+JcatEpo4MCB/fr107sKAKhTTAZZNcRYP8DthGKH3PG9vcDmw5oAAAAAAKgBakow2rFjx5UrVyoKS5YAwMvaNlBe6WP0MOFYlvrsPrvP6gEAAAAAoCbQPxjt1KnTyy+/vHfv3latWuldCwDUTfd3MYxq7umXp9ePOL6/wGOYAAAAAAB+pKJ7jPbs2XPx4sV/Pv7vf//7+PHjItKjR4+ZM2dW8GohISGhoaERERExMTHh4eEVPAsAUDWKyH9iTVeuLUkpKHuCQ5UpcfbDE0zhZt9WBgAAAACATioajLZu3XrGjBl/Pr5mzRpnMOpuAgCgJogKlsUDjeO/cdsyn5SnPvyDfcUQT033AAAAAADUGfq30gMAfGNcS8Nd7T3d9lcmOj456fBZPQAAAAAA6KiiK0bdGTVqVJs2bUSkR48e3qgHAFCN3uhnjPtdPZPrdjvRmQn2/o2VK+rxKDwAAAAAQB2nNRidNWuWV+oAAPhAWKB8MMQ4ZKPN7iYazSySqfH2r0aaSEYBAAAAAHUbrfQA4F8GNlFmxXi6+X9zXn3nGA31AAAAAIA6jmAUAPzO3N7GbhGeloQ+vtv+i9Vtuz0AAAAAAHUAwSgA+B2zUT4cagxy//z5fJtM2movYdkoAAAAAKDuIhgFAH/UNVyZ3dN9MiqyL02de9Dus3oAAAAAAPAxrQ9fevHFF3/66SevlOK0evVqReGZHwBQ7R7vZtiS5Nj2u9uW+bkHHSOvMFwdxT0ZAAAAAFAHaQ1G4+Pjv/32W6+U4rR69WovXg0A4I5BkWWxxqvW2rJLyp5gc8ikbfaD4031A3xbGQAAAAAA1Y9WegDwX61ClX/389RQ/1u2+uQeGuoBAAAAAHUQwSgA+LV7Ohgmtvb0d8E7xxwbz/GEegAAAABAXaO1lb5nz54Vn1xSUpKZmZmUlJSRkeE6qCjK4MGDTSatlQAAqmbhAOP2i46LBWW/q4pMjbf9NCHAXGxdtmzZ5s2bR44cec8994SFhfm2TAAAAAAAvElRVV+vA1JV9eeff/7ggw8WLVrkTEiHDh36ySefNGzY0MeVoAqCgoKKiopEpLCw0Gw261WG1WotKiqKiorSqwCgjvkqSR25xeb274Nzh1vtXZwa92FeXp7zQL169SZNmvTAAw9cddVVvqoR8GspKSlms5kfJAAfy8nJyc3NjY6O1rsQwL/YbLbU1FSLxRIcHKx3LYB/SUtLMxgMERERehfiOzq00iuK0rlz57lz5x49evTaa68Vka1bt/bt2/fUqVO+LwYAICLDr1BmdPrT3wi2Itn1kbw8WP6v9+lN715KRaPaikheXt6SJUu6d+8+YMCAVatWOX8vAQAAAACgFtFzj9EmTZps3Lhx0KBBInLq1KnRo0cXFLjp5AQAVLP51xg7hCmXXmQkydpn5Im2snSK/PaDiEhQqAy5T2YfkLnHZfYBGXKfBIWKyM6dOydPntyiRYunnnrq3Llz+pUPAAAAAEDl6NBKf5lTp0517tzZudroH//4x5w5c/StB57RSg/UYXvT1P5f2koyfpfnrpSC7EtHm3WVIffJNZOcSegfCnPkx1WybbGcP+o80KBBg+PHjzdt2tS3VQN+gVZ6QBe00gO6oJUe0Aut9Dpo3br1rbfe6hy/+eabrg3sAAA+1ruh8verDBK/VAqyxWCUPhPl8e9k9gEZMvPyVFSca0hnyuwD8vh30meiGIzZ2dlLlizRo3AAAAAAACpN/2BUREaMGOEcZGdnf/XVV/oWAwD+7KkYR2DCeyIiV42WGaukw6Dyz+kwSGaskqtGi8i7775bUlJSzTUCAAAAAOAFNSIYbdeunWu8Z88eHSsBAD+3/ovPizMuiIgMnVm5M4fcJyIXLlxYt25dNdQFAAAAAICX1YhgtPSGWTy7AwB09M4774iIRLWVTtdW7szO10mTDn9cAQAAAACAmq1GBKPp6emucWFhoY6VAIA/O378eFxcnIjI0PtFUcqb/r8URWKni8jWrVuPHDlSDdUBAAAAAOBNNSIY3blzp2vcqFEjHSsBAH+2cOFCVVUlIFj6Ta7K+QOmiLmeiPAIJgAAAABAzad/MFpcXLx48WLXy6ZNm+pYDAD4rdzc3JUrV4qIXHO71IuoyiVCLNLnFhFZ9N7yV3dZd1xUi+xeLREAAAAAAO8x6fvxNpvt3nvv/fXXX11Hhg4dqmM9AOC3PvjgA6vVKiIyeEbVr3LtA7JjWUl+zpNvrZLB0wMM0i1CGdBY6dVQ6dVQ6RJe2f58AAAAAACqi27BaEFBwfr16+fOnXv48GHXwSuuuOKaa67RqyQA8Gfx8fEiImFNpGXPql+l+VUS1kSsF+VEvAyeXuKQfWnqvjTV+WaEWfo2Uvo2Uvo0MvRtpEQFe6NuAAAAAACqRGsw+uKLL/7000+VOiUvL+/8+fPHjh0rKSm57K25c+eaTDovYgUA/zRixIiPPvpIrBclcae061/FqyQmiPWiiEjMiD+/mVEkW5LULUmqiENEokPEuZK0V0NlYGNDuLnqxQMAAAAAUFlaU8j4+Phvv/3WK6VMnjx58uQqPe4DAKDZrbfe+vjjj6ekpMi2RVUPRrcuEhGp31B631zu3N/zZcNZdcNZVUSMir1jmOLKSfs0UszGKpYAAAAAAEBF6P/wJRExGAwPPfTQsmXLDIYaUQ8A+CGz2Xz33XeLiOxbK9nJVblETqrsXyciMvAeCQiq1Kl2VY5lqSsTHbN+tA/aYAtfWTJwve2RH+0f/uZIzFarUgwAAAAAAB7p3LceEBAwevToxx9/vF+/fvpWAgB44IEH5s+fb7cVy45lcuPfK31+/FKxFYlikMHTNVZSYJOEZDUh+VIkGmmWPmxOCgAAAADwKq3BaM+elX5GR2hoaFhYWMuWLXv27NmvX79GjRpprAEA4BUtW7YcPnz4pk2bJO5dGfG4GCrTze6wy/b/iIhcOUIatvJuYelsTgoAAAAA8Datwegrr7zilToAADXB/fffv2nTJsk4Jz9tlqtGV+LMw5sk/YyIyOAZ1VSbC5uTAgAAAAC04xHwAIA/3Hjjja1atTp9+rRsW1y5YDRuiYg0b9lq3sOjElKUfWnqvjS10F5ddbo4Nyc9lqWuTBQRCTBItwhlQONLOWmXcEWp9hIAAAAAALUSwSgA4A8Gg2HmzJl///vf5ejXMv8GGTJTuo8RY4DbE+wlcnC9bFskv8SJyIP3z7ylremWtiIiNof8YlX3pakJyeqOi+rPVtVR/U9RKnGIM5N1vmwQIFdGKL0aKgObKLFNDI3ZnBQAAAAA8F+KqvK0X1RCUFBQUVGRiBQWFprNum3sZ7Vai4qKoqKi9CoAqMPS0tJiYmKSk//7YHpLtAy6V2LvFUv0/8zL+l3il8r2pZL1u/NA48aNjxw50rBhwzIvm1Mih9KbHKlwAAAgAElEQVRVZ2qZkKyezNHhbx82J0XtlZKSYjabw8LC9C4E8C85OTm5ubnR0dHlTwXgPTabLTU11WKxBAfzszbgU2lpaQaDISIiQu9CfIdgFJVDMAr4g6ysrGXLli1atOjEiROXDhlM0uMmGXKfdBwiv2yTbYvlwJfisDnf7NChw8yZM++55x6LxVLBj7iQfykk3Zem/pCsphdVx5/DE6MibE6KWoRgFNAFwSigC4JRQC8Eo0A5CEYB/6Gq6rfffrtw4cL169fb7f/dLjQ4TAqszqHRaBwzZswDDzxw/fXXK9o287yQf6nj3mebk16GzUlRwxGMArogGAV0QTAK6IVgFCgHwSjgh86dO7dkyZKlS5devHjReaRJkyb33nvvjBkzmjdv7vWP02Vz0suwOSlqGoJRQBcEo4AuCEYBvRCMAuUgGAX8VnFx8Zo1a9asWTNx4sSJEycGBgb65nPZnBQQglFAJwSjgC4IRgG9EIxeLiMj47XXXvNZNSIyZ84cX34cKotgFPBnxcXF6enpkZGRPktF/4zNSeGfCEYBXRCMArogGAX0QjB6ucTExPbt2/usGhFxOBwaN6pDtSIYBfxZTQhGL8PmpPATBKOALghGAV0QjAJ68cNg1KR3AQAAVF3TEGVia2ViaxGdNictcYgzk3W+ZHNSAAAAAKgtCEYBAHWEySBdw5Wu4cpd7UX+d3PSHcnqKZ9sTppdIgnJakKy+sZREbGzOSkAAAAA1FjlBKMBAQEtW7b0TSlO9NEDALwiNEAGNlEGNrn014oum5P+ni8bzqobzqoiYlTsbE4KAAAAADVHOcFoy5YtT58+7ZNKAACoRk1DlKYtlDEtLr30/eakdlWOZanHstSViSJsTgoAAAAAeqOVHgDgj9icFAAAAAD8HMEoAMDfsTkpAAAAAPghglEAAP4Hm5MCAAAAgD8gGAUAwBM2JwUAAACAOolgFACASmBzUgAAAACoGwhGAQCoIjYnBQAAAIDaq1qCUZvNduTIkZ07d+7Zsyc1NTUrKys7OzsoKCg8PDwiIiImJqZ///59+vSpX79+dXw6AAC6YHNSAAAAAKhFvByMpqSkLFu2bOHChWfPnvU802w233TTTY8++ug111zj3RoAAKgJLtuc9GTOHzuTsjkpAAAAAOjOm8HoihUr/vrXv+bk5FRkclFR0Zo1a9asWXPnnXcuXLiQ1aMAgLqtTajSJvRS0z2bkwIAAACA7hRV9cI/xWw22+TJk1evXl2109u1a/fVV1+1adNGeyWobkFBQUVFRSJSWFhoNuu2d53Vai0qKoqKitKrAMA/FRcXp6enR0ZGBgYG6l1LnaLL5qSXYXPSGi4lJcVsNoeFheldCOBfcnJycnNzo6Oj9S4E8C82my01NdVisQQH88st4FNpaWkGgyEiIkLvQnzHCytGVVWdNm2au1Q0NDS0UaNG9evXz8vLy8nJSUtLczgcl81JTEwcPnz4jh07GjdurL0eAABqFzYnBQAAAADf80IwumDBghUrVpQ+EhwcPH78+IkTJ/bu3fuKK64o/VZOTs7Bgwc3bdq0atWqc+fOuY4nJibedtttW7du1V4PAAC1GpuTAgAAAIAPaG2lz8jIaNeuXWZmpuvI7bffPm/evKZNm3o+saSk5K233nr++edL70n6+eefjxs3Tks9qG600gP+jFZ63emyOellnJuTDmyiDGis9G3E5qQ+Qis9oAta6QFd0EoP6IVW+kp7++23Xamooijz589/5JFHKnJiQEDAI488MmTIkBEjRqSkpDgPvvjiiwSjAAC4YzJI13Cla/ilhzjpsjlpdokkJKsJyc7PsrM5KQAAAIBaSmsw+sUXX7jGs2bNqmAq6tKjR4+1a9fGxsY6Nx7dv3//2bNnW7RoUe6JAACAzUkBAAAAoMo0BaMpKSn79+93ji0Wy5w5c6pwkQEDBtxyyy0ff/yx8+XXX3997733aqkKAAD/xOakAAAAAFBxmoLRkydPurYonTBhQkhISNWuc8cdd7iC0d9++01LSQAAwKlNqNIm9FLTvS6bk5Y4xJnJOl+GBUpMOJuTAgAAAKgptK4YdY2vvPLKKl+nW7duZV4TAAB4RU3YnNRa7HZz0kFNDBYe6AUAAADAtzQFo6UfKB8eHl7l65Q+12q1aikJAACUi81JAQAAAEBTMFo60ExNTa3ydUqvEm3YsKGWkgAAQGWxOSkAAAAAP6QpGG3UqJFrvHfv3ipfZ9++fa4xwSgAAPpic1IAAAAA/kBTMNq+fXuTyWSz2URk/fr16enpkZGRVbjOihUrXOPOnTtrKQkAAHgRm5MCAAAAqKs0BaMWi6V///7x8fEikp+f/9BDD61ataqyF/niiy82bdrkHBuNxuHDh2spCQAAVB8Pm5PuTFYz2JwUAAAAQO2hKRgVkfHjxzuDURH58MMPo6KiXnvtNaXCW4Ft3br1zjvvdL0cOHAgrfQAANQWbE4KAAAAoPZSVFVTE1x+fn7Hjh2TkpJcR2JjY998881u3bp5PjE7O3vOnDkLFiwoLi52HYyPjx80aJCWelDdgoKCioqKRKSwsNBsNutVhtVqLSoqioqK0qsAwD8VFxc7d00JDKR7GeXQZXPSy9SlzUlTUlLMZnNYWJjehQD+JScnJzc3Nzo6Wu9CAP9is9lSU1MtFktwcG3+yxuohdLS0gwGQ0REhN6F+I7WFaMhISGvvPLKpEmTXEfi4+O7d+/ev3//iRMn9u7du1OnTq6NR/Pz80+ePHnw4MEtW7asW7cuLy+v9KVuueUWUlEAAOoGNicFAAAAUMNpDUZF5I477jh27NjcuXNdR1RVTUhISEhIcB2xWCy5ubnOxzSVqW/fvu+99572YgAAQA3E5qQAAAAAahovBKMi8uKLL9rt9ldffdXhcJQ5ISsry8PpAwcO/Pzzz+vXr++VYgAAQA3H5qQAAAAAdOedYFRRlH/+85833HDD1KlTT58+XfETg4ODn3/++ccee8xoZJ0GAAB+qk2o0ib0UtN9iUNO+Hxz0hKHODNZ58u6tDkpAAAAAHe8E4w6DR069MSJE59//vnChQt37Nhht3ta79GuXbvp06dPmzbNtQMpAABAAJuTllmS1WqxWHT4YAAAAKDu0vpUendyc3P37Nmze/fulJSUzMzM3Nxcs9kcHh4eHh7erVu3fv36NW3atDo+F9WNp9ID/oyn0kN3umxOWppRER9vTrpv374FCxZ8/PHHwcHBt91220MPPdS1a9fq/UgA/8VT6QFd8FR6QC9++FT66gpGUVcRjAL+jGAUNY3vNye9TPVtTmq1WleuXLlw4cLjx4+XPq4oyrBhw+6///4xY8awExFQ3QhGAV0QjAJ6IRgFykEwCvgzglHUZLpsTnoZr2xOevjw4YULF65atSo3N/fSoQaNZeDdknle9n4qJYXOY82bN7/vvvumTZvWpEkTL5UP4HIEo4AuCEYBvRCMAuUgGAX8GcEoahFdNie9TGU3J/3xxx8fe+yxhISEPw61HyhDZ0qPcWIKFBHJTZOE9yVuiaSecr4fGBh48803v/76640bN66mPwXgzwhGAV0QjAJ6IRgFykEwCvgzglHUXjV/c1K73d6+fftTp06JiASFytW3y9CZ0iymjGupDjn6tWxdLD9tFtUhItOmTVu6dKkP/hSAvyEYBXRBMArohWDUF+x2+9mzZzMyMiIiIpo2bapjuIYqIBgF/BnBKOqMGrg56cYNG8aMGSMictOzcv3DEtyg/Kukn5GPHpFDG0JCQpKSksLDw6u7bMDfEIwCuiAYBfTih8GoyZcfdu7cuRdffPGzzz7LyMhwHqlXr964ceOeffbZjh07+rISAADgz9qEKm1Clbvai+i0OWmJQ5yZrPNlWKAYFrwlIhLRXEY9LYaKPVUpsqX85Z9yeGN+fv7y5csfeeSRaqsXAAAAqIO0rhjNysoaNmyY8yKBgYFfffVVaGhomTN/+OGHMWPGpKen//mt4ODgxYsX33nnnVoqgW+wYhTwZ6wYhT/QZ3PS1JPyjy6iOmTCHBn5ROXOnT9cft7arl27X375xWAwVE99gJ9ixSigC1aMAnphxWilffHFF3v37nWOJ0+e7C4VPX/+/Lhx48pMRUWkoKDgnnvusVgslzrIAAAAdBIaIAObKAObKM6XSXnq7lR1d6q6O0Xdl6Zml1TPp8YtEdUhpkAZeHelzx1yn/y8NTEx8bvvvhs2bJj3awMAAADqKK3B6ObNm13jqVOnupv29NNPp6SkeLiO3W6fPn36L7/8EhYWprEkAAAAb7minnJFPWVCKxERhyo/W9XdKeqeNHV3inooQy1xeOMzSgok4X0Rkd5/kdDKN0P0uEksTSXrwsKFCwlGAQAAgIrT2m+1a9cu5yA8PHzQoEFlzjl9+vSqVatcL81m81//+tdPPvnkgw8+uO2221zHk5OT58+fr7EeAACAamJQpItFubuD4e3+xj3jTHl3Bxy52bR4oPHOdoYuFsWgVPW6e9ZIbrqIyJCZVSrLJIOmicj69evPnDlT1SIAAAAAv6MpGLVaradPn3aOBwwYYDKVvf505cqVdvulp70aDIYvv/zyzTffnDhx4qRJkz766KO33nrLNXPFihUOh1eWXgAAAFSvAIN0DVdmdDKsGGI8+hdT1l0B20eb/n2N8c52htahlUlJty4SEWneTdpeU8VSBt8rxgC73b506dIqXgEAAADwP5qCUVcqKiLdunVzN+2zzz5zjW+55ZYbbrih9LsPPvjggAEDnOMzZ84cPHhQS0kAAAC6cG5O+nCMYcUQ48lbTefvMH15g/H5nobRLZQID08rPHdYTu8VqepyUaewaOk+RkSWLl3Kb8wAAABABWnaY/T8+fOucevWrcuck5aW9tNPP7leTps27c9z7r777oSEBOf4wIEDPXv21FIVAACA7pqGKE1bKGNaiHjenLQ479IguIGmzwsKFZHCwkJVVTVdBwAAAPAbmoLRvLw817hBg7K/zW/fvt21ciEkJKTMfUhLJ6HHjh3TUhIAAEBN49yctItFubuDiEiJQ05Y1YRkdcdFdZ+l/7GmXeTCMdm2WPrcUsUPyM+SPWtEZMqUKUaj0XuFAwAAAHWZplb6goIC19jdBqM7d+50jQcNGmQ2l9FL1qRJE9c4MzNTS0kAAAA13GWbk/7r8ZkiIie2y/kjVbzijmVSnC8i06dP916ZAAAAQB2nKRgNCgpyjVNSUsqcs23bNtf4+uuvL3NOVFSUolx6RkF2draWkgAAAGqX+6bdHRoaKiKybXFVzldViV8qItddd13Xrl29WhoAAABQl2kKRi99iRcRN8FoWlra/v37XS8HDx5c5nVKSkpc+2G5W3kKAABQJ4WGht5xxx0iIj+skoLK/0J87BtJ/lVEOo7V8PgmAAAAwP9oCkabN2/uGpe5N+g333zj2mC0fv363bt3L/M6pdvnS4etAAAA/uCBBx4QESnKlR9XVfpk5zpTS/Q7gTfO3m/3cmUAAABA3aUpGO3UqZOrm37Lli1/7oJftGiRaxwbGxsQEFDmdU6fPu0aN27cWEtJAAAAtU63bt0GDBggIrL1HanUY+UzkuTwJhGR2OmqMeCF/Y6Hf7A7eC49AAAAUAGaglGTyRQbG+scW63Wp556qvS733zzTXx8vOvlqFGj3F2ndLt927ZttZQEAABQG11aNPr7z/LDSlEdFTqnKE82zBGHXYwBMmia89gbRx1T4uwlFbsAAAAA4M80BaMicuedd7rGCxcuHD169Jo1a77//vu5c+fefPPNrrfMZvOtt97q7iI//vija9ypUyeNJQEAANQ6N998c1RUlIjIsnvlH13kq/mSm+529sVf5ONH5fFWsv0/IiLdx4gl2vXmB4mOCd/a8m3VXTIAAABQuylqpdq1/sRms/Xu3fvQoUOep82aNev1118v862ioqLGjRtbrVYRCQgIsFqtwcHBWkpCtQoKCioqKhKRwsJCs9msVxlWq7WoqOjSPyAB+EpxcXF6enpkZGRgYKDetQB10BdffPG3v/3t3Llzl14HBEmfiTJkprTuc+mIwyYH18vWRfLLtj867lv3lXuXS1S7y652dZSycbgpUre/q4G6ICcnJzc3Nzo6uvypALzHZrOlpqZaLBbCAcDH0tLSDAZDRESE3oX4jtZgVET27t07dOjQ3NxcdxNatWq1b98+d/9Zv/jii3HjxjnHffv23bVrl8Z6UK0IRgF/RjAKVDe73b5+/fqFCxd+++23f3xJa9lTBk+XrAsSv1Syfr90MDBY+t4qg++TVr3cXa2LRflqpPGKekr1Fw7UTQSjgC4IRgG9+GEwqrWVXkR69+69adOmZs2alfluu3btNm7c6OG/6dtvv+0aDxs2THs9AAAAtZTRaBw3btzXX3994sSJJ598MjIyUkTkzH5Zcb98+aIzFW3Xrt3LL7/8/o9ngqYu8ZCKisixLHXQBvsJKw9jAgAAAMrghWBURAYNGnTs2LFXXnmlX79+zm/wDRo0GDBgwGuvvXbw4MEuXbq4O/HgwYPffPON6+XIkSO9Ug8AAECt5kw/z549u3Tp0l69eomI0WgcO3bsV1995cxM7+rRaNMIU4OAcq5zOkeN3WDbn0Y2CgAAAFzOC630WiQnJyclJbledu/e3Wg06lgPykUrPeDPaKUH9PL11183a9asa9eulx3fm6beuMWWWljO6fUDZO31pmHN6KkHKodWekAXtNIDevHDVnqTvh/fuHHjxo0b61sDAABADde9e/cyf4/s3VCJH20avsV+NtfTT925JTLma9vKIcaJrb3TLQQAAADUAXw5BgAAqMU6WZQfbzJ1iyhnNWiRXW7/3r7kZ4dvqgIAAABqPoJRAACA2i06RLaNMvVvXE42alflvh32v++x+6YqAAAAoIYjGAUAAKj1ws3y9UjTyObl7yL6yiHH33baHTyNCQAAAH6vGvcYzcvLO3z48Pnz561Wa1ZWVr169SwWS2Rk5JVXXtmkSZPq+1wAAAA/VM8kXw4zzdhhX3ainH75t445Mopk+WBjAD+RAwAAwI95Pxg9ffr0e++9t379+qNHj9pstjLntGjRYujQoVOnTo2NjfV6AQAAAP7JZJD3Yo0RZpn/UznZ6Ie/OVIK1bXXm0IDfFMaAAAAUON4c51AUlLSzTff3LZt2zlz5hw6dMhdKioiZ8+eff/99wcPHhwTE/Pdd995sQYAAAB/pojMu9r4ch9juTO/Pa9ev8mWVuiDogAAAICayGvB6PLly7t27bp27VqHoxJPOz169OiwYcPuvffewkK+lQMAAHjHk1cZlsUaTeV90dudqg7eYDuXx4ajAAAA8EfeCUb/9a9/TZ06NTs7uwrnqqr63nvvjRw5Mjc31yvFAAAA4O4OhjXXGYPKWzl6LEsdtN7+i5VsFAAAAH7HC3uMLlu27IknnrjsYIsWLcaOHdujR4/OnTtbLBaz2exwOLKyss6cOXPo0KFvvvnmxx9/VNU/voJv27Zt8uTJ69at014PAAAARGRcS8PmEcrYr23ZJZ6mnclV+39p2zjcdE1U+Q+1BwAAAOoMpXQ6WQUXLlzo2rVrVlaW60jXrl3nz58/bNgwg8HTctTffvvt2Wef/fjjj0sX8OGHH95+++1a6kF1CwoKKioqEpHCwkKz2axXGVartaioKCoqSq8CAP9UXFycnp4eGRkZGBiody2Af0lJSTGbzWFhYVU4d1+aeuNXtpSCcqbVM8ln15uGX0E2CvwhJycnNzc3Ojpa70IA/2Kz2VJTUy0WS3BwsN61AP4lLS3NYDBEREToXYjvaG2lnzdvXulUdPr06QcPHhw+fLjnVFRE2rZt++GHH3766adBQUGug88884zGoBYAAACl9Wqo/HCTqW2DchLPPJvc9LXtk5OV2CweAAAAqNU0BaMOh2P16tWul5MmTVqyZInJVIn2/AkTJnz44YeulydPnty9e7eWkgAAAHCZNqHK9tGmqyLKyUaLHXLHVvui42SjAAAA8AuagtFjx45duHDBOQ4LC3vzzTercJHx48ePGzfO9fLbb7/VUhIAAAD+LDpEto4yDWxSTjZqV+X+BPvf99h9UxUAAACgI03B6Pnz513jm2++OTw8vGrXmTp1apnXBAAAgLeEm+WrEaYbm5e/i+grhxx/3Wl3sL8RAAAA6jRNwWhqaqpr3Ldv3ypfp0+fPq5xSkqKlpIAAADgTohJvhhmmtqh/G+Abx9zTPzOXsTKUQAAANRdmoLR0s9NatSoUZWv06hRI0W5tHiBp84BAABUH5NBlsYaH7uy/C+Ba087Rn1lyynxQVEAAACADjQFoy1btnSNMzIyqnydjIwM18PoW7RooaUkAAAAeKaI/Otq48t9jOU21X93Qb1uky210BdVAQAAAD6mKRiNiYlxLfA8fPhwla9T+txevXppKQkAAAAV8eRVhmWDjabyvgzuSVUHb7Cdy2PDUQAAANQ1moLR4ODgkSNHOseffPJJYWEVlxOsWrXKOahfv/6wYcO0lAQAAIAKmtLe8Nl1xmBTOdOOZ6nXfGH/KYNsFAAAAHWKpmBURB5//HHn9qDJycnPPfdcFa6QkJCwYsUK53jGjBmhoaEaSwIAAEAF3dTSsHm4KSywnGkX8tUhG20/pJCNAgAAoO7QGoxec801Dz74oHM8b968efPmVer0ffv2jR8/3m63i0j79u1nz56tsR4AAABUyuBoZccYU9OQcnYczSiSYZtsW5LIRgEAAFBHaA1GReT111+/+eabRURV1ccff3zs2LG//vpruWfl5eXNnj07NjY2NTVVRFq1arV582aWiwIAAPheTLiyY4yxXYNystE8m4z92vbxbw7fVAUAAABUKy8EoyaT6ZNPPvm///u/wMBAEfnyyy87deo0ZMiQf//739u2bUtJSSkuLhYRVVUzMzMPHDjw/vvv33nnnU2aNHnhhRfy8/NFZPTo0bt27Wrbtq32YgAAAFAFrUOV7WNM3SPLyUaLHXLHVvvrR8hGAQAAUOuVs9n+qVOnKv6YeFW91FrlcDji4uLi4uJcbxmNRme/fJkSEhI6derkHKenpzs3LQUAAIAvNQmWraNMN31t237RU7+8KvLoj/bkAvXlPkaf1QYAAAB4XTnBqN1uz8zM1P4xHlJREfHKRwAAAEAjS6B8M9J0x1b72tPlrAl95ZAju1je6m808Is2AAAAaicvtNIDAACgzjAb5ZPrjNM6lv8t8Z3jjr98Zy/09PM3AAAAUHMRjAIAAOB/GBV5d5DxiW7lf1H8/LTjxi227BIfFAUAAAB4WTmt9JGRkS+//LJvSnFig1EAAADdKSKv9DU2DVEe+dHuacNRka2/q9dttG0aYWoU5KPaAAAAAK8oJxgNDw9/8sknfVMKAAAAapSHYwzhZpm23W7zuOPo3jQ1doPtqxHGFvX5hRsAAAC1Bq30AAAAcOuu9oa11xuDy/kxXX7OUq/50nY4w/PqUgAAAKAGIRgFAACAJ2NaGLaMMIUFljPt93wZstGWkEw2CgAAgNqBYBQAAADliG2i7BhjalavnE75zCK5YbNt8zmyUQAAANQCBKMAAAAoX0y4sn20sX1YOdlovk1u+sa27ITHTUkBAACAGoBgFAAAABXSOlTZPtrUI7KcbNTmkGnx9vk/kY0CAACgRiMYBQAAQEU1Dpb40abrm5WTjaoij+2y/32P3TdVAQAAAFVAMAoAAIBKqB8gG24w/aV1+V8jXznkuCfebmPlKAAAAGokk9evaLfbjxw5smvXrlOnTlmt1qysLJvNVvHTV69erSjlrEEAAACAjsxG+fha4/0J8u7P5aSey084sorko2uNQUbflAYAAABUlDeD0d9+++3tt99etmxZVlZWlS+yevVqL5YEAACA6mBUZPFAY9MQeWF/OdnoujOOkVvUL24wNQjwTWkAAABAhXinlV5V1QULFnTp0uX111/XkooCAACgtlBEZvc0LuhnNJTX7bPtd/XajbaUAp+UBQAAAFSMd4LR++67b9asWcXFxV65GgAAAGqLh7oa3h9sDCjvS+W+NLXfl7bfslWfFAUAAACUzwut9G+++ea7775b+ojBYPj/7N13YFRV/v//c0syKYRUQpUivStNgQAGCCQQsKxBQcWyCIJYP/tVdv38BHf9fIS17IK7KthRUUGxJCGU0EtApSklSEdpqaSRTHLvnd8f42dkKbkwdzKTZJ6Pfzgzc+6ZN/+deeWUjh07xsbGbtu2raKiQgjRsmXLDh06FBUV5ebmHj9+3OH4jznxgAEDQkJCrFcCAAAA77u3nRwRKN21Rjtf7cHyR0ocg9K0jES1ZxQHygMAAMD3rK4YLSwsfO6551wvAwMD//KXv5w+fXrfvn3r1q1r0qSJ8/077rhj1apV33333dGjR3Nycj7//PP4+HjXUwUFBXPnzl21atWqVau4eQkAAKDOSW4prRmlRttMup0+L+LTtU1nWDcKAAAA37MajL7xxhslJSXOdkBAwFdfffU///M/sbGx1TwSExMzbty4NWvWfPvtt40bNxZCZGdnDxo06Mcff7RYDAAAAHzlplhpfbLaItTkj9yFdjFyubbsF7JRAAAA+JjVYPTrr792tZ977rlRo0Zd/bNjxozZvHlzs2bNhBAFBQW33nqrK2MFAABAndM1UtqYrHQIN8lGz2vi1lXaez+bXGcPAAAA1ChLwWhJScmuXbuc7QYNGjz11FPXOkLbtm2/+OIL5/b5Y8eOvfjii1bqAQAAgG+1DpM2JKu9YkyyUc0QkzboL/9INgoAAACfsRSM7tu3T9N+O2M/ISGhYcOGV+rp6nap/v37p6SkONsLFiwoLy+3UhIAAAB8q3GwWD9aTWhuko06hHjmO/2JLJ1N9QAAAPAJS8FoQUGBq927d+9qetrt9mo+vfvuu52Nc+fObdiwwUpJAAAA8LkGAX6fklMAACAASURBVCJ1hJrSxnyqOW+v8eB6XWPlKAAAALzOUjBaWFjoal/2wqWgoCBn4/z589WMc9NNN7naP/zwg5WSAAAAUBvYFPHpUGVyJ/PZ5ocHjT+s1suvuL8IAAAAqBGWglFZ/v1xVwZ6obCwMGfj1KlT1YwTGxvrPGZUCHHkyBErJQEAAKCWUCTxVpwys5f5hPPb40bSCq2o0gtFAQAAAL+xFIxeeKhocXFxNR2OHz9ezTiapjkcjmrGAQAAQF0kCTGrlzKvvyKbnDgq1p92xKVqp85z4igAAAC8xFIw2qxZM1f7wm31Lu3bt3c2jh49mpeXd6VxDh065GqrqmqlJAAAANQ2j3WVFw5RAswmnnsKHXGp+qFislEAAAB4g6VgtGPHjq7d9Hv37r20Q7du3ZwNh8ORkZFxpXHS09Nd7ZiYGCslAQAAoBa6p528bKTaIMCk29ESx6BUbVc+2SgAAABqnKVgNDg4uGPHjs72rl27Lu0wePBgV/uVV1657N30ubm5r732muulK0sFAABAfTK8ubR6lBpzmXPp/8OZchGfrm08QzYKAACAmmUpGBUXRJ8HDhw4duzYRZ927969S5cuzvaPP/54zz33FBUVXdjh0KFDI0aMyMnJcb0zdOhQiyUBAACgdurXSFqfrLYINTlw9FylSMjQlh4zvFMVAAAA/JPVYDQ+Pt7ZcDgcS5cuvbTD9OnTXe0vv/yydevWEyZMeP7555977rnk5OSuXbteuNR05MiRrmNJAQAAUP90iZA2jVE6hptko3ZdjFutv3uAbBQAAAA1RXJdB++ekpKSxo0bl5eXCyE6duy4b98+16mjTrqu9+nT57Ib7S8SFBSUlZV1ww03WKkHNS0oKMh5JEJFRYXNZvNVGUVFRXa7PTY21lcFAP6psrIyPz8/Ojo6MDDQ17UA/iUnJ8dms4WHh/u6EI8psIvRK7StOSYTUUmI2f2UZ3pY/Vs+4J6SkpLS0tKmTZv6uhDAv2ialpubGxERERwc7OtaAP+Sl5cny3JUVJSvC/Eeq7PMsLCwP/zhD5GRkZGRkTk5OcuXL7+og6IoX331VcuWLasfR1XV+fPnk4oCAAD4gyibWJWkjmhusm7UIcSz3+lPZOkcOAoAAACP88Cf3z/66KOC/zNq1KhLO7Ru3XrDhg2jR4++0gitW7dOT0+fOHGi9WIAAABQJzQIEKkj1XHXm09H5+017l+na+yqBwAAgEep3vmaVq1apaWlbdmy5euvv966dWtOTk5paWlMTEy3bt1GjRp15513sisTAADA3wTKYlG8EmUTb+03ST0/OmScqxSfD1WCvTR7BQAAQP3n1anlgAEDBgwY4M1vBAAAQG2mSOLNgUrrBtKM7/Xqe6aeMBKXO74doYbz93QAAAB4AifZAwAAwMee7Sn/a4Aim5w4KjacccSlaifLOHEUAAAAHkAwCgAAAN97tIv80S1KgNnkdE+hY1CafrCIbBQAAABWEYwCAACgVpjQVs5IVMMCTLodLXEMStN25pONAgAAwBKCUQAAANQWw5pJq0epMUEm3c6Wi8FpWuZJslEAAAC4j2AUAAAAtUjfRtKGZPW6UJMDR0urRPJK7YujJtfZAwAAAFdCMAoAAIDapXOEtPVWpXuUSTZq18Xda/S3s8lGAQAA4A6CUQAAANQ6zUKkdaPV/rEm2ajuEFM26bN26N6pCgAAAPUJwSgAAABqoyibWDVKTWxhko06hHhhh/FElm5w4igAAACuBcEoAAAAaqlQVXwzQr27rfmUdd5e4/71ehW76gEAAHDVCEYBAABQewXKYlG88lQ381nrx4eMOzK185oXigIAAEB9QDAKAACAWk0S4rWbldl9FdOeaSccQ5dp+XYvFAUAAIA6j2AUAAAAdcCzPeV/D1BkkxNHxbYcx+BU7dcyDhwFAACACYJRAAAA1A3TushfDFOCzFaO7jvnGJSm/1xENgoAAIDqEIwCAACgzri9tZw+Um0YYNLtWIljcJq2I49sFAAAAFdEMAoAAIC6ZGgzafVotVGQSbez5WJIurbqJNkoAAAALo9gFAAAAHVMnxhpQ7LasoHJgaOlVWLMSm3JUcM7VQEAAKBuIRgFAABA3dMpQto6Vu0eZZKN2nUxfo2+IJtsFAAAABcjGAUAAECd1DRErB+tDmhsko3qDjFlkz7je907VQEAAKCusBqM2u12j9QBAAAAXKtIm1iZpCZdZ5KNCiHm7DYe26IbnDgKAACA/2M1GL3jjjvGjRuXmZnpcDDNBAAAgLeFquLbBPWBDubT2n/tMyau16vYVQ8AAAAhhPVgtLKycsmSJQkJCR07dpwzZ05ubq5HygIAAACukiqL9wYr/9XdfGb7ySFj1AqttMoLRQEAAKC289gZowcPHpwxY8Z1113HAlIAAAB4mSTEKzcps/sqpj0zTzqGLdPyKrxQFAAAAGo1D1++ZLfbnQtIO3fuPGfOnLy8PM+ODwAAAFzJsz3l9wcrqtkM97tcx5A07dcy/pAPAADg16wGo7fccktYWNil7x84cMC5gPT+++/fvHmzxW8BAAAArsYDHeQlw5Qgs5Wj+8454lL1A0VkowAAAP7LajD63HPPnTx5cv78+QMHDrz004qKioULF8bFxTkXkObn51v8OgAAAKB6t7WSlyWqDQNMuh0vdQz4VtuaQzYKAADgpzywlT4sLGzy5MmbNm3as2fPs88+GxkZeWmf7OzsGTNmtGjRwnkCqfUvBQAAAK4kvqm0ZrQaG2zSrcAuhi/TVp4kGwUAAPBHnjxjtGvXrrNnzz558uTixYuHDx9+aYeKigrnCaRdunSZM2dOQUGBB78dAAAAcOkdI2WNVds2lKrvVqaJMSu0xUcM71QFAACA2sPDly8JIYKDg1NSUlatWrV3794rLSDdv3//jBkzmjdvzgJSAAAA1JDrw6SNyWrPKJNstNIQE9bqb+0nGwUAAPAvng9GXbp06TJ79uxTp06ZLiDt2rXrnDlzCgsLa64YAAAA+KGmIWLtaHVgY5NsVHeIqZv1Gd/r3qkKAAAAtUENBqNOQUFBFy4gjYqKurTPvn37ZsyY0axZs3HjxnGFPQAAADwo0iZWJqmjrjPJRoUQc3Yb07foBieOAgAA+IcaD0ZdnAtIjx8//vbbb/ft2/fSDs4FpHFxcX369HnnnXfOnz/vtdoAAABQj4Wo4psE9aEO5lPff+8z7lunV7GrHgAAwA94Lxh1atCgwaRJk7777rsdO3ZMmTJFUZRL+2zfvv3hhx9u0aLFM888c/bsWS9XCAAAgPpHlcU7g5U/dTef/S46bCQt10qqvFAUAAAAfMnbwajT2bNnV65cuXr1al2/4kFOhYWFL7/8ctu2bWfOnGm3271ZHgAAAOofSYiXb1Jm91VMN9WvPuUYtkzLq/BGVQAAAPAVrwajDocjMzNz3LhxLVu2nDFjxqFDh0wfKSsr++tf/9qvX79ff/3VCxUCAACgfnu2p/z+EEU1mwV/n+sYnKb9UsaBowAAAPWWl4LRs2fPzpkzp3379gkJCUuWLKmsrLyoQ/PmzWfOnLlv377XX3+9R48eF336448/Dh8+nFNHAQAAYN397eUvhinBqkm3/eccN3+j/1RANgoAAFA/1WwwahjGqlWrUlJSnEtEDx8+fFEHSZKGDx/+5ZdfHjt2bNasWZ07d54+ffru3btXr16dnJwsy7+Xd+DAgblz59ZotQAAAPATt7aSM0aq4YEm3U6dd9ySrmXlkI0CAADUQzUVjJ49e3b27NkdOnQYMWLEF198cekS0aioqKeffjo7O3vVqlV33HGHqv7Hn+yHDh2ampqalZXVrl0715sLFy6soWoBAADgb4Y0lTYmq81CTE4cLbCLhGXa8l/JRgEAAOobsx1E18gwjNWrVy9YsOCbb76pqrr8XZ79+vWbOnXqXXfdFRwcXP1o/fr1S09P79q1q6ZpQogDBw4UFxc3bNjQszUDAADAP3WPkjaNUUZk6IeKq8s9yzRx60rtwyHK3W19c3MpAAAAaoLHgtEzZ868//7777zzzpEjRy7bISQkZMKECY888kjv3r2vftgOHTqMHDkyPT1dCOFwOHJycghGAQAA4CltwqSNY9Sk5dqu/Oqy0UpDTFirny4XT3UjGwUAAKgnrAajhmFkZmYuWLDg22+/vdIS0c6dOz/yyCMTJ06MiIhw4ys6dOjgDEaFEBUVFe7XCgAAAFyiSbBYO1odu1LbeKa6bNQhxNNb9bPljtl9Fa/VBgAAgJpjNRgdN27cl19+edmPAgICbrvttqlTp95yyy2SZHJ4UzVYIgoAAIAaFREoViWpE9bqS48Z1fecs9soqRKv91dk96e3AAAAqBWsBqNFRUWXvtmsWbP77rvv0Ucfve666yyODwAAAHiBTRGLhylTNol3D5hko2/sM06fF4vilSBWjgIAANRlnrx8SZblhISEqVOnJicnK4rH5onDhw93XdPUpEkTTw0LAAAAXEiRxNuDlGib+PuPJtnoV8eM0SscXyWoDQO8UxoAAAA8zzPBaERExLhx45588snOnTt7ZMALxcXFxcXFeXxYAAAA4CKSEHP6Kc1CpKe26tUdOCrEmlOOYenaskS1UZCXagMAAIBnWQ1G+/TpM3HixJSUlKAgpoQAAACoD57oJkfaxB836lq1K0d/yHMMTtNWJCotG3DgKAAAQN1jNRh96aWXPFIHAAAAUHtMbC9H2sRda/Ryrbpu2eccN3+rLU9Ue0SRjQIAANQxsq8LAAAAAGqjMS3l5YlqeKBJt9PnxS3p2paz1e+8BwAAQK1DMAoAAABc3uAm0qYxavNQk9WghXYxIkPL+IVsFAAAoC4hGAUAAACuqFuktDFZaR9uko2WaWLsKu2Dn02uswcAAEDtQTAKAAAAVKdNmLQxWb0h2iQb1Qzx0Ab91Z/IRgEAAOoGq5cvHTx4sLi42AN1qGp4eHhERERERIT10QAAAAAPahwsNiart2dqmSer2y/vEOJP2/TcCsfsvorXagMAAIB7rAaj06ZNy8zM9EgpTrGxsX369Ln55pvvvffeNm3aeHBkAAAAwG0NAkTaCPXedfoXR03WhM7ZbZwtF2/HKSq7swAAAGqxWjdZy8nJWbZs2fPPP9+uXbvRo0fv2bPH1xUBAAAAQghhU8RnQ5WHO5lPoT/42UhZrVfoXigKAAAAbqp1waiLYRjLli3r27fv66+/7utaAAAAACGEUCQxP06Z2ct8Fv31cSNpuVZc5YWiAAAA4I7aG4w6VVRUPP7442SjAAAAqCUkIWb1Uub2V2ST25jEutOOoelaTrlXygIAAMA1snrG6MKFC8vLy4UQaWlpf/nLX8rKypzvt2vXLjEx8YYbbmjdunVERISqqufPny8sLNy7d+8PP/yQnp7u6tmjR49//etfMTExRUVF+fn5O3fuXL9+/erVqx2O3w+2f+qpp3r06DFkyBCL1QIAAAAe8XhXOcomHtqgV1V74uj2PEf/b7WVSUrbhmYxKgAAALxLujB/dNvf/va3mTNnOofq16/fK6+8MmjQoGr6l5WVvffeezNnziwsLBRCNGnSJC0trXfv3q4OP//882OPPbZy5UrXO/3799+yZYv1UmFRUFCQ3W4XQlRUVNhsNl+VUVRUZLfbY2NjfVUA4J8qKyvz8/Ojo6MDAwN9XQvgX3Jycmw2W3h4uK8LwcXSTjjGrdHKNZNuTUNERqLaM4pstI4pKSkpLS1t2rSprwsB/Iumabm5uREREcHBwb6uBfAveXl5sixHRUX5uhDv8cBW+tdff/355593pqLPPPNMVlZW9amoECI0NPSxxx7bs2dP9+7dhRBnzpxJSko6duyYq0OHDh0yMjKmTZvmeicrK2vdunXWqwUAAAA8JbmltHaUGm32x+LT50V8urbpjAdWJAAAAMBTrAajhw8ffuaZZ5ztyZMnz5kzR5avdsxmzZqtXbu2SZMmQojc3NwpU6b8R2WyPHfu3P79+7veSUtLs1gtAAAA4Fk3xUrrk9UWoSarQQvtYuRybdkvZKMAAAC1hdVg9O9//3tFRYUQIjIy8u9///u1Ph4dHT1nzhxne+XKlVu3br3wU1VV//rXv7perl+/3lqxAAAAgOd1jZQ2Jisdwk2y0fOauHWV9t7P1R5KCgAAAG+xFIxqmvbFF18427fddpt7517deeedoaGhzvZnn3120afDhw93LikVQuzevdsjJ6ICAAAAntU6TNqQrPaKMclGNUNM2qC/8hPZKAAAgO9ZCkazs7MLCgqc7X79+rk3SEhISNeuXZ3tzZs3X9ohLi7O2aiqqiouLnbvWwAAAIAa1ThYrB+tJjQ3yUYdQvy/bfqM73X+4A8AAOBbloLRQ4cOudqNGjVye5zGjRs7G4cPH77001atWrnarhwWAAAAqG0aBIjUEWpKG/M59pzdxoPrdY2VowAAAL5jKRgtLS11ta2s5SwqKnI2SkpKLv00MjLS1a6srHT7WwAAAICaZlPEp0OVyZ3Mp9kfHjTuXK2Xa14oCgAAAJdhKRi98FDRAwcOuDeIYRg///zzpQO6XBiGhoSEuPctAAAAgHcokngrTpnZy3ym/c1xI2mFVsSf/gEAAHzBUjDarFkzV3vp0qXu3Yy0efPmM2fOONtNmza9tMOF2+fdu98JAAAA8CZJiFm9lHn9FdnkxFGx/rQjLlU7dZ4TRwEAALzNUjDauXNn14XyBw8eXLBgwbWOYBjGjBkzXC/79OlzaZ/9+/c7G5GRkQ0bNnSrUgAAAMDbHusqLxyiBJjNuPcUOuJS9UPFZKMAAABeZSkYDQkJGT16tOvlf/3Xf61evfrqHzcMY/r06Vu2bHG9k5KSclEfXdd37NjhbLdr185CsQAAAIC33dNOXjZSbRBg0u1oiWNQqrYrn2wUAADAeywFo0KIxx57TJJ+2yBUVlaWnJz8t7/9raKiwvTBn3/+edSoUW+++abrnS5duiQkJFzUbcOGDYWFhc72ZdeTAgAAALXZ8ObS6lFqTJBJtzPlIj5d23iGbBQAAMBLrAajcXFxkyZNcr2sqKh4/vnnW7Vq9fjjj2dkZJw6derCzpqm7d2798MPP0xOTu7ateuKFSt+r0OWFyxYEBBw8R/TFy1a5GoPGDDAYrUAAACA9/VrJK1PVluEmhw4eq5SJGRoS48Z3qkKAADAz0nu3Zh0IedC0XXr1l32U5vNFhYWFhoaWlxcfO7cuct+nSRJ8+bNmz59+kXvnzlzpk2bNs71p6qqnjlzJjo62mK1sCgoKMhutwshKioqbDabr8ooKiqy2+2xsbG+KgDwT5WVlfn5+dHR0YGBgb6uBfAvOTk5NpuNWyjruuOljpEZ+oEik+m3Ion5ccofO1pdwQDrSkpKSktLL3tDLICao2labm5uREREcHCwr2sB/EteXp4sy1FRUb4uxHtU60OEhoampaWlpKRkZGRc+qndbrfb7Xl5eVd6PDAwcN68eVOmTLn0o9OnT8+aNcvZjomJIRUFAABA3dWqgbRlrDp6hbY1p7psVHeIhzfq+XbxTA+yUQAAgBrkgWBUCBEaGrps2bIlS5ZMnTo1Pz//6h+88cYb33333RtvvPFKn17pIwAAAKDOibKJVUnqHzK1lSery0YdQjz7nX6yzPHP/orJ9nsAAAC4y5N/hU5JSTly5Mgbb7xhmmYGBQWNGzcuMzNz+/btRJ8AAADwHw0CROpIddz15vPweXuNB9brGieOAgAA1AzPrBh1adiw4dSpU6dOnVpQULBt27affvopNzf33LlzZWVlkZGRkZGRzZs379u3b8+ePS+9ZwkAAADwB4GyWBSvRNnEW/tNUs+FB41Cu/h8qBLs4Wk7AAAAPB2MukRFRSUlJSUlJdXQ+AAAAEDdpUjizYFK6wbSjO/16numnjASlzu+HaGGc+8dAACAR1kKRvPy8t59913Xy7vuuqt169ZWKwIAAAD8w7M95QYB4vEs3aj2pvoNZxxxqdryRKV5KCeOAgAAeIylYHTnzp0zZsxwtsPCwqZPn+6JkgAAAAB/8WgXOdImHlivV1W7q35PoWNQmr4iUWkfTjYKAADgGZYuX8rJyXG14+LiQkNDLdcDAAAA+JcJbeWMRDXM7AT+oyWOQWnazvxqF5cCAADgqlkKRhVFcbVbtmxpuRgAAADAHw1rJq0epcYEmXQ7Wy4Gp2mZJ8lGAQAAPMBSMBoTE+Nqc8s8AAAA4La+jaQNyep1ZqeIllaJ5JXaF0dNrrMHAACAKUvBaOfOnV3tM2fOWC4GAAAA8F+dI6Sttyrdo0yyUbsu7l6jv51NNgoAAGCJpWC0efPmHTt2dLY3b97scLCpBwAAAHBfsxBp3Wi1f6xJNqo7xJRN+qwduneqAgAAqJcsBaNCiAceeMDZOH369Nq1a62WAwAAAPi3KJtYNUpNbGGSjTqEeGGH8USWbrA4AQAAwC1Wg9Fp06Y1a9bM2X766acrKioslwQAAAD4tVBVfDNCvet687n6vL3G/ev1KnbVAwAAXDurwWjDhg0/+OADVVWFELt3705JSSkvL/dEYQAAAID/CpTFp0OVp7qZT9c/PmTckamd17xQFAAAQL1iNRgVQiQkJHz22WfBwcFCiLS0tB49enz99de6zoFHAAAAgPskIV67WZndVzHtmXbCMXSZlm/3QlEAAAD1h2rx+R07dhQUFISHh7/00kvPP/98cXHxoUOHbr/99mbNmg0bNuyGG25o0aJFeHi4opjP55yGDx9usSQAAACg3ni2pxwWIB4zO0t0W45jSJq2PFFpEWpyOCkAAACcJItXySckJGRmZnqqGiGEYRiSxGSu9goKCrLb7UKIiooKm83mqzKKiorsdntsbKyvCgD8U2VlZX5+fnR0dGBgoK9rAfxLTk6OzWYLDw/3dSHwma+OGRPW6hVmm7Jah0krEpUO4UynPaOkpKS0tLRp06a+LgTwL5qm5ebmRkREOHemAvCavLw8WZajoqJ8XYj3eGArPQAAAIAadXtrOX2kGhZg0u1YiWNwmrYjj4vqAQAAzBGMAgAAAHXA0GbSmtFqoyCTbmfLxZB0bdVJslEAAAATBKMAAABA3dAnRtqQrLZsYLJTvrRKjFmpLTlqeKcqAACAOsrq5UsLFy4sLy/3SClOHDAKAAAAXEmnCClrrJK4XP+poLo1oXZdjF+jFw4UkzuxEgIAAODyrAajnEQOAAAAeFOzEGn9aDV5pbblbHXZqO4Qj2zST513zOqleK02AACAOoQ/IAMAAAB1TKRNrExSk64z2WvlEOKFHcbjWbrBiaMAAACXIBgFAAAA6p5QVXydoI5vaz6ff32vMXG9XsWJowAAAP+JYBQAAACokwJl8Um88nR38yn9J4eMUSu00iovFAUAAFBnEIwCAAAAdZUkxKs3KbP7mp8imnnSMWyZllfhhaIAAADqBoJRAAAAoG57tqf8/mBFNZvaf5frGJKm/VrGgaMAAABCWL+V/rJycnI2b968ZcuWX375pbCwsLCw0DCM+Pj4l19+uSa+DgAAAPBzD3SQI2xi/Bq9Qq+u275zjrhUfUWS0jHc5OImAACAes/DwejatWtfe+21ZcuWGcbFp7u3bNny0v4rV678y1/+4mx37979/fff92w9AAAAgJ+4rZW8LFG6baVWXO1ZosdLHQO+1dJHqjfHko0CAAC/5rGt9MXFxRMmTBg6dGhaWtqlqeiVDBky5PTp09u3b9++ffvChQtPnDjhqXoAAAAAfxPfVFozWo0NNulWYBcJGdrKk+ypBwAAfs0zwejx48dvuOGGTz/99FoftNlsjz76qLNtGMaiRYs8Ug8AAADgn3rHSFlj1bYNTVaDllaJMSu0xUeudkEDAABA/eOBYDQvLy8xMfHo0aMXvhkUFBQXFzd+/PimTZtW//j48eMl6bd5W0ZGhvV6AAAAAH92fZi0MVntEWWSjVYaYsJa/a39ZKMAAMBPeSAYffTRR7Ozs10vO3bs+NFHHxUWFm7cuHHRokUdOnSo/vE2bdr06tXL2d66dWtZWZn1kgAAAAB/1jRErButDmxsko3qDjF1sz7j+2ovbAIAAKinrAaj33333ZIlS1wvx48fv2PHjnvvvTcoKMj5jms1aDXi4+OdjcrKyh07dlgsCQAAAECkTaxMUkddZz4bn7PbmL5FNzhxFAAA+Bmrwejrr7/ucPw2h0pKSlq4cGFISMi1DnLjjTe62gcOHLBYEgAAAAAhRIgqvklQH+pgPuf/9z7jvnV6FbvqAQCAP7EUjBqGsWLFCmfbZrP9+9//VlX1oj5Xs2K0S5curvbBgwetlAQAAADARZXFO4OVP3U3n/YvOmwkLddKqrxQFAAAQK1gKRjdv39/bm6us52QkNCmTRv3xomOjna1CwoKrJQEAAAA4EKSEC/fpMzuq5guWFh9yjFsmZZX4Y2qAAAAfM5SMHrmzBlXOy4u7rJ9rmbFaEREhKtdXFxspSQAAAAAl3q2p/z+EEU1m/5/n+sYnKb9UsaBowAAoP6zFIy6losKIRo3buz2OJWVlVbKAAAAAGDq/vbyF8OUIMWk2/5zjpu/0X8qIBsFAAD1nKVgNCAgwNWuqnL/OKL8/HxX+8Jt9QAAAAA86NZWckaiGh5o0u3Uecct6VpWDtkoAACozywFo40aNXK1z549e9k+V7OVfs+ePa52TEyMlZIAAAAAVOOWptLGZLVZiMksvcAuEpZpy38lGwUAAPWWpWD0wu3zW7dudXucdevWudrt27e3UhIAAACA6nWPkjaNUdo1NMlGyzRx60rts8OGd6oCAADwMkvBaPv27WNjY53ttWvXXrgj3sV0xWhpaeknn3ziehkfH2+lJAAAAACm2oRJG8eoN0SbzNUrDTFhrf6PPWSjAACgHrIUjMqyPHLkSGf7/PnzL7/8shuDzJkzp6CgwNnu2LFjixYtrJQEAAAA5+rjQAAAIABJREFU4Go0CRZrR6txTUyyUYcQT2/VZ3yve6cqAAAAr7EUjAohJkyY4Gq/8sorK1euvKhD9StG09PT//d//9f18pFHHrFYDwAAAICrFBEoMpPUO1qb/yiYs9t4dItucOIoAACoR6wGo4mJiUOGDHG2dV0fO3bsBx984HCYz5gMw5g7d+5tt91mGL9tzGncuPHkyZMt1gMAAADg6tkUsXiY8seO5r8L3thn3Llar2DlKAAAqC+sBqNCiFdffdVmsznbdrv9wQcfHDhw4CeffFJcXCwut2I0Jyfnvffe6969+5NPPqlpmuv9V155JSQkxHo9AAAAAK6eIom3BynP9DD/afDVMWP0Cq24ygtFAQAA1DjV+hC9e/d+//3377nnHtdC0aysrKysLFmWW7VqVVhY6Hxzx44do0ePPnz48MGDB12rRF0ee+yxe++913oxAAAAAK6VJMScfkqzEOmprXr1m7/WnHIMS9eWJaqNgrxUGwAAQA3xQDAqhBg/fnxhYeGTTz5ZVfX7n48Nwzh69Kjr5fHjx48fP37Zx++7775XX33VI5UAAAAAcM8T3eRIm/jjRl2r9hb6H/Icg9O0FYlKywYmFzcBAADUZh7YSu80bdq0jRs3tm7d+pqeCggI+Mc//rFw4cKAgABPVQIAAADAPRPby0uHK8Fmyyeyzzlu/lb7qYDLmAAAQB3msWBUCHHTTTdlZ2d/+OGHnTt3Nu0cEBBw33337du378knn/RgDQAAAACsGNNSXp6ohgeadDt9XgxJ17acJRsFAAB1lWe20rvYbLaJEyfee++9P/zww6ZNmzZu3Hjs2LGCgoKCgoKAgIBGjRpFR0f37Nlz2LBh8fHx0dHRnv12AAAAANYNbiJtGqMmLtdPllWXexbaxYgMbckwNek69tQDAIC6R3LdmARcjaCgILvdLoSoqKiw2Wy+KqOoqMhut8fGxvqqAMA/VVZW5ufnR0dHBwaarSMC4FE5OTk2my08PNzXhcC/HC1xjFyuHywy+b0QKIsPhijj23pyL1otUVJSUlpa2rRpU18XAvgXTdNyc3MjIiKCg4N9XQvgX/Ly8mRZjoqK8nUh3lMPpy8AAAAArGsTJm1IVm+INlkNWmmIe9bqr/5U7YVNAAAAtQ/BKAAAAIDLaxIs1o5WBzcxyUYdQvxpmz7je907VQEAAHgEwSgAAACAK4oIFCuT1D+0Mf/hMGe38eAGXWPlKAAAqCMIRgEAAABUx6aIz4cqD3cy/+3wwc9Gymq9gpWjAACgLiAYBQAAAGBCkcT8OGVmL/OfD18fN0Yt14qrvFAUAACAJWoNjVteXl78f67pwd69e9dQSQAAAADcJgkxq5cSGSg9vU03qr2pfu1px9B0bdlINZYLpQEAQC3myWC0pKRk8eLFGRkZ27dvP3bsmHuDGIYhSSaHuwMAAADwiSe6ydFB4qENelW1Z4luz3P0/1ZbmaS0bcjcHgAA1FKeCUY1TXv11VdffPHF0tJSjwwIAAAAoHa6t50cESiNW6OVa9V1O1LiGJSmZSSqPaPIRgEAQG3kgTNGz58/P3z48BkzZpCKAgAAAP4guaW0dpQabTPpdvq8iE/XNp+tduM9AACAj3ggGE1JSVm/fr31cQAAAADUFTfFSuuT1eahJqtBC+1iRIa27BeyUQAAUOtY3Uq/dOnSZcuWXfhOcHBwcnLyzTff3KFDh5CQkPDw8GsakANGAQAAgDqha6S0KVkZuVz/uai63PO8Jm5dpc2PUx7q4IFlGQAAAJ5iNRh99dVXL3z54IMPvvLKK1FRURaHBQAAAFD7tQ6TNiSrScu1nfnVZaOaISZt0Avs4k/dyUYBAEBtYWleUlBQsG3bNtfL6dOnv/fee6SiAAAAgP9oHCw2JKsJzU02fjmE+H/b9Bnf62yqBwAAtYSlYHTPnj26rjvbMTExs2fP9kRJAAAAAOqSBgEidYR6ZxvzHxdzdhsPrtc1wwtFAQAAmLAUjObm5rraiYmJoaGhlusBAAAAUPfYFPHZUGVyJ/PfFx8eNO5crZdrXigKAACgOpaC0fLycle7ffv2losBAAAAUFcpkngrTpnZy/wnxjfHjaQVWlGlF4oCAAC4IkvBaGRkpKsdEBBguRgAAAAAdZgkxKxeyrz+imxy4qhYf9oxKE07dZ4TRwEAgM9YCkY7d+7sal+4rR4AAACA33qsq7xwiBJg9lPjpwJHXKp+qJhsFAAA+IalYPT666937aC/8Hp6AAAAAP7snnbyspFqA7NNZUdLHINStV35ZKMAAMAHLAWjQoiHHnrI2di2bdvRo0ct1wMAAACgPhjeXFo9So0JMul2plzEp2ubzpCNAgAAb7MajE6fPr1Vq1ZCCF3Xn332WU+UBAAAAKA+6NdIWp+stgg1OXD0XKUYnqEtPWZ4pyoAAAAnq8FogwYNFi1aFBQUJIRYsmTJrFmzPFAUAAAAgHqhS4S0aYzSMdwkG7XrYtxq/d0DZKMAAMB7rAajQogBAwakp6dHR0cLIV544YWUlJQTJ05YHxYAAABAPdCqgbRlrHpzrEk2qjvEwxv1v/9INgoAALxEcjgsneZz8ODB4uJiIcSRI0ceeeSRgoICIYSqqklJSfHx8R07doyKigoIMDt0/QK9e/e2Ug9qWlBQkN1uF0JUVFTYbDZflVFUVGS322NjY31VAOCfKisr8/Pzo6OjAwMDfV0L4F9ycnJsNlt4eLivCwHcV1ol/pCprTxp/uvj8a7yP/srJjGqV5SUlJSWljZt2tTXhQD+RdO03NzciIiI4OBgX9cC+Je8vDxZlqOionxdiPeoFp+fNm1aZmbmRW9qmpaampqamurGgIZhSFJtmAUBAAAA8JgGASJ1pHrfOn3xEZM1ofP2GucqxbuDFNUD29sAAACuiLkGAAAAAG8IlMWieGVKJ/PfIAsPGndk6uWaF4oCAAD+i2AUAAAAgJcokngrTpndVzHtmXrCSFyuFVV6oSgAAOCnCEYBAAAAeNWzPeV/DVBkswO0NpxxxKVqJ8ssXYoAAABwJVbPGH3jjTecly95CgeMAgAAAPXeo13kSJt4YL1eVe2Jo3sKHYPS9BWJSvtwfiYAAAAPsxqMtm/f3iN1AAAAAPArE9rKjYOl21dpJVXVdTta4hiUpi1PVG+IJhsFAACexFZ6AAAAAL4xrJm0epQaE2TS7Wy5iE/XNpxhTz0AAPAkglEAAAAAPtO3kbQhWb0u1GQ16LlKMSJD+/JotRvvAQAArgXBKAAAAABf6hwhbRqjdDQ7RdSui7vW6G9nk40CAADPIBgFAAAA4GMtG0hbxqr9Y02yUd0hpmzSZ+3QvVMVAACo3whGAQAAAPhelE2sGqUmtjDJRh1CvLDDeCJLNzhxFAAAWGP1VvrLKisr27ZtW1ZW1i+//FJYWFhQUCCEGDhw4KxZs2ri6wAAAADUA6Gq+GaEOnGd/vkRk/3y8/YaBXbx3mAlgJUeAADAXR4ORnfu3Pnaa68tXry4srLyoo/CwsIu7b9mzZqXXnrJ2e7Wrds//vEPz9YDAAAAoA4JlMWnQ5VmIeIfe0yy0Y8PGecqHYuHqsE1stgDAADUfx6bRJSXlz/xxBNvv/32NT1188037969Ozc3Vwixdu3aZ555pmnTpp4qCQAAAECdIwnx2s1K42BpxvcmZ4mmnXDEL9PSR6rRNu+UBgAA6hXP7Dw5c+ZMv379rjUVFUKEhIRMmzbN2dZ1fdGiRR6pBwAAAECd9mxP+d8DFNnkxFGxLccxJE07WcaBowAA4Jp5IBgtLi5OSkras2fPf4wry127dk1MTGzUqFH1j0+YMMHVXrZsmfV6AAAAANQD07rIXwxTghSTbnsLHXFp+s9FZKMAAODaeCAYffzxx3ft2uV6ed11173++uu5ubl79uzJyMjo0qVL9Y936NChR48ezvaWLVvKy8utlwQAAACgHri9tZw+Ug0LMOl2rMQxOE3bkUc2CgAAroHVYHT37t0fffSR62VycvKPP/44ffr0qKgo5zuSZLb7RYhhw4Y5GxUVFTt37rRYEgAAAIB6Y2gzac1otVGQSbez5WJIurbqJNkoAAC4WlaD0blz5xrGb/dFDhky5IsvvoiIiLjWQW688UZXOzs722JJAAAAAOqTPjHShmS1ZQOTJRelVWLMSm3JUZPr7AEAAJwsBaMOhyMjI8PZDggImD9/vs128X2QV7NitFu3bq72wYMHrZQEAAAAoP7pFCFljVW6R5n8uLDrYvwafUE22SgAADBnKRjNzs4+c+aMsz106NCOHTu6N050dLSrnZ+fb6UkAAAAAPVSsxBp/Wh1QGOTbFR3iEc26bN26N6pCgAA1F2WgtHTp0+72kOGDHF7nAt33xcXF1spCQAAAEB9FWkTK5PUpOtMslGHEC/sMB7P0g1OHAUAAFdmKRjNzc11tZs0aXLZPlezlV7TNFfbdWIpAAAAAFwkVBVfJ6h3tzX/IfP6XmPier2KnxcAAOAKLAWjsvz747ru/l6VvLw8VzsmJsZKSQAAAADqt0BZLIpXnu5u/lvmk0PGqBVaaZUXigIAAHWPpWA0NjbW1c7Jyblsn6tZMXrhTfQXnjcKAAAAAJeShHj1JmV2X8W0Z+ZJx7BlWl6FF4oCAAB1jMeC0e+++87tcdavX+9qX3/99VZKAgAAAOAnnu0pvz9YUc1+03yX6xiSpv1axoGjAADgP1gKRjt06OBa4LlmzZqioqJL+5iuGC0vL//4449dL+Pj462UBAAAAMB/PNBBXjJMCTJbObrvnCMuVT9QRDYKAAB+ZykYVRRlxIgRznZJScncuXPdGOSf//ynaxv+9ddf37p1ayslAQAAAPArt7WSlyWqDQNMuh0vdQz4VtuaQzYKAAB+YykYFULcddddrvaLL764efPmizpUv2J0/fr1M2fOdL18+OGHLdYDAAAAwN/EN5XWjFZjg026FdhFQoa28iTZKAAAEMJ6MDp27NibbrrJ2a6qqkpMTPzqq6+u8tkPP/wwMTGxquq3SyKjo6MfffRRi/UAAAAA8EO9Y6SssWrbhiYHeZVWiTErtMVHDO9UBQAAajOrwagkSa+++qqqqs6XpaWld9xxR1JSUnp6ut1uF5dbMVpaWrp06dL+/fs/8MADFRW/Xw/54osvhoWFWawHAAAAgH+6PkzamKz2iDLJRisNMWGt/tZ+slEAAPydan2IgQMHvvHGG5MnT3a9s3z58uXLl4eEhHTs2PGXX35xvvnTTz/dc889hw8f3rVrlzMzvdADDzzwyCOPWC8GAAAAgN9qGiLWjVbHrNQ2n61uv7zuEFM368dKHbP7ml3bBAAA6i8PBKNCiIcffjgvL++///u/DeP3v7ueP39+586drpeHDh06dOjQZR8fO3bsm2++6ZFKAAAAAPizSJtYmaSmrNaW/WJyluic3UZplZjXX5FN1pgCAID6yepWepc///nPK1asaNKkybV9vSzPnDnzq6++CgoK8lQlAAAAAPxZiCq+SVAf6mD+Y+ff+4z71ulV7KoHAMAveSwYFUIMHz583759L730UtOmTc2/WJbvuuuu3bt3z5o1S5Y9WQYAAAAAP6fK4p3Byp+6m//QWHTYSFqulVR5oSgAAFC7SA6HyQYTN1RWVq5bt27Tpk2bNm06evRoQUFBcXGxLMsxMTHR0dE9e/YcNmxYQkJCq1atPP7VqGlBQUHOI2IrKipsNpuvyigqKrLb7bGxsb4qAPBPlZWV+fn50dHRgYGBvq4F8C85OTk2my08PNzXhQB1z5zdxp+/101/8/RtJC0bqcZcsI0tKytr3rx5R44cuf/++++77z7uiQW8RtO03NzciIiI4OBgX9cC+Je8vDxZlqOionxdiPfUSDB6KU3TXDfXo04jGAX8GcEo4CsEo4AVHx40Jm3UNbP98p0jpBVJSpQ4v2jRojfffPPC+xLCwsLuvffeadOmdevWrWZrBUAwCviOHwajXtrDTioKAAAAwCfuby9/MUwJMrt/fn92dteUJ5o2bzF58uTfUtHQKNG6jxCipKTkzTff7N69+5AhQz7//PPKysqarxoAANQ48koAAAAA9dytreSMROm2VVrRZSPNnd+KtW+I7LUlru10rfuI+EdE3xQRECx++VGse0ts+1TYyzZs2LBhw4YmTZpMmjTpscceYwMTAAB1mpe20qPeYCs94M/YSg/4ClvpAY/YkedIWqHllP/nu1sWivcn/dYOCBb9xolbHhGte1/8cHmRyPpYrH1LnDngfKNr164//fSTJEk1XDXgd9hKD/gKW+kBAAAAoH7qFSNljVXbNfzPKDPzdSGEiGgqUuaIl4+KB96+TCoqhAgOF0MfFX/9UfzXCtFztBBi7969q1at8kLZAACghhCMAgAAAPAX14dJG8eoPaP+Lxs9tEX8slsIIe74HzHiKRFqtkZGkkSneDFtiYhsLoR48803a7RaAABQowhGAQAAAPiRJsFiXbIa10QSQoh184UQokG06HPnNQwhq2LQQ0KI1NTU48eP10SRAADACwhGAQAAAPiXiECRmaQmRxaIHV8JIUTcgyIg6NqGGDxJKAG6rr/zzjs1USEAAPACglEAAAAAfsemiJsPvCeqKoQkOZd/XpvwpuLGsUKI+fPnO+8mBQAAdQ7BKAAAAAC/YxjGO28vEEKIbokitp07QwyZIoTIzc1dunSpR0sDAABeQjAKAAAAwO+kpaUdO3ZMCCFumezmEJ1uEc27Cq5gAgCgziIYBQAAAOB33nrrLSGEiG4puiW6P8rgSUKIjRs3/vTTTx6qCwAAeA/BKAAAAAC/s337diGEaDdQyIr7o3QY7Pz3h+07PFEUAADwKoJRAAAAAH7n9ttvF0KIXamivNj9UbZ+IoQQauBfKhJm7dDzKjxTGwAA8A6CUQAAAAB+Z9q0aUIIYS/9Ldx0Q1W52PyhEEL0ufOM2uiFHUaLT6vGrda35jg8ViUAAKhJBKMAAAAA/E6PHj0GDhwohBBr3xQOt6LM75eI0nwhhLhlivMNuy6WHDX6f6vFpWqfHzGqDE8VCwAAagTBKAAAAAB/NHXqVCGEOJ0tDm505/l184UQ4roeom3/iz7ZfNZx9xq99Wfa33YaZ8otlgkAAGoKwSgAAAAAf5SSktK4cWMh/i/ivCYndomj3wshxC2PXKnLqfOO57frrT6tGrdazzzJ/noAAGodglEAAAAA/igwMPChhx4SQogdX4tzp6/t4bVvCCFEcLi4aXz1HSsNseSokZCh9f5aW5BtlGvuFQsAADyPYBQAAACAn5oyZYqiKEKvEhvfvYbHSvPFd4uFEKL/vcIWepUP7chzTNmkt/68asb3+vFSFpACAOB7BKMAAAAA/FSrVq1GjRolhBCpfxP/GCV2fiMMvboHco+KL/8i/r/uovK8kCTXtUtXL6dczNltXP+5NmallnnSvVufAACAZ6i+LgAAAAAAfObPf/7zmjVrysrKxL5MsS9TRLUQgyeJuIdEeJPfOzkM8dNysW6+2LNCOH67bH7MnRPaDO/y7gGj7Np3xxsOkXbCkXZC6xguTe0sT+okh/LLDAAAr5Mc/JES1yIoKMhutwshKioqbDabr8ooKiqy2+2xsbG+KgDwT5WVlfn5+dHR0YGBgb6uBfAvOTk5NpstPDzc14UA9VNRUdHnn3/+z3/+c//+/b+9pQaKG8aIwZNEq14i62OR+brIO+b8JDAw8NZbb508efLw4cOFEEWV4oOfjbl7jaMl7v+wCg8U97eXn+wmtwmTrP5ngLpP07Tc3NyIiIjg4GBf1wL4l7y8PFmWo6KifF2I9xCM4toQjAL+jGAU8BWCUcALDMNYsWLFm2++mZ6ebhi/LQsVkuxaItqqVaspU6b88Y9/vHQWajjEmlOOuXv19BPu/76SJTG0mfR4Vzm5pUw+Cn9GMAr4CsEoYIJgFPBnBKOArxCMAt507Nix+fPnv/vuu7m5uUIIWZYTEhKmTZs2evRoRVGqf/ZgkePdn435+41zle4X0D5c+mMHeXInOdJn023AlwhGAV8hGAVMEIwC/oxgFPAVglHA++x2+8cff7xr164nnniiXbt21/RsSZX49LAxd4+x75z7v7bCAsT4tvLjXeWukawfhX8hGAV8hWAUMEEwCvgzglHAVwhGAZ8oKSkpLS1t2rSpe487hFh90rEg21h6zNAt/Ooa2Fh6opt8R2tZISCFfyAYBXzFD4NR7j4EAAAAAM+ThBjeXBreXDlcLL99wHg72yiwuzPO5rOOzWf168OMyZ3kSZ3kaPbXAwDgIbKvCwAAAACA+qxtQ2l2X+XkhIAPhyg9otxc9nmkxDHje73FoqqJ6/QfC9j2BwCABxCMAgAAAECNC1LExPby7jvUjclqShtZdeunWIUuPjpk9Fyq9flaW3jQ0AxPVwkAgD8hGAUAAAAA74lrIi0ephy/W53ZS24U5OYg2/Mc96/XW35WNWuHnlvh0foAAPAbBKMAAAAA4G3NQqRZvZRfxgcsHqb0j3Vzf/3p8+KFHcZ1n1aNW61vOcv+egAArg3BKAAAAAD4hk0RKW3kLWPVH25T72snB7j1+8yuiyVHjYGpWp+vtQXZRoXu6SoBAKinCEYBAAAAwMd6x0gLb1F+GR8wu6/SItTNBaTb8xxTNumtP6ua8b3+SxkLSAEAMEEwCgAAAAC1QuNg8WxP+fBd6uJhyvDmbsajZ8vFnN1Gu8+1cav1zJPEowAAXBHBKAAAAADUIoGySGkjr0pSt9+mTu4kh6juDFJpiCVHjYQMrddX2oJs47zm6SoBAKj7CEYBAAAAoDbqFSPNj1NOTgj4581KqwZuLiDdme+YsklvvqjqiSz9eCkLSAEA+B3BKAAAAADUXhGB4olu8pG71G9HKMObS+7lo+cqxby9xvWfa2NWapknHeSjAAAIglEAAAAAqP1kSYxpKa9KUvenqI93lUPd2l9vOETaCUdChtZ5iTZ3j1HG/noAgH8jGAUAAACAOqNjuDS3v3LqnoD5cUqnCDf31x8ocjy5VW/2SdWUTfr+c6wfBQD4KYJRAAAAAKhjGgaIyZ3kvX9QVyWpyS3d3F9fXCUWZBvdvtQSMrTUEwb5KADA37i1AQMAAAAA4GuyJIY3l4Y3Vw8VO945YCzINgrt1zyI4RCZJx2ZJ/V2DY1JHeXJneRIWw3UCgBA7cOKUQAAAACo29o1lGb3VY7fHTA/Tuka6eb++kPFjhnf660+q5qySd9TyPpRAED9RzAKAAAAAPVBWICY3Ene8wd1Y7Ka0kZW3fq1V1IlFmQb3b/U4lK1JUcNzfB0lQAA1BpspQcAAACAeiWuiRTXRDlSIi/INt7JNvKvfX+9EGLzWcfms3rzUGNSR+mxrko0++sBAPUOK0YBAAAAoB66Pkya3Vf5dULAh0OUnlFu7q8/WeZ4YYfRfFHVxHX67gL21wMA6hWCUQAAAACot4IUMbG9vOsO9Yfb1PvayQFu/QS06+KjQ8YNS7U+X2sLDxpV7K8HANQLBKMAAAAAUP/1jpEW3qIcvztgZi+5UZCbg2zPc9y/Xm/1WdWM7/WTZSwgBQDUbQSjAAAAAOAvmoaIWb2UXycELB6mDGjs5v760+fFnN3G9Z9r41brm88SjwIA6iqCUQAAAADwL4GySGkjbx6j/nCbOrmTHKS4M0ilIZYcNeJStT5fawuyjXLN01UCAFDDCEYBAAAAwE/1jpHmxynH7g6Y3Ve5LtTNBaTb8xxTNumtP6+a8b1+opQFpACAOoNgFAAAAAD8WuNg8WxP+fBd6uJhyvDmbsajOeW/7a8fs1LLPEk8CgCoAwhGAQAAAAAiQBYpbeRVSeqO29XJneQQ1Z1BdIdIO+FIyNB6faUtyDbOs78eAFCLEYwCAAAAAH53Y7Q0P045OSHgnzcrrcPcXEC6M98xZZPebFHVE1n6sRIWkAIAaiOCUQAAAADAxSICxRPd5MPj1FVJanJLyb18tKhSzNtrtF2sJWRoqScM8lEAQK1CMAoAAAAAuDxZEsObS6kj1Oz/n717j4+ivvc//pmZzR2SQEJIWEgIFw0IokSoXBTQhIIkVrFgUbReQ+Gciu2pgr96RK2eAqe1lR6QgMcWbyh4hVRUgsIBBIWgyC3cyWUhdxISkmx2d+b3x2KkgkA2mx2y+3r+9c3u7MzHx6Np2Pe+vzuTLI9cpXYI8uQkuiG5NuPWT10pK50v7tbrHN6eEgAAjxCMAgAAAAAu4ooo5cVhmu2uoOyRWr9oD/fXH6gxHt3qsr7pmLbJtbea/igAwGQEowAAAACASxIZJFkp6u47LGvHWyYlq5pHAekphyzJ1we+60xf41x5VHcRkAIATOLRjQYBAAAAAIHKvb8+zaodOqW+vF9fmq9X2Vt8Evf++lybq3ek/vCV6sMpaueQNpgVAIAfR2MUAAAAAOCJPpHK3CFawS+CskdqAzp5uL/+8Clj9jZX0luOaZtcu6qojwIAfIdgFAAAAADguQ5BkpWi7rrDsjHDMilZtXj0LrPOIUvy9avfc45c7Vx5VHfq3p4SAIBzsJUeAAAAAOAFI+OVkfHa8Xp1Sb6+cK9e0ejJSTaXGptLXd3C9YdTlH/vr8WGentKAAC+Q2MUAAAAAOA13cKVpwdrxVOClo3SronxcH/98XrjmR169+WOyetcW8vYXw8AaBMEowAAAAAALwvR5N6+6te3W7bfZrmnjxrk0VtPu0tWHtWHrXJe94Hz1YO6g/31AACvIhgFAAAAALSV1Fjl1dFa4ZSguUM0a4SHBdK8CuOXG1yJyx2zt7mKT1MgBQB4B8EoAAAAAKBtxYfJrEHqkTstK27WRnT1MB4taZB5O/Xebzsnr3Pl2ohHAQCtRTAKAAAAAPCFYFUmJaubMi3bb7NkpahhHt0MuEmXlUf19DXO6z5wLsnXG5zenhIAEDAIRgEAAAAAPpUaq2SP1I7jfPj6AAAgAElEQVTdGTR3iJbYwfP99dM2uXq+7Zi9zVVYR4EUANBiBKMAAAAAABPEfbe/ftVYLc3qYTxa1iDzdurJbzszP3Xm2gzyUQDApSMYBQAAAACYRlMkM1FdO97y9e2WrBQ13KP99bohOYVG+hpn/3ecL+7WT7O/HgBwCQhGAQAAAADmuyZGyR6pHb8r6K/Xa8kdPSyQ5lcbj251Wd90zNziOlpLfxQAcCEEowAAAACAy0VUsMwcoB6abFk73pKRqHiWj9Y0yYI9ep8VzvQ1ztWFOvkoAOC8PNqlAAAAAABAm1EVSbMqaVbLgRrjlQN69j69uqnFJ9ENybUZuTZX3yj9wSvUaf3U6OA2mBUA0G7RGAUAAAAAXKauiFLmDtEKpwRlj9T6R3u4v/5gjTF7mytxuWPaJteek/RHAQBn0Bj1B/n5+Xl5eQUFBQ0NDdHR0QMHDhwxYkRERITZcwEAAACAF3QMkqwU9eEUdZ3NWJKvv3dMd7U83qx1yJJ8fWm+frNVyUpRJ/ZUNQ+DVgCAnyAYbcd27969fPnyd999d//+/T94KjIycsaMGXPmzAkNDTVlNgAAAADwLkXc++u1w6fUpfv1pfl6lb3FJzHkzP763pH6w1eqD6eonUPaYFYAQHugGAb7CNqrzMzMnJyc5h+joqLCwsJKSkqaHxk6dOjatWsjIyO9eNHQ0FC73S4ijY2NISGm/QuipqbGbrfHxcWZNQAQmJqamiorK2NiYoKD+YIuwKfKyspCQkKioqLMHgQILLW1tXV1dQkJCWYPgvNrdMmKI/qfdum7qjx/VxuqyaRk9XdXq1d3pj56uXA6neXl5dHR0WFhYWbPAgSWiooKVVU7d+5s9iC+w3eMtm+apmVkZCxfvrykpKS6uvrEiRM1NTWvvvpqbGysiHz11VePPvqo2TMCAAAAgPeFanJvX/XbiZaNGZZJyarFo3e3jS557ZA+6D3nyNXOlUd1p+7tKQEAlzEao+3YkiVLRo8efcUVV5z71K5du4YMGWK32zVNs9lsXbt29dZFaYwCgYzGKGAWGqOAKWiMti/H640l+frCvXpFo+cnSQiXrBT13/prXfhOMvPQGAXMQmMU7UlWVtZ5U1ERGThw4KRJk0TE5XJt3rzZt3MBAAAAgK91C1eeHqwVTwlacbN2fZyH++JP1MszO/Qeyx2T17m2lNEiAgA/RzDqt/r37+9eVFVVmTsJAAAAAPhGiCaTktUtt1q232a5p48a5NFbXrtLVh7Vh69yXveBc0m+3ujy9pQAgMsDwajfar4LE/vNAQAAAASa1Fjl1dFa4ZSguUO07hEeFkjzKoxpm1w933LM3uYqPk2BFAD8DcGof3I6ne+//76IWCyWESNGmD0OAAAAAJggPkxmDVIP32lZcbOWZvUwHi1tkHk79d5vOyevc+XaiEcBwH8QjPqnF154oaioSESmTp0aExNj9jgAAAAAYJpgVSYlq2vHW/Jus2SlqGEWT07SpMvKo3r6GmfqB84l+Xq909tTAgB8jmDUD33xxRdPPfWUiMTGxj7//PNmjwMAAAAAl4XBsUr2SO3YnUFzh2hJHTwskO6oMKZtclnfdMzc4iqoo0AKAO2YR5+UoXUaGho+/PDDlr5KVdXJkydf9LBDhw7dcccddrtd07R//OMf3bp182hGAAAAAPBPcWEya5D62NXqP4v0BXv0dTbDg3SzukkW7NH/Z69+Sw9l5lXazVbFw5wVAGAeglETVFVVTZkypaWvslgsFw1Gi4qK0tPTS0pKFEVZtGjRhAkTPJ0RAAAAAPyZqkhmopqZqO6vMRbt1f93v3665bvjdUNyCo2cQueVUcr0fupDKWoEb7IBoP1gK73/KC0tTU9PP3bsmIjMmzcvKyvL7IkAAAAA4HJ3ZZTy4jDNdlfQX6/Xkjt62PvcX2M8utXV7Q3HtE2u/Gr21wNA+8CHWSbo1q1bTU1NS1+lXHBnRmlp6ejRo/fv3y8izz333GOPPeb5fAAAAAAQYKKCZeYA9ddXqZ8dN17c4/pnoSf76085ZEm+/vJ+/aZuyiNXqRmJKvvrAeByRjBqAkVRIiMjvXjCioqK9PT0/Px8EZkzZ87vf/97L54cAAAAAAKEqkiaVUmzWg7WGP97QF+Sr5+0t/gkuiG5NiPX5uoTqT90pZqVonYKaYNZAQCtRjD6LwoKCrZv33748GHDMERk4MCBt9xyS4vOsH379tdeey0vL89ms1ksloSEhBtvvHHq1KkpKSltM7JUV1ePGzdu165dIvLb3/726aefbqMLAQAAAECA6BulzB2i/f4abflhfcEefc9JT3bHHzplzN7mev4b15Te6iNXqVd1oj8KAJcXxfBkf4D/cDqdq1evzsvLy8vL2759e0VFxdnP3nfffX//+98v8VSnTp167LHHlixZcu5TiqL8+te/nj9/fkiIlz8orKmpSU9P37Ztm4g8+uijf/nLX7x7/nOFhoba7XYRaWxs9Pp/zqWrqamx2+1xcXFmDQAEpqampsrKypiYmODgYLNnAQJLWVlZSEhIVFSU2YMAgaW2trauri4hIcHsQWC+TSXGgj36e8d0VyveQI/oqswcoN6epFq42ccFOZ3O8vLy6OjosLAws2cBAktFRYWqqp07dzZ7EN8J9MZodXX1xIkTW3+eurq6UaNGffPNN82PxMXFORyOkydPiohhGAsWLDhy5MgHH3ygaVrrL+d26tSpsWPHulPRhx9++IUXXvDWmQEAAAAAzUbGKyPjtSO16pJ8/eV8vbLl++tFZHOpsbnU1aujnpWiPpSixrC/HgDMFujB6LmSkpLKysoaGhpa9KoHHnigORW97777nnnmmcTERBHZt2/f448/npOTIyI5OTlPPfXU888/761Rf/GLX3z11VciEh8f36tXr/nz55/3sOuvv37UqFHeuigAAAAABKZeHZW5Q7SnB2srjuh/3qV/W+VJffRIrTF7m2vODtfkZPU/rlYHdWZ/PQCYhmBUEhMTr7vuutTvxMbGpqSkuG/vfok2bty4cuVK93rmzJl//etfm5/q16/fBx98MHny5Pfee09E/vznP2dlZSUlJXll8qNHj7oXJSUlTzzxxI8d9sQTTxCMAgAAAIBXhGpyb1/13r5qXoXx4m59+RHdqbf4JHaXvHZIf+2QnhqrPHKVOqW3GsT+egDwuUAPRmNjYwsKClp5kmeffda96Nmz59y5c3/wrKZpixcvXrt2bW1trd1unz9//sKFC1t5RbfIyMhOnTpd9LDQ0FCvXA4AAAAA0Cw1Vnl1tDZvqJad71q0Vy9v9OQkeRXGLze4Zm9zZaWo/9Zf68K7NwDwoUAPRluvsrJy/fr17vW0adPOm0J26dLlrrvuys7OFpF33nlnwYIFXvmm0S+//LL1JwEAAAAAeCwhXJ4erD0xSFtVqP91t/5FqSf760/UyzM79D9+o/8sSX10gDq8K/vrAcAXCEZbKycnx+l0ute33377jx12++23u4PRsrKyrVu3jhgxwkfzeZuun9klMmzYMFW9+GaP9PR0L36t6tljuHn9zAAuQD+L2bMAgYVfPcAU/Orh0gUpckeS3JGk5lUYS/cbrx0yGl0tPkmTLiuP6iuP6qmxysNXKvf0UUK9du/e9oR/cwJmcf/Smf6rpyiKovjo8yGC0dbKy8tzL2JjY6+44oofO2zYsGGaprlcLvdL2m8w2pwCf/3115dyfF5eXkZGRq9evbw7xqlTp5qamgzDkw9jAXjM4XBUVVW5XK6goCCzZwECS0VFRXBwcGOjR7s0AXiqrq7u9OnTl9IGAJp1F3mmj/x7D3VFcejfj4Ueb/Tkfz95FUZehfGf2/XJ3Rvv79nYLTSw8kGn01lZWdnU1MT3wgE+VlVVpaqqw+Ewd4yIiIjIyEjfXItgtLXy8/Pdi379+l0gz46MjLRarYWFhSKyb98+Hw3XBhRFaVEc2bdv35SUlLCwMK+PYbfbo6KivHtaABfW1NTkdDojIyODg4PNngUILE1NTSEhIT77ByIAN03TNE3j35zwQJTI/4uT313jyinWXzmkfl7iSTxablcXHg5ffCR8bDf93640xsQHSjzqdDodDkdkZKTX30gCuDCn06mqqul/+CwW38WVBKOtdejQIfeiR48eFz4yKSnJHYwePHiwzcdqM0FBQXa7XUS++OKLiyYjISEhffv2DQkJ8foYDodDVdXw8HCvnxnABVgsloaGhvDwcIJRwMfCwsJCQkL4wwf4mMvlcrlc/OrBY+EiU1Nkaop8XWks3qe/fkivd7b4JC5D1tjUNTa5Nsbyq37q1D5quL+/j3c6nWFhYeHh4QSjgI/V19cHWtji7/+H2vZqamrci9jY2AsfGRMT84OXtGuDBw9ui8QTAAAAAPzMtTFK9kht3lBt2QH9L7v1gjpPvhPs60pj2ibX41+5ftlX/c0AtWdHbtAEAK3F1+W0Vl1dnXtx0c+ymhP35pcAAAAAAAJEdLDMHKAeudOyaqyWZvXwxiI1TbJgj957hTN9jXN1oc5dFwCgNQhGW0XX9aamJvf6orciae5X1tfXt+1YAAAAAIDLkqpIZqK6drxl3yTLI1epER5t49QNybUZt37qSlnpfHG3XmfyjVIAoL0iGG0VVVWbv2jvojftcn81p1xCtxQAAAAA4N+ujFJeHKYdvzsoe6TWL9rDffEHaoxHt7qsbzqmbXLtq6Y/CgAtQzDaWhEREe5FY2PjhY9saGhwLzp27Ni2MwEAAAAA2oPIIMlKUXffYVk73pKR6OH++lMOWZKvD3jXmb7GufKo7iIgBYBLQzDaWlFRUe5FZWXlhY+sqqpyLyIjI9t2JgAAAABA+6EqkmZVVo+1HJhsmTVI7eTRbW7d++snr3OlrHTO26lX2b09JQD4HYLR1urVq5d7UVhYeOEjCwoK3Is+ffq07UwAAAAAgHaoT6Qyd4hW8Iug7JHagE4e7q8/dMqYvc2V9JZj2ibX7pPURwHgRxGMtla/fv3ci/3791/gsNOnTxcXF7vXKSkpbT4WAAAAAKB96hgkWSnqrjssGzMsk5JVi0dv3OscsiRfH/iuc+Rq58qjulP39pQA0P4RjLbW4MGD3YvS0tJDhw792GFbt251Op3udWpqqi8mAwAAAAC0ZyPjlRU3a8futMwZrMZ4tL9eRDaXGpPXuZLecj69w1VxkVtjAEBgIRhtrYyMDE3T3OtVq1b92GEffvihexETEzN8+HBfTAYAAAAAaP+sEcrTgzXbXUHLRmmDOnu4v/54vfHMDr37cse9613fVLK/HgBECEZbLy4ubsSIEe51dna2w+E495jq6urXX3/dvb799tstFovv5gMAAAAAtH8hmtzbV/1momX7bZZ7+qhBHr2bt7vktUP6te87r/vA+epB3cH+egCBjWDUC5588kn34sCBA88888wPnjUM45FHHjl58qSIWCyWWbNm+Xo+AAAAAIC/SI1VXh2tFfwiaO4QzRrhYYE0r8L45QZX4nLH7G0u22kKpAACFNVFyc3NzcvLO/uRqqoq92LXrl3z5s07+6nMzMz+/fv/4Azp6enjx49fs2aNiDz//PO1tbW///3v4+LiRKSgoGD27NlvvfWW+8gZM2ZwS3oAAAAAQCslhMusQepvBqofFugv7tY3l3oSbpY0yLyd+l926T9LUmcOUEd09TBmBYB2SjGMQP9o6JFHHvnb3/52iQe//vrrd99997mPnzx5cvjw4fn5+e4fLRZLUlKSw+EoLi7W9TObE8aMGfPJJ58EBQV5ZWyzhIaG2u12EWlsbAwJ8fTbv1utpqbGbre702cAPtPU1FRZWRkTExMcHGz2LEBgKSsrCwkJiYqKMnsQILDU1tbW1dUlJCSYPQhwcXkVxpJ8/bVDeoPT85OkxipZKeo9fdQwUztUTqezvLw8Ojo6LCzMzDmAwFNRUaGqaufOnc0exHfYSu8dnTp12rBhQ2ZmpvtHp9N5+PDhwsLC5lQ0Kytr9erV7T0VBQAAAABchlJjleyR2rE7g+YO0RI7eL6/ftomV8+3HbO3uQrrAr1EBSAQsJVebr31VqvVeokHX3vttT/2VFxc3KpVqz7//PM33njjq6++On78eFBQUEJCwg033HDvvfempqZ6aV4AAAAAAM4jLkxmDVJ/d7X6UZG+YI+ea/Mk3CxrkHk79T99q4/vocy8Skuzsr8egN9iKz1ahq30QCBjKz1gFrbSA6ZgKz3au68rjcX79NcP6fWt2F+fEq38KkV9OEUN91Wxiq30gFnYSg8AAAAAAPzBtTFK9kjt+F1Bf71e69nRw+JnfrXx6FZXtzcdM7e4jtbSrALgVwhGAQAAAADwW1HBMnOAeniyZe14S0ai4lk+WtMkC/bofVY409c4Vxfq5KMA/APfMQoAAAAAgJ9TFUmzKmlWy4EaY+Fe/ZUDep2jxSfRDcm1Gbk2V98o/cEr1Gn91Gi+YAlAe0ZjFAAAAACAQHFFlPLiMM12V1D2SK1/tIf76w/WGLO3uRKXO6Ztcu2tpj8KoL0iGAUAAAAAILBEBklWirrrDsva8ZZJyarmUUBa65Al+fqAd5zpa5wrj+ouAlIA7Q1b6QEAAAAACETf7a/XDp9Sl+7Xl+brVfYWn8SQM/vre0fqD1+pPpyidg5pg1kBoA3QGAUAAAAAIKD1jlTmDtEKfhGUPVIb2NnD/fWHTxmzt7msbzruXe/aVUV9FEA7QDAKAAAAAACkQ5BkpajfTrRszLBMSlYtHgUGjS557ZB+9XvOkaudK4/qTr3FZ9i3b9/ChQs3bdrkyeUBoCUIRgEAAAAAwPdGxisrbtYKfmGZM1iNDfXwJJtLjcnrXElvOZ/e4apovPjxDodj5cqVY8aMufrqq59//vmxY8cOHDhw0aJFtbW1Hk4AABejGAb9drRAaGio3W4XkcbGxpAQ0745pqamxm63x8XFmTUAEJiampoqKytjYmKCg4PNngUILGVlZSEhIVFRUWYPAgSW2traurq6hIQEswcBzGR3yapC/YVd+tYyz9ODEE1uTVR/M1AdFneeffo2m23JkiVLly49ceLEuc927NjxnnvumT59+oABAzweAMClqKioUFW1c+fOZg/iOwSjaBmCUSCQEYwCZiEYBUxBMAqcLa/CeHG3/tYR3dHy3fHNUmOVR65Sp/RWg1QRkU2bNi1YsOCDDz5wOBxnjojrIzfcL8OmysEv5P9eln3rvn9tampWVta9994bGuppixXABRGMAhdBMAoEMoJRwCwEo4ApCEaBc5U0yLID+v/s1YtPex4mxIfJvX2M9b9N++qLjWceUi0yaIKM+ZWk3CTKWa3Sop2yPlu+XC720+4HkpKSvvzyy65du3r+3wDgRwRgMMp3jAIAAAAAgEsSHyazBqmH77SsuFlLs3p4//qSBpn/Ws6ZVDQqXjJ+L3MPyoyV0u/mf0lFRaTHILlnkfz3MZnyF4m/UkQKCgoWLVrU2v8MABARglEAAAAAANAiwapMSlbXjrdsv82SlaKGWVp+ivWLRUS6JMvcQ/KzOdLJeqGDw6Lkpn+TZ7+VazJFZOnSpd9vvQeAViAYBQAAAAAAnkiNVbJHasfuDJo7REvscMkF0rLDsnediMioLLFc8nc0KYrcNENETpw48f7773swLQD8AMEoAAAAAADwXFyYzBqkHr3TsmqslmZVLp6Prl8shi6WEBl+b8uulHKTxF8hIi+99JJnowLA2QhGAQAAAABAa6mKZCaqa8dbvp5oeehKNfzH9tc7GuSL10REhk6Wjl1adg1FkVFZIrJ+/frdu3e3bl4AIBgFAAAAAADeM6izsvQG7fhdQX+9XkvueE5/9Mu35HSViMjoaZ6cffi9EhIhItnZ2a2cEwAIRgEAAAAAgJdFBcvMAeqhyZa14y0ZiWftr9+wREQk8RpJHurJecOjZeidIrJs2bJTp055Z1YAgYpgFAAAAAAAtAlVkTSrsnqsZf8ky6xBaseir+RYnojImBmen3TMDBGpra195K9vnLR7aVAAAYlgFAAAAAAAtK2+UcrcIdoDpz8UEbEEy9DJnp+rx9XSfaCILHvrnbg3HDfmOP+4U/+60jC8NCqAwPFjX4YMAAAAAADgTdddc7WIiLNJCr+WPiM8PEtdpZQeEhHpPtCpy8YSY2OJ6/9tky6hMjpBzUhUMhLVziFemxmAH6MxCgAAAAAAfGHSpElxcXEiIp8v9vwsm/4ujobmO9Q3K2+UlUf1X25wxb3uuO4D5+xtrk0lhk6PFMCPIxgFAAAAAAC+EBIScv/994uI7HhfTpV6cgrDkI2viIj0T5Oufc97iMuQvApj3k79hhxn1zcck9e5luTrJ+o9nhqA3yIYBQAAAAAAPjJ9+nRN08TZdCbfbKndH0vZIRGRUdMu5fCKRll5VJ+2ydVjuWPYKuczO/SvyqmRAjiDYBQAAAAAAPhIUlLSuHHjRET+b6norha/fv0SEZHO3WXQLS16ncuQrWXG0ztcP/nQGff6mRrp8XoiUiCgEYwCAAAAAADfmT59uohIVbF8+1HLXllVJLs/FhG58SFRPb+bdKX9TI3U+qbzqnecs7e5cm2GQ/f4fADaK4JRAAAAAADgO+PHj09OThYRWZ/dsleuzxbdJVqQjLjfW8PsrTbm7dTT1zjjv/s2UttpaqRAoCAYBQAAAAAAvqOq6q9+9SsRkb1r5e3fSenBi7+mtkw+musOUifcNvGv47qnWZUQzZtTVX1XI+2+/PsaaRM1UsCvKYbBJyFogdDQULvdLiKNjY0hISFmjVFTU2O32+Pi4swaAAhMTU1NlZWVMTExwcHBZs8CBJaysrKQkJCoqCizBwECS21tbV1dXUJCgtmDAH6ooqIiOTm5rq5ORERRpN/NMvpXMmiCqOeEnYc2y/psyXtPnE0ioijKxo0bR4wYISL1Tvmi1FhdqH9YYBTUtUm4EWGRMd2UzER1fA+lR4TSFpcALh8VFRWqqnbu3NnsQXyHYBQtQzAKBDKCUcAsBKOAKQhGgTa1a9euP//5z2+//XZjY+OZhzp3lxsfkpEPSFS82Otk63JZv1iKd7mfVFV13Lhxv/nNb9LS0s4925FaI9dmrC7Uc21GY8tv6XQpenVUMhKVzET1xgQlmP238EcEo8BFEIwCgYxgFDALwShgCoJRwAcqKytfeeWV7Ozsw4cPn3nIEixXjpIjX0rDKfcDsbGxDzzwwLRp03r16nXREzY4ZXOpkXtcX1Vg7KtuqxrpsK5KRg/19p5KYgdqpPAfBKPARRCMAoGMYBQwC8EoYAqCUcBndF3/5JNPFi1a9NFHH+n699/ref3110+fPn3y5MmhoaEenNZdI821GWuK9TqH98Y9S3ON9IZ4L3/nKeB7BKPARRCMAoGMYBQwC8EoYAqCUcD3jh079tJLLy1fvvzmm2/+9a9/PXjwYK+ctrlGurrA2Ns2NdJwiwzvqmT0UG/rqSRRI0X7RDAKXATBKBDICEYBsxCMAqYgGAVM4XQ6y8vLo6Ojw8LC2uL8zTXSj4v12jarkaZZlYxEJd2qhlIjRfsRgMGoxewBAAAAAAAAfKRXRyUrRclKkUaXtqnEyD2u59qMvApvlsaO1BpL8o0l+RJmcY3oqqR1U29NUvpFUyMFLjsEowAAAAAAIOCEapJmVdKsmgyRo7XGWpuRazM+KdZPea9G2uCUXJuRa3PN3namRppmVcZ3VzsEee0SAFqDYBQAAAAAAAS05O9qpE5d21pm5BTpuTZjR4U3v3zw3BppmlVJjaVGCpiJYBQAAAAAAEBExKLKyHhlZLwmQ6SkQT4t1nMKjU9tek2T1y7RXCOVs2qk47qrHamRAj5HMAoAAAAAAPBD8WFyb1/13r7iMrRvKo3VhXpOYVvVSEM118h4aqSArxGMAgAAAAAA/ChNkdRYJTVWe3qwlDbIJ8V6TqGx1qZXe69G2uj6vkaa3FFJtyppVuWn3dVIaqRAWyIYBQAAAAAAuCRd275GevS7GqlFdf2ki5KZqKZZlcGxCj1SwOsIRgEAAAAAAFrm7BppWYNsKNFXFxg5RfpJu9cu4dRlc6mxudQl2yQ+TNKtamaSMtaqRgV77RJAgCMYBQAAAAAA8FxcmExKVicln6mR5tqM1YX6ljJD916PtKRBXjukv3ZINMV1TYySkahkJqrUSIFWIhgFAAAAAADwgu9qpMqsQWp5o6w/oefajFUFekmD1y7hMiSvwsirMJ7ZoXcNk7FWNTNJSbeq0dRIgZYjGAUAAAAAAPCyLqFnaqQvjdC+bpsaaSk1UqB1CEYBAAAAAADainpWjbSiUT4/obtD0hP1XrvE2TXSuDAZFa+6Q9JOIV67BOCXCEYBAAAAAAB8Iba5RmqcqZHmHtc3nDAcutcuUdYgK4/qK4+eqZGmWZWMHurwropKjxQ4B8EoAAAAAACAT51dI620y2fH9Vyb8c8iw3baazvtm2uk83bqXUJldIKaZlVuTVLjw7x1BaDdIxgFAAAAAAAwTUzImRqpiOw5aeQUer9GWt54pkY6fbPrWmqkwHcIRgEAAAAAAC4LV3VSruqkzBqk1jnk8xN6TqHxUZFR7L0aqX5WjTQ2VMYkqGlWJSNR6RZORIpARDAKAAAAAABweekQJJmJamaiyFk10v87YTR5r0Za8V2NVFXEXSNN66aOSlCCVK9dArjMEYwCAAAAAABcvpprpKed8tlxPafQWFNkFLVNjTQmRG7qpqZZlQk9FGsENVL4OYJRAAAAAACAdiDC8n2N9EitsbrAyCnSN5YYdpfXLlFpP1MjFZH+0UpmEjVS+DOCUQAAAAAAgHamV0dl5gBl5gC13ilflBqrC/UPC4yCOq/VSEVkb7Wxt9qYt1PvECSjE5TMRPWWHkp3aqTwIwSjAAAAAAAA7VW4RdKsSppVe3GYHKk1cm3G6kJ9rc2bNdI6h+QUGjmFLhHp1azVxLQAACAASURBVFHJSFQyE9UbE5RgaqRo5whGAQAAAAAA/EGvjkpWipKVcqZGmntc/7DAyK/2Zo30SK2xYI+xYI8eYZEx3ZTMRHV8D6UHNVK0TwSjAAAAAAAAfqW5Rjp3yPc10lyb0ei9Gulp53lqpDfEKyGa1y4BtDWCUQAAAAAAAL/VXCNtcMrmUiP3uL66wNjbNjXScIsM76pk9FBv66kkdaBGissdwSgAAAAAAID/CzunRpprMz4u1msdXrtEvVNybUauzfXoVunVUUmzKhmJylirSo0UlyeCUQAAAAAAgMDyXY1UGpyau0aaazPyKrxcI12SbyzJl3CLa3hXJa2b+rMkJSWaGikuIwSjAAAAAAAAAaq5RipD5GitsdZm5NqMT4r1U21QI5297fsaabpVDaVGCrMRjAIAAAAAAECSv6uROnVta5mRU9SGNdIwi2tEVyWtm5qZpPSnRgqTEIwCAAAAAADgexZVRsYrI+M1GSLHao1PbUauzfjUptc0ee0SDefUSNOsyrjuascgr10CuCiCUQAAAAAAAJxfz/PVSHdUGF7skTbXSEM118h4Ja2bmmZVUmOpkaLNEYwCAAAAAADgIs6ukZY2yCfFek6hsdamV3uvRtroOlMjlW2S3FFJtyppVuWn3dVIaqRoGwSjAAAAAAAAaIGuYXJvX/XevuIytG8qjdWFek6hl2ukR7+rkVpU10+6KJmJ1EjhfQSjAAAAAAAA8ISmSGqskhqrPT1YyhpkQ4m+usDIKdJP2r12Cacum0uNzaUu2SY9OypjrUqaVRlrVaOCvXYJBCyCUQAAAAAAALRWXJhMSlYnJZ+pkebajNWF+hel3qyRHjtfjXRwrEKPFJ4hGAUAAAAAAIDXfFcjVWYNUssbZf0JfXWB8c8ivaptaqRdw2SsVc1MUtKtajQ1UrQEwSgAAAAAAADaRJfQ89RIt5QZuvd6pKUN8toh/bVDoimua2KUjEQlM1GlRopLQTAKAAAAAACAtnV2jbSiUT4/obtD0hP1XruEy5C8CiOvwnhmhx4XJqPiVXdI2inEa5eAnyEYBQAAAAAAgO/EflcjfcnQvq40cm1G7nF9/QnDqXvtEmUNsvKovvLomRppmlXJ6KGOiKdGin9BMAoAAAAAAAATqGfVSCvt8tlxPddm5BQax+u9ttO+uUY6b6feJVRGJ6gZiUpGotqZGikIRgEAAAAAAGC6mJAzNVIR2XPSyCk0co/rG04YDu/VSMsbz1MjHd5VUemRBiqCUQAAAAAAAFxGruqkXNVJmTVIrbLLuuN6rs34Z5FhO90mNdLYUBmToKZZlcxENSHcW1dA+0AwCgAAAAAAgMtR5/PVSP/vhNHkvRppxXc10umK69oYJc2qpHVTRycoFtVrl8Bli2AUAAAAAAAAl7vmGulpp3x2XM8pNNYUGUXeq5HqZ9VIY0Lkpm5qmlXJSFS6hbPT3m8RjAIAAAAAAKDdiLBIZqKamSgicqTWWF1g5BR5uUZaaT9TIxWR/tFKZpKS1k0dlaAEUSP1LwSjAAAAAAAAaJd6dVRmDlBmDlBPO2VLqbG6UP+gwCis81qNVET2Vht7q415O/XOIXJzNzXNqkzooVgjqJH6A4JRAAAAAAAAtG8RFkmzKmlW7cVh39dIN5YYdpfXLlF1vhrpjQlKMDXSdotgFAAAAAAAAP6juUZa75QvSo3VhfqHBUZB29RIIywyppuSmaiO76H0oEba3hCMAgAAAAAAwA+F/2uNNNdmrC7Uc21Go/dqpKedklNo5BS6RKRXRyUjUclMpEbabhCMAgAAAAAAwM/16qhkpShZKWqDUzaXGrnH9VUFxr5qb9ZIj9QaC/YYC/boERYZ1lXJ6KHe3lNJ7ECN9PJFMAoAAAAAAIBAEfZdjXTukDM10lybsaZYr3N47RKnnZJrM3Jtrke3fl8jvSFeCdG8dgl4BcEoAAAAAAAAAtF3NVJpcGruGmmuzciraJMaabhFhndVMnqot/VUkqiRXh4IRgEAAAAAABDQmmukclaN9ONivdZ7NdL6f62RplmVjEQl3aqGUiM1D8EoAAAAAAAAcEZzjbTRpW0qaasa6ZJ8Y0m+hFlcI7oqad3UW5OUftHUSH2NYBQAAAAAAAD4oVDt+xrp0Vpjrc3ItRmfFOunvFcjbfiuRjp725kaaZpVGd9d7RDktUvgAghGAQAAAAAAgAtJ/q5G6tS1rWVGTpGeazN2VBhe7JGeWyNNsyqpsdRI2xDBKAAAAAAAAHBJLKqMjFdGxmsyREoa5NNiPafQ+NSm1zR57RLNNVI5q0Y6rrvakRqptxGMAgAAAAAAAC0WHyb39lXv7SsuQ/um0lhdqOcUtlWNNFRzjYynRuplBKMAAAAAAACA5zRFUmOV1Fjt6cFS2iCfFOs5hcZam17tvRppo+v7GmlyRyXdqqRZlZ92VyO9USMtKirKzs5++eWXg4ODp02b9tBDD3Xt2tUL573sKYY3U2z4v9DQULvdLiKNjY0hISFmjVFTU2O32+Pi4swaAAhMTU1NlZWVMTExwcHBZs8CBJaysrKQkJCoqCizBwECS21tbV1dXUJCgtmDAIHF6XSWl5dHR0eHhYWZPQvQKi5D2qhG2syiyk+6KJmJappVGRyrtLRHahhGbm7uokWLVq9e7XK5mh8PDg6eOHHijBkzbrjhBu8OfLkhGEXLEIwCgYxgFDALwShgCoJRwBQEo/BLZQ2yoURfXWDkFOkn7W1yifgwSbeqmUnKWKsadbF3bCdPnvzHP/7x0ksvHTx48MxDWpBckykOu+xaI4bufmzgwIHTp0+fOnVqx44d22RosxGMomUIRoFARjAKmIVgFDAFwShgCoJR+Dd3jTTXZqwu1LeUGXobxHKaItfEKBmJSmaiem6NtLi4eM6cOW+99VZ9ff2Zh6IT5MaH5IaHJDpBRKSyQNYvkc3/kNpy9/ORkZH33HPPnDlzunTp4v1xTUUwipYhGAUCGcEoYBaCUcAUBKOAKQhGETjKG2X9CT3XZqwq0Esa2uQSXcNkrFXNTFLSrWp0sIhIWlraunXrREQURa4cLaOnybW3inrOXYicdtn+rqxfLIe3uh+4884733rrrTaZ0jwEo2gZglEgkBGMAmYhGAVMQTAKmIJgFAFIN+Rrn9RIr3flL5p0tWEYct3P5danJCHl4q8s2invPyW71gQFBRUUFPjZn0XV7AEAAAAAAACAwKUqkhqrzBqkbsq0lN4dtOJmLStFTQj35iVchuRVGAsXLTYMQ4LCZOr/XFIqKiI9BsnUhaJqDodj6dKl3pzpMkAwCgAAAAAAAFwWYkNlUrKaPVIrnhK0/TbL3CFamlUJ8kqAZ6+TLa+LiFw/RSI6t+CFnbvL1beISHZ2tsPh8MYolwuCUQAAAAAAAODy0lwjXTvecuLuoDfHaPf0UeNa8w0TW5dLQ42IyKisFr929DQROX78+OrVq1sxwWWHYBQAAAAAAAC4fMWEyJTe6qujtRN3BW27zfKHVG1EV0VTLv7Cf/F/S0VEev1Ekga3eIL+6dK1r4gsWrSoxa+9jBGMAgAAAAAAAO2Aqsh1scqT16qbMi3lU4Pevkm7/wo1/lJqpIc2S+E3Ime6ny2mKHLjQyKybt26PXv2eHKGyxLBKAAAAAAAANDOdAqRyb3UV27Ujt8dtON2y38N0W6MVyw/FvWtzxYR6RAj1/3cw+uNvF+Cw0XEn27BRDAKAAAAAAAAtFeKyLUxyhOD1A0ZloqpQStv1h68UrVGnLXTvq5S8t4XERlxnwSFeniZ8GgZMklEli1b1tDQ0PqxLwcWswcAAAAAAAAA4AVRwfLzZPXnySIi31YZHxcba4r0Td9UOJ12EZEuya06e5dkETl16lRtbW1YWGvuA3W5oDEKAAAAAAAA+JurOyuPX61+PsFS9fiAPlcPERHZsMTz0xm6bPy7iIwbNy4uLs5LM5qMYBQAAAAAAADwWx2D5P89Ol1EpOhbObzVw7N8+5FUFojI9OnTvTeayQhGAQAAAAAAAH/2i1/8IiYmRkRkQ7aHp1ifLSKJiYnjx4/33lwmIxgFAAAAAAAA/FlYWNh9990nIrLtHakta/Hry4/InrUiMn36dE3TvDyceQhGAQAAAAAAAD83ffp0VVXFaZfNy1r84g1LxNBDQkIeeOCBNhjNNASjAAAAAAAAgJ/r3bv32LFjRUTWZ4vuasErHQ3uLHXy5Ml+c9slN4JRAAAAAAAAwP+duW9SZaF89XYLXvZ/L0tdpYj86le/apu5TEMwCgAAAAAAAPi/CRMmJCUliYj8733y/DDZ9A9xNPzo0Y21sn6xPH2tvPUfInLNNdcMHz7cV5P6CMEoAAAAAAAA4P80TXvhhReio6NFRI7lybIs+V1PWfG4lB36l+Nse+SNX8tjPeWNR8S2R0Ti4uL++7//24yR25ZiGIbZM6A9CQ0NtdvtItLY2BgSEmLWGDU1NXa73c++2AK4/DU1NVVWVsbExAQHB5s9CxBYysrKQkJCoqKizB4ECCy1tbV1dXUJCQlmDwIEFqfTWV5eHh0dHRYWZvYsgH+qr69fvnz5okWLduzYceYhRZH+aTJqmjgbZX22HNjYfPDw4cNnzJjx85//3MQUqO0QjKJlCEaBQEYwCpiFYBQwBcEoYAqCUcBnvvzyy0WLFq1YsaKxsfEHT0VERNx9990zZswYNGiQKbP5BlvpAQAAAAAAgIDzk5/8ZNmyZUVFRfPnz+/Vq5f7wX79+i1YsMBms2VnZ/t3KioEo2inCgsLv/32W7OnAAJOfX39li1b6uvrzR4ECDg7d+4sLCw0ewog4Jw4cSIvL489doCPNTU1bd269dSpU2YPAgSK2NjYxx577ODBg/Pnz1+4cOGePXt+/etfB8heJYJRtD/5+flDhw5NT09/+eWXzZ4FCCyZmZl33HFHZmam2YMAgWXp0qVjx44dOnTo/v37zZ4FCCClpaVDhw7NzMx87rnnzJ4FCCz33XffxIkTb7zxRpfLZfYsQAD55z//OWvWrJkzZ27evNnsWXyHYBTtz7Zt29xffrFp0yazZwECi/sPZED9mQQuB+6/d42Njdu2bTN7FiCA7Nq1q6amRvg3J+Bz7n9tHjhwoLy83OxZgACyefNmwzCcTueWLVvMnsV3CEbR/jTvZmJbE+Bj7l86fvUAH+MPH2AKfvUAs/DbB5giMH/1CEYBAAAAAAAABByCUQAAAAAAAAABh2AUAAAAAAAAQMAhGAUAAAAAAAAQcAhGAQAAAAAAAAQcglEAAAAAAAAAAYdgFAAAAAAAAEDAIRgFAAAAAAAAEHAIRgEAAAAAAAAEHIJRAAAAAAAAAAHHYvYAaK+OHj0aHBxsyqXLy8vdi9ra2iNHjpgyAxDg+NUDfKmurs69KCsr47cP8JkTJ064Fw0NDfzqAb7kdDrdi4KCgoaGBnOHAQJHdXW1e1FVVWXuH77w8PD4+HjfXEsxDMM3V4J/sFgsLpfL7CkAAAAAAADgnzIzM1etWuWDCxGMomVUVeV/MwAAAAAAAGgjqqo2NDT4YKcyW+nRMnfdddfKlSs7duwYFRVl1gyGYZSWlrpcri5dupi1nR8ITKdOnaqpqYmKioqMjDR7FiCANDU1lZeXWyyWuLg4RVHMHgcIIGVlZU1NTbGxsaGhoWbPAgSQurq6kydPdujQoVOnTmbPAgQQp9NZVlamKEpcXJymaSZOoqrq/fff75vAh8YoAAAAAAAAgIDDXekBAAAAAAAABByCUQAAAAAAAAABh2AUAAAAAAAAQMAhGAUAAAAAAAAQcAhGAQAAAAAAAAQcglEAAAAAAAAAAYdgFAAAAAAAAEDAIRgFAAAAAAAAEHAIRgEAAAAAAAAEHIJRAAAAAAAAAAGHYBQAAAAAAABAwCEYBQAAAAAAABBwCEYBAAAAAAAABByCUQAAAAAAAAABh2AUAAAAAAAAQMAhGAUAAAAAAAAQcAhGAQAAAAAAAAQci9kDAADaAZfLVVxcXF1dHRIS0rlz57i4OLMnAgJFdXV1aWlpY2NjZGSk1WoNDg42eyIAAAD4rbKysrKysoiIiPj4+LCwMLPHaXMEo2g3bDbb9u3b8/Lyvvnmm4aGBveDr7/+eteuXc0dDPBXhmFs2bLlo48+Wrdu3c6dO5t/70QkISHhpptumjZt2g033GDihIBf2r179+bNm7ds2bJ169ajR482NTU1PxUcHHzNNddMmjTpgQce6Ny5s4lDAgHl2Wef3bhxo3ttsVjWrFlj7jyAn3nqqae2bNlyKUe+9957HTt2bOt5gABkGMb777+/fPnyjz76qL6+vvnx+Pj4m2+++ac//enEiRMjIiJMnLDtKIZhmD0DcCHvv//+K6+8sn379pKSknOfPXbsWFJSku+nAvzeu++++/jjjx85cuTCh02ePHnx4sWdOnXyzVRAIEhMTCwqKrrwMV26dFm8ePHEiRN9MxIQyDZs2DBmzJjmN03BwcF2u93ckQA/87Of/WzVqlWXcmRlZSWfCwJet2/fvmnTpjV/BHhemzdvHj58uM9G8iUao7jcrVu3Licnx+wpgIDzxRdfnJ2KapqWnJwcFxfncDj2799/6tQp9+MrVqw4fPjwZ599FhkZadKkgD8LDg7u2rVr9+7ddV232WzFxcXux8vLyydNmvTqq6/efffd5k4I+Lf6+vqHHnqIKgkAwF/t2LEjLS3t5MmTzY/07NkzISFB1/WSkpKCggITZ/MNglG0J1ar9brrrjMM4xI/UQTQSmFhYRMnTpwyZcoNN9zQHH26XK7333//0UcftdlsIpKXl/f4448vXrzY1EkB/xEbGzt8+PC0tLSbbrqpV69eZz91+PDh+fPnL1myRER0XZ8xY8ZNN92UkJBg0qSA/3vyyScPHTokIldcccWBAwfMHgfwcw8++OD06dMvcACfxAPedeTIkbFjx7pT0eDg4N/+9rfTpk3r2bNn8wFlZWXvvPPOG2+8oSiKaVO2MbbS43L397//vaioKDU1NTU1NT4+XkTefPPN5oIMW+mBNjJnzhyn0/nb3/42JibmvAfYbLbrr7/e3V9TVbWoqKhbt26+nREIUM8///yTTz7pXs+fP/+xxx4zdx7AX23dunXkyJEul2vMmDEjRox47rnnhK30QBto3kr/5JNP/uEPfzB7HCBQGIaRlpb22WefiUhkZOTHH388bNgws4cygWr2AMBF3H///U899dSECRPcqSgA33j66aeff/75H0tFRcRqtc6dO9e91nX9o48+8tVoQKCbNWtWbGyse/3FF1+YOwzgr+x2+4MPPuhyucLDw5cuXerHTRkAQGBavny5OxUVkZdffjkwU1EhGAUAnNelvAO87bbbmg+76G2aAHiLxWIZNGiQe11eXm7uMIC/evrpp/fu3Ssizz77bO/evc0eBwAAL1u4cKF7MWrUqEmTJpk7jIkIRgEAHoqIiAgNDXWvGxsbzR0GCCjNO3kvUOsG4LFvvvnmz3/+s4gMGjTokUceMXscAAC8bO/evc0bj7KysswdxlwEowAAD5WWljY0NLjXfMEo4DOVlZXbt293r2+88UZzhwH8j9PpfOCBBxwOh8VieeWVV4KCgsyeCAAAL8vNzXUvVFWdMGGCucOYi7vSAwA89M477zSvx4wZY+IkQOBwf++hu6PdpUuX+++/3+yJAH/z3HPPff311yLyu9/9bvDgwWaPAwSQjRs33nHHHXv27CkrK+vQoUNcXNyQIUPGjh176623appm9nSAX2n+lL1///5RUVGGYXz00Uevvvrqrl27SktLo6KikpOTx4wZ88tf/rJHjx7mjtrWCEYBAJ6oq6ubP3++ez1w4EDeOgJe19TUVFxc7F43NDQUFhbu3r07Ozv78OHDItKhQ4cVK1Z07tzZ1BkBf7Nr164//vGPItK3b9+nnnrK7HGAwLJhw4bm9cmTJ4uKivLy8hYvXty7d+8FCxbccsstJs4G+Jldu3a5FykpKcXFxffdd9+6deuan62qqjp69Ohnn3323HPPzZo1a86cOarqtzvOCUYBAJ54/PHHCwsL3eu5c+dyu17A6/bu3Xvttdee+7imabfddtvcuXP79Onj+6kAP+Z0Oh988MGmpiZFURYtWhQWFmb2RABERA4fPpyRkfHHP/5x1qxZZs8C+Imqqir3IjQ0NC0tbf/+/e4fu3XrFh4efvz48fr6ehGx2+3PPvvswYMH33jjDX99x+e3iS8AoO0sW7bspZdecq8ffPBBPsAHfGnUqFFTpkzp1auX2YMA/uZPf/rTtm3bROTBBx9MS0szexwggPTs2fPxxx//7LPPTpw4Ybfb6+vrjxw5smzZsmHDhrkPMAzjiSeeePPNN82dE/AbNTU17sXy5cvdqeiDDz549OhRm8128ODB6urqd999NykpqfmYv/zlL6bN2sYUwzDMngFomTfffPPuu+92r48dO9b8uwrANz799NNbb73VfVPsgQMHbtmyJSIiwuyhAD904MCBu+66y702DKOwsLCioqL52dTU1BUrVhCPAt6yf//+a6+9tqGhIT4+fu/evZ06dTr72aeeeuoPf/iDiAQHB7v/AgLwlsLCwh49epy3jGYYxoIFC37zm9+4g4u4uLjDhw936NDB5zMC/iY0NPTsP2f/+Z//+eyzz/7gmOPHjw8dOtRms4lIVFRUQUFBVFSUT6f0CRqjAIAW2Lx588SJE91/RHv37v3xxx+TigJt5Iorrtj+nby8vPLy8n379v37v/+7+wYUeXl5o0ePLi0tNXtMwB/ouv7QQw81NDSIyIIFC36QigJoU4mJiT+2RVdRlJkzZ/7+9793/1hWVvbqq6/6cDTAb539Jq5fv35z5sw595hu3bq98MIL7nVNTc1bb73lo+F8i2AUAHCptm7dOn78+NOnT4tI9+7d165d261bN7OHAgJISkrK3/72t/fee89isYhIUVHRf/zHf5g9FOAPFixYsGnTJhGZMGHCpEmTzB4HwL944oknmj+u+Pjjj80dBvAPZzev77vvPvfn7ueaOHFiTEyMe71+/XofDOZ7BKMAgEuyffv2cePG1dbWikjXrl1zc3OTk5PNHgoIRLfeemtWVpZ7/fbbb5+9vx6AB44fP/7kk0+KSGRk5OLFi80eB8APhYeHjxkzxr3es2ePucMA/qE57hSRoUOH/thhFoslNTXVvT5w4ECbj2UG7koPALi4b7/9dty4ce6v6O7SpUtubu6VV15p9lBA4JoyZcqiRYtExOl0fvnllxMmTDB7IqAdKyoqcm+GcLlco0aNOu8xJ0+edC8cDkfv3r3d63Hjxi1cuNA3QwIBrvnGEuXl5eZOAviHlJSUr7/+2r3u0qXLBY6Mi4tzL/z1w3iCUQDARezfv/+nP/1pZWWliERHR69Zs2bAgAFmDwUEtMTExOY1bxEBbzl9+vSRI0cufIxhGM3H8CW/gM803yUmODjY3EkA/9C/f//mtdPpvMCRDofDvQgJCWnbmUzCVnoAwIUcOHBgzJgxJSUlIhIVFfXpp582b6YAYBZ3fdvNL28PCgDA2fLz892LC1fbAFyiG2+8sXldVFR0gSObn/XX3z4aowCAH3Xw4MExY8acOHFCRCIjIz/55JMhQ4aYPRSAf/nye77tF2il1NTUqqqqCx/zX//1X3/6059EJDg42P1hodBcA3ylqKjIfXs0ueCXIQK4dCNGjOjatat768Pnn3+ekZFx3sOqq6t37NjhXvvrO0EaowCA8ysoKEhPTz9+/LiIhIeHr169+ic/+YnZQwGQqqqqefPmudfdunUbNGiQufMA7Z3FYul0MWFhYc3HNz8YERFh4thAgHC5XDNmzGhqanL/mJmZae48gH/QNG3q1Knu9bJly9xfm3auhQsXNjY2ute33HKLj4bzLYJRAMB5FBYWjh49uqCgQETCw8NzcnLO3m0BoI089thjL7300qlTp37sgJ07d44ZM8Zms7l/nDlzpqIovpoOAAAvmzZt2vLly5uTlx8oKyu74447cnJy3D8OGDDg9ttv9+F0gD+bPXu2+xuZKisrp06d2tDQ8IMDcnNz//CHP7jXgwcPTk9P9/WIPqEYhmH2DMCF1NTU/PznPz/7kZKSkt27d7vX/7+9ew+Kuvr/OL67yFUERFAz8pJXdLYSFM0ABRHyhpdRLIfJzAszaYWBaZqaTWlO3kaESjPSvOaF8bKmiIJc1MFLaoOXJAUXFBC5SCvugru/P/b3/cwOKizrLsuyz8df53M+53zOe/0nes3nfI6/v7+Dg4Nwy8vLKzExsUnrA1qoMWPGyGQybdvLy6tPnz71j/fx8RFeYQNgsIiIiL1799rb2wcFBfn4+Hh7e7u6utrb25eVleXm5p48eTI9PV2tVmsHDxkyJC0tzdbW1rw1A9Zg6dKl2v85tLOzEw6BAfDyBg0alJ2d3aZNm5CQEB8fnx49eri6utbW1hYVFaWnpx84cODx48fakc7OzqmpqQMGDDBvwUBLkpiY+NFHH2nbvXv3jo2NHTJkiLOz8+3bt//444/Nmzdrz2VydHTMysrq37+/WYs1Fb4xiuaupqYmJSXlRXeFb81o9erVy/QVAVZB2K8kEokKCgoKCgrqH887a4ARKZXKY8eOHTt2rJ4xISEh+/btIxUFALQAVVVVSUlJSUlJLxrQoUOHXbt2kYoCxjV9+vSCgoJly5ZpNJqbN2/OmjXr2THOzs47duxoqamoiK30AAAAzUdERMS7777r5ORUzxgfH5/ff/89OTmZ8+gBAJYuODj4tddeq2eAi4vLp59++vfffwcFBTVZVYD1WLJkiUwm69q163PvhoWFnT17Njw8vGmLalJspUdzV1tbe+XKFT0HOzg49OvXz6T1AFbi1q1b9Xzl8FkuLi49e/Y0XT2AVVEqlWfPnr106dKdO3dKS0ufPn3q4uLi7u4ulUoHDhzY4KctduHmNgAAD5VJREFUABjdvXv37t+/LxKJxGKxj4+PucsBWpr8/PysrCztf/VKS0tra2vbtm3r5eXl5+f39ttvc9AZYGpqtTozM/PUqVMFBQVVVVUeHh69e/cODQ21hj87CUYBAAAAAAAAWB220gMAAAAAAACwOgSjAAAAAAAAAKwOwSgAAAAAAAAAq0MwCgAAAAAAAMDqEIwCAAAAAAAAsDoEowAAAAAAAACsDsEoAAAAAAAAAKtDMAoAAAAAAADA6hCMAgAAAAAAALA6BKMAAAAAAAAArA7BKAAAAAAAAACrQzAKAAAAAAAAwOoQjAIAAAAAAACwOgSjAAAAAAAAAKwOwSgAAAAAAAAAq0MwCgAAAAAAAMDqEIwCAAAAAAAAsDoEowAAAAAAAACsDsEoAAAAAAAAAKtDMAoAAAAAAADA6hCMAgAAAAAAALA6BKMAAAAAAAAArE4rcxcAAAAAPJ9cLq+pqdG2XV1d27VrZ956mqHy8nKFQqFt29vbe3p6GvHhlZWVDx8+1LbFYnG3bt2M+HAAAACz441RAAAANFNBQUHd/2fFihXmLqc5mj9//mv/M3bsWOM+/LfffhP+/aVSqXEfDgAAYHYEowAAAAAAAACsDsEoAAAAAAAAAKtDMAoAAAAAAADA6hCMAgAAAAAAALA6nEoPAAAAWKqIiAhvb29tu1OnTuYtBgAAwLIQjAIAAACWKjQ0NDQ01NxVAAAAWCS20gMAAAAAAACwOgSjAAAAAAAAAKwOW+kBAACARlMqlbm5uffu3auoqGjTpk337t27d+8ukRj/tYPq6urr168XFhY+efLEzc2tZ8+eXbt2NcqTKysrb9++rX2yp6dn7969O3bsaJQnAwAAWASCUQAAALQQarV6yZIl2dnZQk+XLl02bNjg5ORkxFXOnz8fFxd36NChyspK3f727dtPmTIlJiamS5cuIpGooKBg+vTpwt21a9dKpdLnPjAyMrK4uFjbjoiImDVrlkgk0mg0hw4dSkhIOH36tFKpFAYHBASkp6cLl3FxccePH9e2+/Tps3r1an1+gkwm+/nnn48fP65SqXT7+/XrN3PmzKioKEdHR32eAwAAYNEIRgEAANASKJXKadOm7dmzR+iRSqWJiYlGTEWrq6sXLFgQHx+vVqufvVtSUhIXF7dly5b169fPmjXr8ePHKSkpwt3y8vIXPTYrKysvL0/b9vHxEYlEhYWFkZGRaWlpzw7WaDS6l1euXJHJZNp2aWlpgz+hpKTk448/3r9//3Pv5uTkzJs3Lz4+fvfu3b6+vg0+DQAAwKIRjAIAAMDilZWVjR8/PiMjQ+gJCQnZv3+/i4uLsZZ48uTJ+PHjk5OT6x/2+PHj2bNnl5WVTZgwwbCF7t696+/vL5fLn3v3uZmsnkpKSoYNG3b9+vX6h+Xm5g4dOrTBXwoAAGDpCEYBAABg2e7cuTNq1KgbN24IPdOmTdu8ebOtra0RV5k6dWqdrLBz584TJ07s2bNn27Zti4uLs7Ozjxw5UlVVJRKJvvzyS8N2o6tUqnHjxgmpqIODw5AhQ7y8vGxtbYuKii5dulTnjVH9VVdXh4aG1klFpVLp+PHju3XrZmNjI5fLZTLZuXPnNBqNQqGYMGGCdlM/AABAS0UwCgAAAAt2/vz5sWPHCt/oFIlECxYsWLlypVgsNuIq27dvT0pKEi4dHR1Xrlw5d+5cGxsb3WFlZWXz5s3btm2bRqNZtGiRAQtt3bpVu+m+bdu2y5YtmzlzZuvWrYW7T58+vXz5smE/Yfny5VeuXBEuPT09f/rpp4kTJ+qOWbx4cUZGxocffnj79u2SkpL169cbthYAAIBFIBgFAACApUpOTp40aZL2JU2RSGRjYxMfHx8VFWXcVf7777/o6Gjh0s7Obt++faNGjXp2pLu7+9atW9u1a7du3TqFQmHAWtpU9JVXXklJSenbt2+duzY2NoZ9+jMnJ2fNmjXCpZub28mTJ597GFRAQEBGRsY777yTl5dn2E8AAACwFBJzFwAAAAAY4tdffx09erSQirZu3frgwYNGT0VFItGuXbsePnwoXC5YsOC5qahg9erVgwYNMng5GxubgwcPPpuKvoyNGzfW1tYKlz/++ONzU1GtTp067dmzRyLh/xQAAEALx587AAAAsDAajebrr7+eMWOGEPZ17Njx9OnTo0ePNsVymzdvFtoeHh4LFy6sf7xEIlm1apXBy82YMWPgwIEGT3+WQqHYuXOncDl48OApU6bUP8XPz2/q1KlGrAEAAKAZIhgFAACAJVGpVB988MHy5cuFnh49emRkZBi2x7xBFRUVFy5cEC4jIiKcnJwanBUYGPj6668btuLs2bMNm/giaWlpjx49Ei5nzpypzwdYOXkJAAC0eASjAAAAsBhVVVXjxo3bvn270DN48OCzZ8/26NHDRCtmZ2frHgQ/cuRIfWaJxeL6t9u/iIeHh9ET3vPnz+tejhs3Tp9Z/v7+np6exq0EAACgWSEYBQAAgGW4d+9eYGDgsWPHhJ4JEyacOnXKw8PDdIvqnuQuEoneeustPSfqP1KXj4+PAbPqd/HiRaHduXNnPf+5JBJJ//79jV4MAABA88Gp9AAAALAA165d8/PzKywsFHqio6PXrFmj/xlBf/31V15eXoPD6rwpqXvskq2trZeXl57LGbaV/tVXXzVgVv3u378vtL29vfWf6O3tnZycbPR6AAAAmgmCUQAAAFgA3RdFRSLRd999t2jRokY9ISEh4ZdffmlwWEpKyvDhw4XL8vJyoe3i4qL/co0a/JKz6qf7E9zc3PSf2KjBAAAAFoet9AAAALA8f/75p+6BQqZTXV0ttO3t7fWf6OjoaMByjVpCT7r/UM7OzvpPbNOmjdGLAQAAaD4IRgEAAGABIiMjdb/amZmZGRwcrLvP3URcXV2FtkKh0H9iVVWVCcoxhG5Eq1Qq9Z/45MkTE5QDAADQXLCVHgAAABagffv2qampI0eOPHfunLbn4sWLISEhycnJeh6ePnToUH0+SFrnK5+628mrqqpqa2tbtdLrT2jdDezm5ebmJpfLte1GxbVN804uAACAuRCMAgAAwDK4ubmdOHEiPDw8NTVV23P58uXAwMCUlBR9ziyKjIyMjIxs7KKdOnUS2mq1+ubNm/369dNn4rVr1xq7lom4u7sLbX2OnxLk5+cbvxoAAIBmg630AAAAsBjOzs5HjhwZMWKE0HPjxo2AgIA7d+6YaMUBAwboXl68eFHPiRcuXDBBOYaQSqVC+/r16yqVSs+Jly9fNk1FAAAAzQLBKAAAACyJk5PT4cOHx48fL/TcuXMnKCgoNzfXFMu9+eabDg4OwuXevXv1mVVdXS2TyUxRjwEGDhwotFUqVWZmpj6z5HL5rVu3TFYUAACA+RGMAgAAwMLY29vv2bNn0qRJQk9+fn5AQEBOTo7R17KzsxszZoxwefz4cX0S2G3btjWfD3QGBASIxWLhcseOHfrM2rlzp1qtNllRAAAA5kcwCgAAAMtjZ2e3e/fuadOmCT1FRUXBwcFXr141+lqzZ88W2jU1NZ999plGo6ln/IMHD7766iujl2Gwbt26BQUFCZfbt2//559/6p/y6NGj9evXm7guAAAAMyMYBQAAgEWysbFJTEycM2eO0FNSUjJs2LDs7GzjLhQSEqK7G/3o0aPR0dEvykYrKipGjhxZWlpq3BpeUlRUlNBWqVRRUVH1fGlUo9F88sknRUVFTVIaAACA2RCMAgAAwFKJxeK4uLjo6Gihp7y8PDQ09MyZM8ZdZcuWLXZ2dkLPhg0bgoODz58/rztMqVTu3bv3jTfe0B7Q1KtXLyPW8JImTZrk7+8vXKalpb333nuVlZXPjlQqlXPnzt22bVsTVgcAAGAeBKMAAACwYGKxeN26dUuXLhV6KisrQ0NDT548acRVpFLp2rVrdXvS0tL8/Py6dOkSFhY2efLkwMDADh06REREyOVykUjk4eGxcePGOnUasZ7GkkgkmzZt0j1FKikpSfuj/v3335qaGrVaLZfLN23a5Ovrm5CQIBKJxGLxuHHjzFcyAACAybUydwEAAADAy1q+fLmTk9PChQu1lwqFIjw8/MCBA2FhYcZaYs6cOUqlMjY2VncT/d27d+/evVtnpLu7++HDh93c3HQ7W7dubaxKDOPt7a09saqmpkbbI5fLY2JiYmJiJBKJRCKpra3VHb948WIPD4+DBw+ao1gAAICmwBujAAAAaAkWLFjwww8/CC9mPn78ODw8PCkpyYhLfP755ydPnqx/j3xAQMC5c+cGDx5c51T6OjmpWYSHh+/Zs8fV1bVOv1qtrpOKfvHFF998800TlgYAAGAGBKMAAABoIWJjYxMSEiSS//8TV6VSTZ48efv27UZcIigo6OrVq0lJSe+//37v3r2174E6OjpKpdKoqKjU1NT09PSePXuKRKKHDx/qTmwOwahIJJowYUJOTs6kSZNatXr+1jGpVCqTyVatWmXevf8AAABNQPyi8zQBAAAAGGzFihWLFy/Wtj08PB48eGCKVWpra4WXPSUSie4JUfUrKSlJSkq6du1aYWGhSqVq27att7f38OHDBwwYQCQKAACsBN8YBQAAAIwvPT1daPv6+ppolVatWr3o3c/6tW/fPioqyuj1AAAAWBC20gMAAABGlpube+LECeFy8ODBZiwGAAAAz0UwCgAAABiTRqOJiYlRq9XaS7FYPHXqVPOWBAAAgGcRjAIAAAANu379emlpaYPD1Gp1bGzsoUOHhJ4RI0bUf5A9AAAAzIJgFAAAAGjYiRMnunbtOnfu3DNnzrzo/NLMzMzhw4evXbtW6LGzs/v++++bqkYAAAA0AocvAQAAAHpRKBTx8fHx8fEdOnTw9fX19vZu166dnZ1deXl5fn5+ZmZmXl5enSnffvtt//79zVEsAAAAGkAwCgAAADROcXHx0aNHjx49Ws8YsVi8dOnS+fPnN1lVAAAAaBSCUQAAAKBhbm5uEolEOFKpfj4+PitXrgwNDTV1VQAAADCY+EUfSAIAAACgq6ioSCaTZWVlXbx48datW9XV1bp3xWJx3759hw0bNmbMmLCwMLFYbK46AQAAoA+CUQAAAMAQxcXFCoWioqLC0dHR3d3d3d3d1tbW3EUBAABAXwSjAAAAAAAAAKyOxNwFAAAAAAAAAEBTIxgFAAAAAAAAYHUIRgEAAAAAAABYHYJRAAAAAAAAAFaHYBQAAAAAAACA1SEYBQAAAAAAAGB1CEYBAAAAAAAAWB2CUQAAAAAAAABWh2AUAAAAAAAAgNUhGAUAAAAAAABgdQhGAQAAAAAAAFgdglEAAAAAAAAAVuf/AJm/tDrLHQ/9AAAAAElFTkSuQmCC", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n", + " xlabel=\"k-grid\", ylabel=\"energy absolute error\")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "We continue to do the convergence in Ecut using the suggested $k$-point grid." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "nkpt = 5 Ecut = 10\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.57833855832 -0.16 3.6 83.1ms\n", + " 2 -25.77687136417 -0.70 -0.76 1.7 82.5ms\n", + " 3 -25.78626954293 -2.03 -1.85 2.0 73.0ms\n", + " 4 -25.78631730352 -4.32 -2.86 1.0 55.2ms\n", + "nkpt = 5 Ecut = 12\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.78612090750 -0.12 3.6 106ms\n", + " 2 -26.07609867009 -0.54 -0.71 1.9 67.7ms\n", + " 3 -26.09344392990 -1.76 -1.69 2.1 78.8ms\n", + " 4 -26.09374080004 -3.53 -2.35 1.0 57.3ms\n", + " 5 -26.09375413976 -4.87 -2.74 1.1 59.4ms\n", + "nkpt = 5 Ecut = 14\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.86749925190 -0.11 3.8 73.9ms\n", + " 2 -26.20728215041 -0.47 -0.71 2.0 60.1ms\n", + " 3 -26.22671142653 -1.71 -1.64 2.1 65.6ms\n", + " 4 -26.22700608470 -3.53 -2.29 1.0 51.7ms\n", + " 5 -26.22702602123 -4.70 -2.70 1.0 48.9ms\n", + "nkpt = 5 Ecut = 16\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.89703464751 -0.11 3.9 264ms\n", + " 2 -26.25567426264 -0.45 -0.71 2.0 158ms\n", + " 3 -26.27560908198 -1.70 -1.65 2.0 189ms\n", + " 4 -26.27587698447 -3.57 -2.30 1.0 124ms\n", + " 5 -26.27589304376 -4.79 -2.72 1.0 124ms\n", + "nkpt = 5 Ecut = 18\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90531151132 -0.11 3.8 270ms\n", + " 2 -26.27081866989 -0.44 -0.71 2.0 164ms\n", + " 3 -26.29102638209 -1.69 -1.64 2.0 188ms\n", + " 4 -26.29128624574 -3.59 -2.28 1.0 124ms\n", + " 5 -26.29130385257 -4.75 -2.72 1.0 129ms\n", + "nkpt = 5 Ecut = 20\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90790554983 -0.11 4.6 278ms\n", + " 2 -26.27522627491 -0.43 -0.71 2.0 175ms\n", + " 3 -26.29533844278 -1.70 -1.64 2.1 191ms\n", + " 4 -26.29558942903 -3.60 -2.29 1.0 127ms\n", + " 5 -26.29560549552 -4.79 -2.72 1.0 126ms\n", + "nkpt = 5 Ecut = 22\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90841961790 -0.11 4.6 285ms\n", + " 2 -26.27620908247 -0.43 -0.71 2.0 181ms\n", + " 3 -26.29618011404 -1.70 -1.65 2.1 224ms\n", + " 4 -26.29642021972 -3.62 -2.30 1.0 127ms\n", + " 5 -26.29643524693 -4.82 -2.72 1.0 363ms\n", + "nkpt = 5 Ecut = 24\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -25.90867886192 -0.11 4.1 261ms\n", + " 2 -26.27643080574 -0.43 -0.72 2.0 172ms\n", + " 3 -26.29626026150 -1.70 -1.65 2.2 185ms\n", + " 4 -26.29649599437 -3.63 -2.30 1.0 117ms\n", + " 5 -26.29651129542 -4.82 -2.73 1.0 117ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "18" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "function converge_Ecut(Ecuts; nkpt, tol)\n", + " energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]\n", + " errors = abs.(energies[1:end-1] .- energies[end])\n", + " iconv = findfirst(errors .< tol)\n", + " (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])\n", + "end\n", + "result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)\n", + "Ecut_conv = result.Ecut_conv" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "… and plot it:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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OmfstorMcssHAACAG4pHxWiLFi10XS8Zr1q1qvQgpsu58sboggULSse9evXyJBIAAACqttp+MjlG3X+vnhil6u48zGZfkimpZpsUY/Yhi51HAQAA4FExGhIS0rNnz5Jxenr6smXLynCTtWvXbtq0qWQcFBQUGxvrSSQAAABUB40DlaQ+2vd36wmRqls7j/6YZ49Za3b/0vj2NO0oAABAteZRMSoiQ4YMKR1PmDDh4sWLbk13OBxjx44t/XHo0KGlr6ACAAAA1xdVR5kXp226S+/bwL1zmVLP2rctMeKXGbvPUY8CAABUU54Wo+PGjQsNDS0Zp6enjxgx4sKFC5dfcJ2l9GfOnBkyZEh6evpPUVT16aef9jAPAAAAqpseEcraofqKwXqHUPfq0ZUn7c4LjFGrzIxc6lEAAIBqx9NitE6dOk899VTpj99++22XLl0+//xzy7KuM8vpdL7//vudO3e+/NilhISE6OhoD/MAAACgehrYWNk1Uv+4n9YwwI1Zli0pGVZUijFhs3mhuNzCAQAAoPLxwrr1iRMnrlq1avny5SU/HjlyJCEhoWHDhkOHDr3llluysrJKPnc4HKtXrz5y5Mi6deuWL19+9uzZy2/SokWLd9991/MwAAAAqLZURR5qpd4bqb611/rrbtPhctFZbMmbe61P0q0nO2oTotWaWnmmBAAAQOWgXPUoeXfl5ub269dv586dZZtep06dtWvXduzY0fMkqADh4eE5OTkikp2dHRYW5qsYDoejqKgoIiLCVwEAXItt25mZmcHBwYGBgb7OAuBKubm5eXl5DRs29HWQcpdTJH/bY77xg1VkujexSaDybCf1kTaq5t66fMALMjMzAwICgoODfR0EwJUKCgocDkdERISm8dczoOrwdCl9iaCgoLVr1z7wwANlmNu6detNmzbRigIAAMCLwvxleqx2MEFPjFLdOrf+RL49boPZcb6RknG9vaEAAABwo/NOMSoiQUFBc+bM+eSTT1q3bu3ilICAgEmTJm3btq1t27beigEAAACUalZbSeqjfTdcv62Re+9/7rtgj1pl9l5kbDzDuUwAAABVk9eK0RL333///v37Fy5cOHr06Gst0dJ1vUePHs8//3xGRsbf//73oKAg72YAAAAALtc1XFl1p75isN4pzL16dNMZ+9ZFxqhVZvpF6lEAAICqxguHL11BVdXh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4cMmTHMDnnTyp1MhRHh4eKV379y5U1paKpX1j24tW7aUy8aObgkJCXLZwCgajSYxMdGoKABMoHv+NmARaWlp8s5lLVq00FPTy8vL1dVV2vb+7t27RkWRv6mrMUpAQIBcNjYKYJ9iYmJ+++03qTxx4kTzG9y5c6dczsnJ+eOPP06cOLFy5coePXps2LChffv25ocAbM/p06dPnz4tlR8+fJiSknL58uUNGzYEBgZ+8cUXo0ePNq3ZjIyMoqIiqax/AHV1dfXy8nr48KFgAAVqUlBQIGdtRo8e7e3tXSvN7t+/Xy7n5OTcvXv37Nmzq1evfu6559atWydPSQNs3qNHjz7//HOpHBYWJj9cXpaSkiKXmzdvrqcpc24PTbsJTU5O7tSpk1GBABiLGaOwItrP93R3d9dfWa6gfZYh8vPzDYzi7OwsP3vX2CiAHXr06NG0adOkqSi+vr4LFiyou1inT5/u2rXrzz//XHchANtz9+7dV1555aOPPjLt9PoZpgF7ExkZKX86rYfHLl29evWll17avHlzXQcCrMSCBQvkZe8rVqyoWkH79tDDw0NPU9rvap9lCNOiMIYC9YDEKKyI9v99Z2dn/ZUbNmxY9SzriQLYm4qKinHjxkm7YSgUivXr17u5uZnTYFhY2PLly8+cOZOZmalWqx89enTt2rUvv/xS3mejqKjo9ddfj4uLq4XeA7bC399//vz5R44cuX//fmlpaXFx8d27d3fs2NGnTx+5ztKlS9evX29C4wygQF2Q19H7+/tXXeRrgnbt2n388ccnTpxQqVRlZWUFBQWJiYnffPONPFGurKxs6tSp0dHR5scCrNzmzZs3btwoladPnx4REVG1juGjmzy0ibq8CTUnCgATsJQeVqS8vFwuV/ecPpn8YEF59X2dRpH3nQGg05w5c+T5m++9997w4cPNae3MmTPay4iEEG5ubu3bt2/fvv20adNmzZr1r3/9SwhRWFg4Z84cefE+YOeWL1/evHlzpfJPX3sHBASMHTt27NixGzZseOedd9RqtRDi/ffff/XVV728vIxqv36GacCuJCYmnjlzRipPnjzZwcHBzAajoqIqDaCOjo6tW7du3br15MmTP/roo2XLlgkhysvLZ86cee3atRqvZeDJdeDAgWnTpknl0NDQL774Qmc1w0c3pVKpVCorKiqEeTeh+q907T4whgL1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oYFnyXvICCEWLlxYtcKYMWP27dtXVlam8/Tk5OTevXvLLURERBjbbcAKJScny88Ta9So0bFjx0xrZ8mSJfLV8c0331R699ChQ/Jn4MmTJ+tsYe/evXIL27dv11lnzpw5UgWlUrlr165K70ZGRspr5z/44APTfhAAxlJoqt9gETDBzJkztVMtZWVlv/32m1Ru166d/DRbybZt2+SZm7KKiorBgwfLu9EPHjx41qxZbdq0yc3N3b9//6pVq/Ly8oQQLi4uJ0+e1Lny6MaNG+3bt5fKixcv/vjjj6vWefz4cZ8+fc6cOSMd/sd//MfUqVNDQkKysrL27NmzevXqoqIiIYSXl9e5c+dCQkKM/kUAVunNN99UqVTyYVFRUWxsrFTu2LHj008/rV1579692juHFhQUeHp6yhuiderUycvLS3+4uXPnDhkypNKLJ06ckG/Mvvrqq9mzZ1eqoFQqNRqNn59fRETE888/HxAQ4OHhUVRUdPfu3SNHjhw8eFB+lHZISEhsbGylbgNPqL///e+nT5/WfiUmJkb6a2/ZsmXLli213/rHP/5Raeu0fv36xcTENGrUqH///p07d27VqpWHh0dFRYVKpTp58uSuXbvkPI6zs/ORI0fk/dS05ebmyt8+TpkyZf369VXraDSaESNGyLvNDBw48N13323btm1eXt7Bgwc///xzKbvasGHD48ePv/DCC6b9NgBrM2fOnBs3bsiHarVa3o6pTZs2/v7+2pU3bdpU6RVtjx49atq0qfRRc9y4cdu3bzewD7dv35afILpw4cJly5ZVqtCiRYv79+97eXlFRESEhYUFBwd7eHiUlpampKQcO3ZMyplKNZ9++unY2Fg+4sIGDBw48JdffpHK/v7+2g9/16lbt25Lly6t+npBQUGPHj2uXbsmhFAoFBMmTJg4cWJwcHBaWtoPP/zw9ddfP378WAjRrFmzCxcuVL2HFULs27dv5MiRUnn79u0610xkZWV17dr1jz/+EEI4ODhMnTp13LhxLVq0SElJ2b59+4YNG6Rxv1WrVufOnWvcuLHhvwcAprNwYhY2x6hboNu3b+tsJC8vT/9eS05OTnv37q2uD4bMGNVoNOnp6a1atdITxZyvHAHrFBQUZPgVmpubq32utLmEUap+364xYMaogdvMd+zY8datW3X1mwLq3fDhww2/uE6cOFHp9L59+xpy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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n", + " xlabel=\"Ecut\", ylabel=\"energy absolute error\")" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "## A more realistic example.\n", + "Repeating the above exercise for more realistic settings, namely …" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tol = 1e-4 # Tolerance to which we target to converge\n", + "nkpts = 1:20 # K-point range checked for convergence\n", + "Ecuts = 20:1:50;" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "…one obtains the following two plots for the convergence in `kpoints` and `Ecut`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "\n", + "" + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/convergence_study/46d2a475.svg b/v0.6.17/examples/convergence_study/46d2a475.svg new file mode 100644 index 0000000000..2af1f68503 --- /dev/null +++ b/v0.6.17/examples/convergence_study/46d2a475.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/convergence_study/c51f43ec.svg b/v0.6.17/examples/convergence_study/c51f43ec.svg new file mode 100644 index 0000000000..a61b8f69e7 --- /dev/null +++ b/v0.6.17/examples/convergence_study/c51f43ec.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/convergence_study/index.html b/v0.6.17/examples/convergence_study/index.html new file mode 100644 index 0000000000..a218851d68 --- /dev/null +++ b/v0.6.17/examples/convergence_study/index.html @@ -0,0 +1,37 @@ + +Performing a convergence study · DFTK.jl

    Performing a convergence study

    This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.

    Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.

    This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of $k$-points in each dimension of the Brillouin zone.

    As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:

    using DFTK
    +using LinearAlgebra
    +using Statistics
    +
    +function run_scf(; a=5.0, Ecut, nkpt, tol)
    +    atoms    = [ElementPsp(:Pt; psp=load_psp("hgh/lda/Pt-q10"))]
    +    position = [zeros(3)]
    +    lattice  = a * Matrix(I, 3, 3)
    +
    +    model  = model_LDA(lattice, atoms, position; temperature=1e-2)
    +    basis  = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))
    +    println("nkpt = $nkpt Ecut = $Ecut")
    +    self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))
    +end;

    Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.

    tol   = 1e-2      # Tolerance to which we target to converge
    +nkpts = 1:7       # K-point range checked for convergence
    +Ecuts = 10:2:24;  # Energy cutoff range checked for convergence

    As the first step we converge in the number of $k$-points employed in each dimension of the Brillouin zone …

    function converge_kgrid(nkpts; Ecut, tol)
    +    energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]
    +    errors = abs.(energies[1:end-1] .- energies[end])
    +    iconv = findfirst(errors .< tol)
    +    (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])
    +end
    +result = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)
    +nkpt_conv = result.nkpt_conv
    5

    … and plot the obtained convergence:

    using Plots
    +plot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,
    +     xlabel="k-grid", ylabel="energy absolute error")
    Example block output

    We continue to do the convergence in Ecut using the suggested $k$-point grid.

    function converge_Ecut(Ecuts; nkpt, tol)
    +    energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]
    +    errors = abs.(energies[1:end-1] .- energies[end])
    +    iconv = findfirst(errors .< tol)
    +    (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])
    +end
    +result = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)
    +Ecut_conv = result.Ecut_conv
    18

    … and plot it:

    plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,
    +     xlabel="Ecut", ylabel="energy absolute error")
    Example block output

    A more realistic example.

    Repeating the above exercise for more realistic settings, namely …

    tol   = 1e-4  # Tolerance to which we target to converge
    +nkpts = 1:20  # K-point range checked for convergence
    +Ecuts = 20:1:50;

    …one obtains the following two plots for the convergence in kpoints and Ecut.

    +
    diff --git a/v0.6.17/examples/custom_potential.ipynb b/v0.6.17/examples/custom_potential.ipynb new file mode 100644 index 0000000000..0d14d5697f --- /dev/null +++ b/v0.6.17/examples/custom_potential.ipynb @@ -0,0 +1,435 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Custom potential" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We solve the 1D Gross-Pitaevskii equation with a custom potential.\n", + "This is similar to Gross-Pitaevskii equation in 1D example\n", + "and we show how to define local potentials attached to atoms, which allows for\n", + "instance to compute forces.\n", + "The custom potential is actually already defined as `ElementGaussian` in DFTK, and could\n", + "be used as is." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "First, we define a new element which represents a nucleus generating\n", + "a Gaussian potential." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct CustomPotential <: DFTK.Element\n", + " α # Prefactor\n", + " L # Width of the Gaussian nucleus\n", + "end" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Some default values" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "CustomPotential() = CustomPotential(1.0, 0.5);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "We extend the two methods providing access to the real and Fourier\n", + "representation of the potential to DFTK." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function DFTK.local_potential_real(el::CustomPotential, r::Real)\n", + " -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\n", + "end\n", + "function DFTK.local_potential_fourier(el::CustomPotential, p::Real)\n", + " # = ∫ V(r) exp(-ix⋅p) dx\n", + " -el.α * exp(- (p * el.L)^2 / 2)\n", + "end" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! tip \"Gaussian potentials and DFTK\"\n", + " DFTK already implements `CustomPotential` in form of the `DFTK.ElementGaussian`,\n", + " so this explicit re-implementation is only provided for demonstration purposes." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We set up the lattice. For a 1D case we supply two zero lattice vectors" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "a = 10\n", + "lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "In this example, we want to generate two Gaussian potentials generated by\n", + "two \"nuclei\" localized at positions $x_1$ and $x_2$, that are expressed in\n", + "$[0,1)$ in fractional coordinates. $|x_1 - x_2|$ should be different from\n", + "$0.5$ to break symmetry and get nonzero forces." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x1 = 0.2\n", + "x2 = 0.8\n", + "positions = [[x1, 0, 0], [x2, 0, 0]]\n", + "gauss = CustomPotential()\n", + "atoms = [gauss, gauss];" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We setup a Gross-Pitaevskii model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "C = 1.0\n", + "α = 2;\n", + "n_electrons = 1 # Increase this for fun\n", + "terms = [Kinetic(),\n", + " AtomicLocal(),\n", + " LocalNonlinearity(ρ -> C * ρ^α)]\n", + "model = Model(lattice, atoms, positions; n_electrons, terms,\n", + " spin_polarization=:spinless); # use \"spinless electrons\"" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "We discretize using a moderate Ecut and run a SCF algorithm to compute forces\n", + "afterwards. As there is no ionic charge associated to `gauss` we have to specify\n", + "a starting density and we choose to start from a zero density." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -0.143581440330 -0.42 8.0 223ms\n", + " 2 -0.156035264791 -1.90 -1.10 1.0 81.9ms\n", + " 3 -0.156768405886 -3.13 -1.56 2.0 1.16ms\n", + " 4 -0.157045700649 -3.56 -2.32 1.0 780μs\n", + " 5 -0.157055621133 -5.00 -3.00 1.0 759μs\n", + " 6 -0.157056386219 -6.12 -3.62 2.0 980μs\n", + " 7 -0.157056399029 -7.89 -3.82 1.0 786μs\n", + " 8 -0.157056406819 -8.11 -4.83 1.0 758μs\n", + " 9 -0.157056406917 -10.01 -5.77 1.0 833μs\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.0380293 \n AtomicLocal -0.3163463\n LocalNonlinearity 0.1212606 \n\n total -0.157056406917" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))\n", + "ρ = zeros(eltype(basis), basis.fft_size..., 1)\n", + "scfres = self_consistent_field(basis; tol=1e-5, ρ)\n", + "scfres.energies" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Computing the forces can then be done as usual:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-0.05568032402310458, -0.0, -0.0]\n [0.05567981534825138, -0.0, -0.0]" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "compute_forces(scfres)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Extract the converged total local potential" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Extract other quantities before plotting them" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "101-element Vector{ComplexF64}:\n -0.7406633262171101 - 0.6304967599345118im\n -0.07611892599325414 - 0.06479719929918785im\n 0.09019024907535904 + 0.07677536920520568im\n 0.03917935083167574 + 0.03335191030636358im\n -0.006837570459475201 - 0.0058204987306369775im\n -0.010404105791726228 - 0.008856516560870357im\n -0.00150099566689901 - 0.0012777200534314144im\n 0.001669947291001919 + 0.0014215251369275156im\n 0.0007192828240806624 + 0.0006122750944895733im\n -0.00010947762106794072 - 9.318460418127402e-5im\n ⋮\n -0.00010946649210998908 - 9.319202894250554e-5im\n 0.000719267541759903 + 0.0006122862278094505im\n 0.0016699199278183603 + 0.0014215586590248922im\n -0.0015009680170804103 - 0.001277734724444995im\n -0.010404004038726399 - 0.008856607029820383im\n -0.006837517525512719 - 0.005820550103429987im\n 0.039179483847458264 + 0.03335178875001172im\n 0.09019029732797071 + 0.07677530115865im\n -0.07611915429524271 - 0.06479692680911985im" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "ρ = scfres.ρ[:, 1, 1, 1] # converged density, first spin component\n", + "ψ_fourier = scfres.ψ[1][:, 1] # first k-point, all G components, first eigenvector" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "Transform the wave function to real space and fix the phase:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=4}", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzddXwUZ/4H8Gdk3eMe4gkhBHd3aAptgVJooaUtR68Kpa7c9XpX4ypUru4uVHArViB4AiHuLuu+OzPP74/kRykQCMkms/J9v/q6V8INuw/P7sxn5lECY4wAAACAQEXyXQAAAACATxCEAAAAAhoEIQAAgIAGQQgAACCgQRACAAAIaBCEAAAAAhoEIQAAgIAGQQgAACCgQRACAAAIaBCEAAAAAprXBeGTTz5pt9u7eDDDMLBEHI/cbjffRQhoUP/8gvrnlwfr3+uC8NNPP9XpdF082O12cxzXq+UBl+FwOPguQkCD+ucX1D+/PFj/XheEAAAAQF+CIAQAABDQIAgBAAAENAhCAAAAAQ2CEAAAQECDIAQAABDQIAgBAAAENAhCAAAAAY3muwCgd7k5VGzEJUZcaUYMh1iM5AIULkHJSmJgECGAGyEA+MNiVGTAxUbcYEN6JxKSiCBQnAylqoh0NSGFy3NfgZr2T0129E05t72e+6MJR0qJdDWRqEBCClEEarajg82oyMCVmfCgYOK6fuSCfkQ/BcF3kQEIFK0OtKGK+7GSO9yCI6VEpoaIkiKNCFkZxHLoWCsqMXLlZjw4mJgeTd6USKSo4PTsXRCE/mZHPX6jgP2jGV8fT96ZRn45idSILn2kjUEHm/GPVdzIX9mBQcTqAdTsWAJOOAB6z+EW/OoZbkc9NzuGvCuD/HYqqRZe+kgbg/Y34a113PiNbIqKuCeDXJhIUnB+9g7C2xatjomJyc3NjY6O7srBdrtdKBRSFNXbpfIJW2rx2hOsxY0eHkguTCRlXb7JcXPouwruv2c4N4deGkHNiunq2WY2mxUKRTeLC3oM6p9fV1X/J9rww0fYKjN6YAC5PJVUCLr6Lm4Oba7l1p3mmuzoiWxyWQpJQhwihDz6/Ycg9AdFBrz6MFtlQc8PI6+L7/558ks199hRLk6G3hpLJSuv/CpwIeYX1D+/ulj/bQ60JpfdWY+fHULekdb9p7p9TfjJY6yNQa+PosZFQBh68vsPgyV8m5tD/zzJTdjIzIwh82+gb+jXo7vFefHk6Rvo2bHk6F+Zdac51rvukQDwPd+UcwN/coeJUfFC+m/pPWrbnBBB7MuhH84il/zO/u0Aa4I9oDwHgtCHndHjEb8wuS3cyevpVQNIjwwBpUm0agCZO4/eVMNN2cTUWyEMAegOsxst+Z19/hT3y3T65ZGUvMttoZdBIHRTEnlmAU0gNPBHZlcDnJ6e4Zkg/OKLL1JSUsLCwu64447LbKu7efPmYcOGbdy40SNvGuA+KOambGLuzyQ3zaSjZR5uJ0lUEDvn0DNiyGE/M9vq4GQD4Ork6fCwnxm5AB2ZRw8P9fDpqRSgd8dR74+nbt3LPn2chZabnvNAEBYWFt5zzz2ffPJJcXFxdXX1c889d8nDjEbjo48+qtfrtVptz980kNkYdMsedn0Bty+HXp7aW8/0JIGeHER+O5W+Yz+77jTsfgxAV/1Uxc3YwqwdQr43jpL02sD86dHEievoIy146mamudOnD9AlHriMfvTRR9ddd93YsWM1Gs1TTz314YcfXnIAzpo1a1avXh0SEtLzdwxkNRY8fiNDEejwXDpd3esd5hMiiENzqS/LuNv3sS5IQwCu5F8nudWHua2z6MVJvd7xFCZBW2bRkyKJkb8wx9vgwbD7PPBRFRUVZWdnt/+cnZ3d0tKi1+svOGb37t0VFRXLly/v+dsFsoPNeNSvzC3J5KcTe/FO8wKxMmL/tbTeiXK2MWbonwegEyxGfzvA/lrD5c6jBwf30ahOkkBrh1CvjiLnbGO+q4B71W7ywNVUp9OdG8OqVCoRQm1tbUFBQecOsFqt999//88//0x0Ybp2a2trTEzMuV9zcnK+/vrrzg4OqOkTP9eSq4/R741ipkc6LZa+fvdPRqEHj9ETf+N+nOAOFXfce1qt1q58pqCXQP3z6/z6tzNo+SGBk0O/TWRkrKOPz9DpIeiXicSN+4UlOteqdKZP35s/Xfz+i8Vimr5C0nkgCIOCgkwmU/vP7T8EBweff8DatWuHDx9uNBqPHz9utVqrqqqqq6vj4+Mv+WqhoaFdn0dIUVSABOGrZ7hXT3M7r6GygzpZiKL3fTgZrT3BztlD7pxNtQ/PwRjL5XK+ygOg/vl1rv4tbrRoLxMlIz6eQAnITlZy6mWj5OjQXJyznWhwCt4cQwXCpHsPfv890DSakpJSUFDQ/vOZM2eCg4PPfxxECHEcd/r06ZUrV65cubKqquqTTz75/PPPe/6+AQIj9PhR9sNi7uBcKjuI52/32iHUHWnkxE1stQU6JABACCGjC83ayiSriM8mUvyuYh8tI/bl0KUmfNNu1snyWRKf44GVZU6fPj1+/Pg9e/akpqYuXLiwf//+L7/8MkLoueeeGzZs2OzZs88/eOTIkXffffett97a2avByjLnYzFaeYA9q8cbZ9JB/NxoXsKbZ7l1p7nf51DByAIrm/AIVpbhl9ls5kSKGVuYkWHE66O9ZR1QF4eW7mG1DvzzdNojkxe9lnetLJOVlfXyyy/n5ORERUUplcpnn322/c+Li4ubm5svODg6OhpO3S5ycWjxbrbWgnfM8aIURAjd2598OIucspmts3nJuQ8ADywMMXsrM8qbUhAhJCTR15OpZCUxbQujd/JdGh8Ba416KTuDFuxihCTxzRRK5JX/vvUF3KunmX3XCmI8PZ0fdBE8EfLIyqBpG51Dwug3x3hRCp6DEXokl91Rj7fNpsMlfJemd3jXEyHwOCuDcrYzGhHx/VQvTUGE0H2Z5J3J7PQtbAtM5gUBxsGi63YwqUrsnSmIECIQenkkdUMCOWkT02DzrqcdLwRB6HWsDLp2G5OgID6bSNHe/fncl8YsSiSmb2F00AIDAgaL0dI9rFJAvD7M7Z0peM4zg8k70shxv7GVZsjCy/HuC23gMbnR9M1Mupp4f7xvDIBeO4SaGkXM3c7YAmXyEghoGKHb9rIOFn8zhfLSh8G/eiiLfCCTnLqZrYIs7BwEoRcxutDMLczAIOKtsT5xinVYN4pKVxPzdjCwBhvwew/lsuUm/M0Umt+ZElflgQHk49nkpE1suQmy8NJ858P0d3onmr6FGRVGvDPOl1IQIUQg9L+xlIQi7tgH6+ADf/b8KW5XPd48i5b11QKHnrIinXx8EDl1M2ThpUEQeoX2FBwfQbw6ysdSsB1Nom+nUFUW/HAuzOMF/unDYu6jYm7rbFrN2+JOPbIynXxyEDllM1sGWXgRCEL+6Zxo2hZmciSxbqS3jhDtAgmNfp1Ob63DsGcT8D+/1XBPH2e3zqIifHkqwop08pnB5JRNbKkRsvAvfO0J3+9onWj6ZmZ6NPHiCB9OwXYaEdo6ixr7GxspRUt6fw8aAPrGoRZ853524ww6ReWL7TV/cUcaSRBo6mZ25xwq1ff/OZ4CQcgnvRPN2sJM84sUbBcjI7bMoqZsYkLExIxoOM2Azysz4QU72U8nen6jeb7cnkpKKDR5E7t9NpWp8ZN/VA/BbTtvWuxo0iZmZgzxkr+kYLv+auK7qfTSPUyeDppfgG9rtKEZW9jnh5GzYvwqMBYnkS+MIGduZc8a4CRFCIKQL012NHkTc30/4l/D/CoF202IIN4aQ+VsY2tgkwrgs8xudM025o408rZUP7xOLk0mXxpBTt/MnoYbVmga5UW9FU/dzC5LIZ8Y5IcnWLsFCWS9Fc3eyh64ltZ404rhAHSFm0MLdzEjQokn/fckXZJE0gSauZXZNJMeHOxXj7xXy28/Y69VZcYTN7F3pvtzCrZ7YAA5O5a4bgfjgCkVwKdghFbsZ4Uk8dZYP2ywOd+NieRbY6jZW5ncloB+LvTza7G3KTXiSZvY1QPIh7ICouZfGkFFyYile1guoM8y4GOePsYWGX1mEbUeur4f+dEEeu4OZn9T4J6lAXE59hKndXjyZvaZIeQ9/QOl2kkCfTKBanPgB2GiPfAR/yvkvqvEv82gpQHTcTQnlvh6Mr1gF7O1LkCzMFCuyLzLbcHTtzD/HUne7o8d75chotCG6fTuBvwKTLQHXu/Xau65k9zWWVSomO+i9K0pUcQv0+nb9jI/VAbieRpYF2W+7KjHc3cwH0+gb0wMxApXC9GWmdSbBdxX5YF4jgFfcbAZrzjA/jqDSlQEQJPoRUaFEdtn06sOc+8XBdx5GojX5T62oYpbtof5cSo9OzYQz6520TJi8yzqwcPstkBtewFersyEF+5iP5tIDw0J3PN0YBCxP4d6+TT32NHA6suAIOxdr5/hHjjE7ZhDj4sI3LOrXX818eM0etle5lgbZCHwLnVWPG0z++IIcqZ/TZzvhgQFsS+H3laH7zvIBs5uMhCEvQUjtPYE+14Rt/9aagCsY4QQQmhsOPHhePrabUwxrPkLvIbRhXK2sfdlkrckw/UQIYQiJGh/Dl1mwvN3sgGy4TZ88L3CzqBFu9jfG/CBa+l4OaTgn3LiiOeHU7O3sg02yELAPxuDrtnGTI8m1gTGjKYukgvQLzNopQBN3cw02/kuTe+Dz97zmuxo0iZGRKHts2FRlUu4PZVcmU7O3MLqnXwXBQS29uVjkpXES768A1ovEZLo00nUzBhi9K9Mgd7Pb1shCD3spBaP+oW5Jo78bBIlgpOrE49mk7NiiGu2MdbAaHgBXojD6La9LE0SH4wPhHnz3UEgtHYI9dxQcspmZlOtP2chBKEnfVfBzdrKvDKSfGYwCafW5b00kspQEzfsYJyBNTwNeIv7DrH1NvztFIqGq+Bl3ZxM/jKdvusA+2Ke364QBV8Bz2A49OgR9rGj3I7Z9IIEqNUrIxB6bzylFBJLfmeZgJu2BHj2+FH2aCv+dQYthmabLhgVRuTOo36q4m7azVrcfJemF8Al2wOa7WjGFiZfh49eRw8MgkfBrqII9OVkys7i2/fBYqSg7/z7FLexBm+ZRSsFfBfFd0RJiX05tEaIRvzCFPrdLoYQhD21qwEP/ZmZGElumkkHw9CYqyQk0Y9T6VorvuuPwJmzBPj06hnu01Ju+2w4W6+aiEL/G0c9mk1O2sR8UuJXzTgQhN3n5tCTx9hb97KfTaSeHUJCr2D3SGj02wz6rB4/cAh6C0Hvevss92YBt2sOFSnluyg+69YUcvccet1p7pY9rMlfmkkhCLupyIDH/MrkafHJ6+kpUZCBPSIXoE0z6dwW/OBhyELQW94r4l7K53bNoWJkcML2SKaGODKPVgjQoJ+YfX6xeRME4VVjMXr1DDdhI7Mindw4kw60Vep7iUqIts2m9zfhNbBhE+gF7xdxz5/ids2h+gXkgtoeJ6HRO2OpN8dQS35nH8pl7T4+DwqC8OoU6PG435jfqrlDc+m/pUPteZJaiHbMofc14jW50F8IPOn9Iu5fp7jdc6gkJaSgJ82JJU5dTzfZ0cCfmL2NPnzWwqW8q2wMeuIoO3kTszyV3HUNDWdUb1AL0fbZ9IEmfP9ByELgGW+e5f6dBynYW0LE6ItJ1KujqGV72eX72FYH3wXqFgjCLvmhksv8kamxovz5gr+lw7CYXqQRoR1z6JNavPIAzKkAPfXKae61M9yeayAFe1dOHFEwnw4WoQE/ut86y/nczGAIwis42oonbmSeP8V9PIH6YhIVIeG7QAFAKUBbZ9FlRrx0D+v2tTMKeI9nj7MfFnN7r6Fg4fs+IBegV0ZSu+fQv1Rz2T8xm31qSTYIwk6dNeD5O9kbdrLLUsjj19GTIuFc6jtyAdo8iza70fydrANGz4CrhBFadZj9rQbvy6GjYYxoH8rUENtn0y+OoB45wk7YyBzwkTGlEISXkK/DN+1mp2xixoQTJQvpO9JgjiAPxBT6cRqlEKBZWxmDi+/SAN/h5tCte9jjbXj3NTComx85cUT+DfSdaeSte9mpm5nfvX4cDQThX+ysx3O2MbO3ssNDifJFgjVZpITmu0wBTECizydRg4KJiRuZRhvfpQG+wMqgeTsYgwttn0WrhXyXJoCRBFqWQhYvpG9NIf9+gB31K/Ndhff2HUIQIoSQwYXWF3ADfmRWH2YXJJAVi+g1WaQMItALkAR6bRS1OIkc+5sfrnAIPKvFjqZsYiIlxE/TKLiF9QY0iZalkGcX0I9nk2+d5RK/Zf55kvPCTbkD+svi5tCOevxFGbellpsVS745hpoYSUAjqBd6LJuMkaHJm5hvp9ATobMWXEqxEV+zjV2WQj4Nm6B5GZJA8+LJefFkng6/W8hl/ciOCiNuSSbnxZNS74gg7yhF37IyaGc993M1/q2aS1MTtySTb44RBMEKvN7tlmQyWkYs2s28PJJamgwtGeAv9jTixbuZF0ZQt6bAd8N7ZQcRb4+lXhlJ/VzNfV7G3XWAnR5DXh9PzIol+V0DPVCC0Mmio614bxPe08jltuCRYcS1ceRzQ2lYddCHTI4kfr+GvnY7W6jH/xpGwW0/aPdhMffUMfarKfRkaC3wBVIaLUkilySROif6tZr7oRLfc9CdoSamRhETIsnRYYSiz7fHIjD2rubamJiY3Nzc6Ojorhxst9uFQiFFXbi3JotRvRWXmVCBHp/R4+NtuNCAMzXEhAhiUiQ5OYqA/j+PMJvNCoWij99U60Q37GCCRMRnk6i+P2G8Ci/171UYDj18hN1cizfOoFJUfZ2CUP+e4uLQH814TwO3pxGf0OJ4OTE0hBigIbKCiGQlipcTgks953uw/n07EH5vIva2YoJgLW5kciGTG7XYcZMdNdhwqJhIVqIMNTEomFieSg4KJmArav8QLEI75tD3H2RH/8r8PJ1KhhVDApXWiRbtYgQkyp0HA0R9m5BEkyOJyZEUQojhUIEBH2/DBXq84zRXbkL1NhwqJqKkKEyClAJCKUT39CcHaDx54vt2EIpIpBYgkiRiZEgpQCohChWTkVIUJSVEEHv+S0ii/42j3i3ixv3GfDCezomDLAw4J9rwwl3sggTi38MpCj5/P0KTKDuIyA7680NlONRkxw021GzHJheyMEjp6aYg3w7CMWF4UgxBUdA9HohWppPZQcSi3WxuK7F2CFwNA8iHxdwTx9i3x1DzE+Dc9380iWJkRIwMIdRbJzl8jYAPGxVGHLuOPtyCp29mvHByEvA4ixst28O+dobbl0NDCgJPgW8S8G2hYrRtFj0lihz2M7O1DrLQn53S4mE/M0IKHZlHp/X50BjgxyAIgc8jCfTUYPLbKfRdB9jVh2GRbj+EEfrvaW7mVmbtEPKD8bBqDPAwCELgJ8ZHECevpxtsaMQvTJ4OHg39R60Vz9zCbKjmcufSNyXBJQt4HnyrgP/QiNC3U6iHB5IztjDPn/LeFX5B131ayg37mZkUSe65hu6ngOZQ0CugiQH4m6XJ5ORI4s797M9V3IcTqIFBcPX0SXVWfNcBtt6Gdsym4UMEvQqeCIEfipERW2bRd/cnp29hnj4OvYY+hsPonUJuyAZmVBh5ZB6kIOh1EITAPxEILU8lT10vKDKgrB+ZnfXQa+gb8nR47G/MV+Xcnhz6qcHkJdfWAsCzoGkU+LNIKfp+KrWpFv/tADs8lFg3koRl1r2W0YWeOc5+U8E9P4y6Iw3WVAd9B263gP+7JpYomE+nq9DgDcy/T3F2hu8Cgb/iMPqwmMv4we1g0dkFgjshBUHfgiAEAUFCo38MpY7Mo09pccYPzFflHDSVeoldDXjoz8xnpdxvM+h3x1H87ksHAhM0jYIAkqAgvptKHWjCa3LZdae5F4dT06Lh2YM3p7T4saNsuQm9MJyE9dIAjyAIQcAZF0Ecnkf/WMndc5CNlqJ/DaPGhEMc9qkiA157gtvbyD01mPpbOoyIATyDLyAIRARCCxLIgvn0LSnkzXvY2VuZg83QVtoXigx42R524iZmUDBRtkhwT39IQcA/+A6CwEWT6PZUsnghfUM/8pY97NTNzA6YZdFrTrThm3azkzYx6Wqi9EbBY9mkDBqkgHeAbyIIdEISrUgnl6eSX5VzDx5mhRR6KItckABPKp6BEdpeh9edZosMaHUW+cF4gdzTu6oC0EMQhAAghBBNomUp5NIUclMNfvUM+8gR7p7+5B1pZKiY75L5LCuDvijj3jjDCSm0egC5OAnuLYCXgiAE4E8EQjlxRE4cnafD6wu4tO/dObHkygxyLIymuRoFevxeEfdlGTcxknxzLDU5EmoPeDUIQgAuITuI+GA89fII6uMSbsV+lkDo9jTy5mQyQsJ3ybyYyY2+q+A+LuGqLej2VOLkDXQsrOMDfAEEIQCd0ojQg1nkg1nk/ib8cQnX/wf3mDBiSTI5Lx4GevzJzaHt9firMm5zLTclinwsm5wTS1KQgMB3wNkMwJWNjyDGR1DrGWpDFfdlGXfPH+zMGHJhAjE7lpQG6jnEcOj3Rvx9JfdzFZeqIpYkkW+MEcC6MMAXBepJDMDVk9HolmTylmRS60Qbqrj3irg79rOTI8m58cScWDI8MFpNjS60vZ77tRpvqeVSVMTCBPLYdXScHB4AgQ+DIATgqgWL0J1p5J1ppN6JNtdyv9bgNbnuJAUxM4aYHk2OCSf8bHgkh9FJLd5ej3fUccfa8LgIYm4c+eIIOkoK+Qf8gSeD0Ol0ikSXaxlxu90CAcwhAv5DI0I3J5M3JyOGo/5oxtvquIdy2RIjHh1OTIokx4UTw0MJEcV3KbuFxShPiw804z2NeG8jFy4hpkcTawZSkyOJgG0NBv7KM9/ourq6xYsX5+fnC4XCV1999ZZbbrnggGefffbjjz9ubW2VyWT33nvv2rVrPfK+AHgJmkQTI4mJkdS/hyO9E+1r4vY04tWHuUIDzg4mRoYSw0OJoSFEspLw5h2Gaiz4eBs+1oYPt+BjrThGRoyLIBYkEG+NEURK+S4cAL3GM0G4atWqAQMG7N279/jx41OmTJk8eXJ0dPT5B4SGhu7YsSMtLa2oqGjChAmZmZkLFy70yFsD4G00IjQvnpwXjxBCVgYda8W5rfjHKvzkMU7rwFlBRFYQMTCISFcTGWqCx/kYOicqNuICPS7Q49M6fEqLBSQaGkIMDyUfyiJHhhFBMPIFBAYC454urmgwGEJDQ0tLS/v164cQysnJmTBhwiOPPNLZ8QsWLMjMzPzHP/5xyf83JiYmNzf3ghztjN1uFwqFFOWbbU++z2w2KxQKvkvhS/ROlK/D+TpcoMeFBlxowA4WJSuJBAWRoEBxciJOjqKkRJQUhYqv3KbalfpnONTiwM12VG9FtVZcY8FVFlRpxqVGzGKUpiIyNUSGmsgOJrI0BDz2XRX4/vPLg/XvgSfC6upqoVDYnoIIof79+5eXl3d2sE6nO3DgwF133dXZARhjo9EolXackWKxWCIJjNF4IABoRO0tqH82jxpcqMyEK824yozKTHh3A2q0cQ021GLHIgqFiIkgEVILkUpISGgko5GERuL/D0iXixYK2faf3RyyuJGDRXYG6V3Y6EIGF2pzYLMbhYpRuISIkaEYGREjI66NQwkKMllJwOpxALTzQBAaDAaZTHbuV4VCUVlZeckj3W73smXLZs6cOW3atM5eTavVjh49miQ7Rt1Nnz79o48+6uxgeCLkl9VqJQgv7vLyBTRC6WKULkYo9ML/y+QmtE5kcCGDizC5kZ1FdpawM8jJddQ5jV0i9P8/U7ifGAlJLKWRSoBUQqQS4CARChJ20uTDIIult/5RAQK+//zqYv2LxWKavkLSeSAIQ0JCjEbjuV/1en14ePjFh7Esu3TpUoTQ+++/f/lX63rTKEVREIQ8whjL5XK+S+G35AhFXfYAs9mtUMBjHW/g+88vD9a/B6Y79evXj6bpgoKC9l9PnjyZkZFxwTEcxy1fvlyn0/3www9CobDnbwoAAAB4hAeCUCaTLVmy5Mknn2xsbPz6669Pnjy5ePFihFB+fn5OTk77MXffffeuXbvuu+++AwcO7Ny5s7CwsOfvCwAAAPScZ6ZPrFu3bvXq1WPGjImMjPzll1+CgoIQQhhjhmHaD7BYLP3793/jjTfaf50zZ87FT40AAABA3/PA9AnPgukTPgSGj/ML6p9fUP/88mD9+9eSiAAAAMBVgkUD/ZbeYTjTWnimtajaVNtoadba9W6OcTAOpVChEivDpCFJmoQUTcLQiEHBEg3fhQUgsFhc1hPN+cXa0nJDVYOl2egwmVwmmhSIKKFKpIyUh8cqo/qHpGWF9o+QhfFdWP8HQehv2mzaHVV799cerjHVDQhNzwxJn5syK1IWHiwNEpICMS02Ok1Gp7nJ2lyur/qj7sj64x+ESUMmxI6ZlTglXHbRXDYAgOeYnOYdVXt/r95fYageGNY/IzgtJ3lmjCJKJVKoREo3x7hYl95hbLI0V5lqD9Tmvn3iY5VIOSF21NT4CfGqWL6L77egj9B/HG/K21CyKa+5YELc6ElxYweHD6TJK9cMh7lCbcmOyr27q/enBScvzrhhSMTALr4j9JHwC+qfX1dV/2X6yq/P/nS44djoqOEzEicNDssSUFfeiofDuEhbsrfm4I6qPbGK6HmpsyfFjSUJ6NJCyKPffwhCf3Cw/sjnZ76zue0L0+dO7TdRQndnkrWbde+s3vfN2Z/EtHhF9tJhkYOu+FfgQswvqH9+dbH+S/UV75/6vNxQtTB97rXJM2WC7qzoynDsgbrDPxZv1Nn1t2QumJE4mSIC/boHQdgBgvBsW/HbJz6yM45bs24aFzOK7PGCTxjhfTWHPsj7PEwWes+QOxLV8Zc5GC7E/IL659cV67/V1vbuyc9ONOfdmnXTnKTpAtIDXVF5LQWfnv6m1aZdOfjWcTEje/6CvguCsEMgB6HOrn/7xMd5LWfuyL5lRsLknkfg+VjMbizb/nH+VzMSJi8fuKSzR0y4EPML6p9fl6l/FrM/FP32ZcEP16XOWdz/hu410lzGkYYT75z8WC1WrR5+V5wyxrMv7isgCDsEZhByGLCgnt0AACAASURBVP9csvnT09/kpMxYmnmjmO6tXeMMTuP/Tnxyovn0o6PuGxqRffEBcCHmF9Q/vzqr/3JD1X8OvqYRq1cNXxmtiOyld+cwt6Fk82env81Jnn5r1k1CKuCWroQg7BCAQVhjqn/p8BskQT408t44ZZdqqYeON+W9eHj9qKihdw9ZLv7rjS1ciPkF9c+vi+ufw9yXBT/8WPzbXYOXz0qc0gdl0Nn1649/UKaveGTU/VmhgbVcFwRhB08FIevkXEa328qyTo51sgghUkBSQlKkEYg0AoL0ip1WMMI/FP32xZnvbxt407yUOZ5tC708q9u2/tj7BW1FT499KDUo6dyfw4WYX1D//Lqg/putrc/9sU5ECx8f9UCINLgvS7K/9vBrx96dGj/+zuxbvOfR0GlwO7Quzo3bL6qUkCSFpEBOC+U0LfPA0wsEYYduBKHbwtianfZWl6PNaW91ObQup96NWSxU0QI5TQpJWkwhhFgXx7k4h87lNjPSKLEmVa7JUCgTeNvAu8XW9p9Dr7lZ5okxq6LkEbyUYVf1/vXH3rsl88b56TkEIhBciPkG9c+v8+t/f+2hdUfeXpRx/aKM6/vyJvUck9O87sjb1aa6p8asTtYk9n0B2tkaHbqzZn2xxVxjp0WkOERIiUhK1HFRZZ2c28K4zQzHYrFGIA4WikOEklCRJFQoCRWJ1AJ0NTUHQdjhMkHIMdhldDv1bofe5dC6HW0ue5vT0eJCFJKEiqRhIkmoUBwiEocIxRoBLe00SjkGm6tthhKLNt9EUETU+OCwYWqC6tMv+p6aP147+r+F6fMW97+B3ylEjZbmZw+8GCkLf2TUfTKBFC7E/IL651d7/TMc++6pT/fVHPzH+EfTg1P4LdL2yj1vn/hwSeaChelziatKlR7CSHvG1LBf62hzhWQr1alyZaKMEnV6sWKdnFPnsmtdjjaXvdVlb3XaW5yMg5OECCWhQnFwx5VZpBEI1QJKeOnXgSDs0HRKay5xEASBOcw6ONbFMXaWsbFuM8O5OaFS0N622XHfESKUhIi6/0iOkaHUUr+nzal3J98Y3TdPhw7Guf74+6eazzw9dg3v51g7N+tef/yDE835z014PITUwIWYRxCE/DKbzW6aeWb/i3Kh9Ikxq5VCr/gsGi3Nz/2xTiaQPjFmlUas7oN3tLc4y75vYF1czJSQ4Cxlt/uSWCdnb3U62lz2to62OqfB7TK4EUICBS2QUbSUokQUJSKjxgfLosUQhB205QZnE0OSJCIIWkKSApKWUgIpJVDQtKS3RtBo800VPzcGD1QmzI3o1e7DSkP12gMvpQWnrB5+l8eHX/dQ+43nygG3zk6bxndZAhcEIb+OVJ946cSbc1NmLh1wY58+fl0Ji9lP8r/ZXLHzidGrLjne24Ma9mlrd7bGzQiNHBvcS3XAOjmXiWFsLGNnWSfLOjlNmlyoEkAQduBr1CjjYIs/q0UEkb4s9jKP/z3xW9m2D059cfeQ5TP7ZOxZN5TpK5/c8/yUfuNXDFoKaz7xAoKQR7+Wbv0w78snxqwaGTWU77Jc2snm088ffHVm4uTbBy7pjWVoMIcrNjSaKm3974gXaa68XJzHQRB24HH6BOZw+U+N5mpb1t8TLtPF2A1Wt21d7lvVprpnxz3SNxMkuq1B2/jKqbdpkn5m7ENyoYzv4gQcCEJeMBz7xrH38lsKnhi2KjUime/iXI7BaXz+4KsOxvnM2DWh0hAPvjJmceEnNZjF6bfG9dLDwBXBfoT8I0gieUGUOlV+9qMajvHYzUSJrnzFltVyofydmS97eQoihBRC+ctT1sYpo+/a9lCNqZ7v4gDQ6wxO44O7ntLadW/PfDlSFs53ca5ALVK9NPnZUVFD/7Z1zaH6Yx57XYxKv6tHCPW/M56vFPQsf/g38CghJ0IcJCj6tAZzHsjCn4o3PfL72hXZSx8c8XfvmQx0eRRB3Tv0zpv7z79/x+NHGk7wXRwAelG5oequrQ9lhw14bsITUoGE7+J0CYGImzMX/HP8Y68efeedEx8zHNvz16ze0mxrdqYtjfWSOdY9B0HYMwRKvjGadXC1O1t78jJml+Wpff/ZWrnr7ZkvT44f56nS9ZnZSdP+NeGJFw+/8V3hz3yXBYBesb/20JpdT/9t0LI7sm/mZaZgT2SFZnww+7UaU/19Ox5ttDT35KXa8kytp4yZd8Z3NqvBF/nPv4QvJE2k3xrbdFBnrrZ37xVOtxbesXlVpCzsrRkv8TVZvucGhKa/M+uVHVV7/3PoNTfr5rs4AHgMRvjT09+uP/7BS5PXTokfz3dxukkpUvx70pNT4yf+fdtDv1cf6N6LuExM+U8NabfECuR+tak7BKEHCOR00vyo4i9qWSd3VX+Rw9ynp795Zv8Lq4ffdc/QOzyySwuPwqQh66e/4GRdD+x8UmvX810cADzAwTjW7n/pSOPx/8185fz1BX0RgYgF6de+NHnth/lfvnj4DQfjuLq/j1Hpt/VRY4MUcb7RLNx1EISeEZylVCZIqzZdRZtDk7Xl/h1P5LUUfDD7tdHRw3qvbH1JTIueHffw6Ohhd21dU6Qt7b034hhsa3YaSizt/9manFd7FwJ8Ecdge4vTWGZt/9yt9Q7W1Yufe5O15Z7tj0oFktemPh8k0fTeG/Wl1KCk92e/ijFesWV1sbas63+x8ZCOsbEx00J7r2x88e1HEK+SeH3k8RdKI0ZrZJFXnvy+rWL32yc+Xpx5w43p1/lcf8PlEYhYOuDGRHW/x/b88++DPTwP0t7ibMszafONtmanSCPsWJwQI5fJ7dC7aQmliJco+0nVafKufArAJzh0LkORxVRpM9fYnHq3SCMQqjqWwnebGXurU6QRBmcpQgaq5B59UjnZfPqff7xyS+aC+WnXevBlvYGEFj82+oHfqw88uucfC9LmLsmcf8WpwIyNrdnaknV3gt8MkDkfzCP0pIb9Wt1Z84CV/S5zjMFpXJf7dq254akxDyZrEvqqaL3i8vN4qo21T+7794jIIfcMvb3n83kdOlf1lhZjiSVksKr9+fviE9Khc5mr7KYqq77QglkcnKUMGaxSxku9adEPT/LveYS2JmfrSYM23+S2sZp0uSpJpoiXSsNEF36aGFkaHNp8Y+sJozhY2C8nXB7jgTj8vujXr87++MzYhwaHZ3V2jB/Uf6ut7T+HXncwzifGrIpRRF3myIqfGzkGJy+43DF9DCbUd/C2IMQsPvFyWeK8CE3GpT+evTUHXz/27syEKbcPXCKgeFiLwbOu+EW0uKz/OrjO5rb/Y/yjPVn2sH5vW+3O1qjxwdETQ7o4b8ne4mw7ZWw9ZeRcOGy4OmyYWhzsGzNSus4PLsQXc1uYluOGlqMGxs6GDFKFZqvksZKu3MpgFjfn6mu2t4RkqxLmRnR7ZXwH43w5980aU92/JjweLgu7zJH+Uf8Y4Q3Fmz85/fWtWYuuT825ZAOVvdWV/0b5kEdTvGqMDARhB28LQoSQrsBctalp8EPJFzyv6B2G146+W2mseXTUfZkh6XwVz7O68kXkMP709DebynesHffIgNCr/oezLq7s23q71pVxW5xI3Z1bB2u9o/movvWEURYljhitCR6g7OPNQ3qPf1yIO2BkKLU0HdIZSqxBAxThIzSqRFk3HuVZB1fyVZ3bxqbfGitUXPVVu97c+PS+/6QEJT444m7Rleby+lP915kbXjy8HmPukVH3X7yUR+HHNYp4ScwU7+odhCDs4IVBiBDKX18RNT44ZJCq/VeM8Obyne+f+uyapOm3Zt3kKzPlu6LrX8RD9cdePPzGzZkLFqRf2/XliVknd+Z/ldJwcdKCKJLuUXpxDNadMTUd0tmaneEjNBGjg3hZHdGz/ONCzFjZ5qP6xoM6WkRGjA4KHaKmxD0bxIdR7c7W5lx91r0JV3Xz1L6n4PKBS+alzO7K8f5R/+dwGP9Suvnj/K/np127JHP+uUHs1gZHwfvVw55M7eE56HEQhB28Mwh1Z801W1sGPZiEEKo01vz3yDsM514z4h5f7xG82FV9EZusLc/sfyFCFvboqPtlgitvYsUx+OwH1eIgQfLCaA928tlbnI0HdS3HDcp+0sixwZo0ue/2IPr6hdhcY2/8Q6s7Yw4aoIgcE6yI9+RQl/q9bc2H9Vn3Jgq6sPOam2PeO/npvtpDV7WnoK/X/yU1W1tfP/ZunbnxweF3DQrPQgiVfFknjRTHTPHkUqUeAUHYwTuDEGF04uXSqJygH+0/76jas3zgkmuTZ/nZ0NB2V/tFdLPut09+fLj+2DPjHsoITr3coRgVfVaDEJG2NKY3RqlxLq71pLHxDx1jZyPGBIWP0HTlcultfPRCzLq41hPGpoM6xsFGjg4KH6Hp/i6hl1W9uVlfbMm6J+Hya6A0Wpr/ceDlYInm0dH3X9Wegj5a/12xv/bwm8c/yAxJW5G4rPod3fAn03r6mN4LIAg7eGcQcpjbsemPthPGxpnVKwYtVYmUfJeot3Tvi7i/9tB/j/7vxvR5izKu7+z+oGGftu2UMeuehN7uzzPX2JsO6rSnTZoMecTooO71S/HF5y7E1gZH0yFd60mjKlEWMSaoDx7HS76qIwVk8sJOxzruqt6//tj7t2QunJ+ec7V7Cvpc/V8VJ+v6suAH8zZXUkj8tKWjxV62JSqCIDzHC4PwQF3uB6c+DxEFz//jxqwVSfJor/v2eFC3v4gttrbn//gvSZJPjF518e4w1gbHmf9VZa9KFAf1UX8qY2dbjhmaDukwi8JHasKGq7sxzqLv+cqFmHGwbSeNzbl6l4kJH6kJH6np3rinbmCd3Ml1ZQnXRgRnXXg/anXbXjv6brGu7Omxa1I0id14cV+p/25jrOyRfxcfmPL7EdPx27IWzU6a1hv7GnYbBGEHrwrC4015H+Z96WSdKwYtHRU1rO73NnuLM2WRt2+l1BM9+SJyGH919scfin65e8gdMxIm/fnnDD713/KYqSFhQ7s/3aLbzNW2psN6bb5JmSANG64OylR62wCB83n5hRhz2FhqbT5m0J81q1Nl4SP74hHwYuZqe+FH1YPWJAuVf97cnGw+/cKh10dGDb17yO1iWtTNV/bu+u+5+j1ttkZnyuLoIm3pe6c+a7G1Lc9aPDl+vJd09EAQdvCSIDzaePLT098Ynebbsm469y1xW5jj/ykd/kyaf+zXdUk9/yKW6iueP/hqrCLqwRF/b59oWL21xd7iTF8W66Eydgfr4rT5ppZjBkudPThLGTpYpUqWeeGCGl56IcbIXGNvPWloO2UUqQWhQ9VhQ9S91AvYRTXbWmyNjvTb4hBCDsb5ft5ne2sOPTLy3hFRQ3rysl5a/55z4sXS5EXRyn4dQ9uON+V9lP+l2WVdNuDGyfHjeH86hCDswG8QspjdW3Pw67M/uTnmlswFU+LHX7BMUdEnNep0RcQoP1mi8GIe+SK6Wfcnp7/eVL7z7iG3T9SMPbWubNCa5D5rOrs8l4lpv6A7tO7gLGVItlKVJPOeaYjedSHGyFxja8s3afNMpIAIGaQKHaKShHbzYcuzOAafeKE0ZXF0hbzipcPrB4Rm3DfszqsaF3NJ3lX/nmaqtJV9Vz/k0QvH0B5rPPX5me9abG2LMq6blTi128/TPQdB2IGvIDQ5zZvKd2wo2RQpC1/U//rR0cMu2c2uLzTXbG/JfsC3V6y/DA9+EUt05S8efmN60cys5PTMud3psOlVDp1Lm2dqyzfZ25yadEVwpkKdJqcl/nNH3G2cizOWW7VnzLqzZlpChgxUBQ9UyqK8rmu89mhTwdbKj7M+XD3irlFRnlnj3hvqv/eUfl0vjRJFT7z0rImzbcVfnf3pdMvZOUnTrkudffkleHoJBGGHPg5CjHBeS8HG0u2HGo6Ojx09Py3n8n3smMPH/lWSuSJe6qcLQHv2QmCosuZ9WPpG1uvX95+zKOM671yCzmVidGfNugKTsdwqixRr0uTqVLk8TsJLwylvF2KMrE0OQ4nFUGwxVdrksZKgTEVwplIc4o2LRWCEt1bsfv/k5yuLV2ZOTYoZ6bFLth8HIevgjj5XPPTxK6yp1mhp/qlk09aKXZkhadcmzxoVPbQv20shCDv0WRDWmRt2Vu3dVvG7iBblJM2YmThZIZR35S9Wb21hHWzidZG9XUJeePZCcPrtyrDhatzf/ebxDyoNNfcNu9NTd+69gWOwqdyqL7YYSixOvVuZIFUlyZQJUnmspM/aTvvyQow5bGtymipsxgqrsdxKiUh1qlyTKlenyr1whtk5xdqy1469ixBaNXxllDm66NOaYU+meuoD8uMgbDqkM5RY0m+N68rBTta1u3r/prLtdebG6f0mTkuYmBaU3NslRBCE5/R2ENaY6g/UHf69+oDWrpsUN25m4uSr/YAdOlfe6xUjnk3zwqEWPefBL6K52l78ee3QJ1LaK+pI44n1x96PkIXfPWR5gjreI2/Re9wWxlhhM5VbjRVWR5tLFiVWxEsVcRJ5rEQcJOy9cZK9fSF2Gd2WOoe5xmausVuq7QIl3Z73qmSZl3TiXkarre39vC+ONZ5cMWjZrMQp7Z0XBe9VhQxShY/wTLe9Hwdh/vqK2GmhnW0e0Jk6c8P2yt93Vu0jEDEpfuyEmNGpwUlXOzuz6yAIO/RGELpY1+nWwtyG44fqj9kZx7iYkRPjxmSHZV5xv67O5L1WHn9NuDqlS0+QvsWDX8TCT2rUybLIccHn/oTh2F9KN39+5ruxMSOXZy0OkQZf5q97D9bJmWvslvbwqLWzTk4WJZZFiaWRYmm4SBoh8mDPomcvxKyTs7c4bc1OW6PD0uCwNjgQRvIYsTxOqoiTKOKlvrL4jtVt+/rsT7+UbpmbMuvm/gukgj9XbjOUWit+ahjySIpHLs7+GoQuo/vkK2Uj1qZ3+9G5WFe2t+bg/trDDsYxMmroyKihQyOyz/8gPAKCsIOngtDBOIu0JXktZ/NazhRqSxLV8e0fXmqQB25n6n9vs2tdXrWPl6d46otob3Xmr68c/lQqedFSWBaX9auzP/5Wtu2apOk39b9eLVL1/O36ktvKWhvs1gaHrclpa3LYm10EhSShInGIUBwsFAcLRRqBSCMQKgXdmLDYvfrHHHabGYfO7dS7nXqXQ+uyt7nsrS7GxkrDRZJwkSxC1J7c3v/YdwEH49hQsvnbwg2jo4cvH7gk7KK1GhBCp14tj5sRFpTpge+tvwZhwz6ttdHhkTnQtab6Qw3HchuOn20r7qeKGxKelRXWf0BIhlwo6/mLQxB26HYQOhhHhaGm3FBZoisv0pbWmOqS1AlZoRnZ4QMGhQ3w7J2LH7eOeuqLWPZ9g1BJx83sdBRDm133xZnvd1XvuzZ55sL0eRqxj8Xh+Vxmxt7idGhdDq3LqXc7dG6n3uUyMbSEEipoQft/UoqWUbSEoiUUJSIpEUmJKYJE7U+TBEW0T061WCxyuRwhxLkx5+YQQqyDwxgzNpZzY9bBMg6OsbNuC8PYWLeVdZvcLjPjtrICGSUKEorUAnGQUBwsEAcLJaEikVrgQ8vLXcDBOH4p3fpN4YbssMzlWYvjVZ3OQ207ZWzYrx14nwdGJvtrEOavr4idHqZJ92Qjlot1FbQVn2w+fbr1bJG2NFQakhGckhqUlKRJSFYndC8XPVj/PrCOVA8ZnaZWW1uLra3B3FxvaawzN9QY6wxOY7wyNknTL0WTNDtxWoomoffGKIqDhGKNwFhuU6d44CbI/7gtTFuecejjl1uDO0QStGr4yiWZ878s+GHZb3dPT5i0KOO6cJl37Y7WRUIFLVTQqqQLvwxuM+OyMG4z4zIzjJV121h7q4t1sKyTY50c42ARhxg7ixDCLGadHEIIY0wQBEKIFBCkgEQIUWKSIAhaSpECghJRtJikpZRII5BHSwRySqAUCBW0QE750z2ZyWXeULx5Q8nGQeFZ/53yzyv2KAcPVFZtajZX2z272YXfcBnd9hanxy9WQko4ODxrcHgWQojDXKWxpkhbWqwt2129v9JQI6HF8arYaEVktCIySh4RJg0Jk4aoxeo+W8LGt58Ij9WdKjKUkiRpc9tZjnWwDgfjtLntZpfF6DQbnSaDwyARSEIlweGy0Ah5WJQ8MkYRFa+KiZCF9+UqQXW/tzn8sXXUI3dk9XvbbI3OlJu62g6js+u/K/plU/mO4ZGDF2Vc1zfj07yTvz6RdFGDpen7ol92Vu4bFztycf/5F28n25m639scrc7kG3va9OeX9e/BdtGua7G11Rjr6swN9ebGRmtzi7WtxdZmdplVIqVKpFSKlEqhXCqQiCiRTCAlCGJO0rQYRRQ8EXZwsS6Ly0oQhFQgoQRUCBUspkUygVQukKnESrVIqRarz20vyaOQbGXeaxVJN0T60524pzTn6pMXXsVZFyTR3DX4tqUDbtxYtv3pfS+ESILmp+VMiBvjDR806AMcxscaT/5UsrGwrTQnefonOW8GS65uFGj4MPXxF0oT5kX68fKH3daWZ4yd3tez49sfAYdFDjr/D1nMGhwmg9NocpqNTpOdcTgZp42x90YBfPvaMTgsa2TMUN7XGr0icZBQpBGYKm0XN4gFOHO1DXPo3GKGXScTSBdlXLcwfe4fdUc2lGxaf/yDWYlTcpJnxCj87bEbnKO167dU7NpUtl0ulF2fes0/xj8morozhV+goFXJsrZTxvCRfrv8Yfe4zIyt2fPtot1DEVSwRHO1dznd49tB6EOC+iv0hWYIwgs05+rDR2q6PUaDJMjxsaPGx46qMzdsLNt+347Ho+URsxKnToob65FhacAbuFjXwfqjWyt2nWktmhg3Zu24R9KCe9oeHj5SU7erFYLwAvqzZnWq3HtW0+0zEIR9RJOuKP22vl8O3+XwJqyLa8s3DXnkwlV9uyFGEXXX4NtWDFqa23B8a8Xut098NCQie1q/CaOihvG4KDDoCYZjTzTn7a7af6AuNzUoaVbilLXjHvXUp6lJl5d9V29rdkrD4evxJ32ROai/324kfhkQhH1EESdxWxin3i3S+NjcrN7TlmdUJcrO3yWuhyiCGhM9Ykz0CKvbtq/m4KbyHS8dXj88cvCE2NGjoofJBFfdAAv6not1HWs6tb/28B91R2KVUZPixq0YtMzj7WMESYQN17Qc0fe7NsKzr+y7MIsNJdakGwKxcwGCsK8QSJMu1xeaI8YE8V0Ub9F6wthLe1TJBNLZSdNmJ00zOc1/1OXurNq37sjb6cEpo6KHjYoa1vXhhaDPtNra2pdzOtl8OjUoaXzsqM5mxHtK2BBVwfvV/XIifHf2pGeZKm3iUKFAEYihEIj/Zr5o0hWtJw0QhO0YO2uptmuWd2lV325TihTtiehgHMeb8g/VH/2h6FcCEcMjBw+NyB4SMVAlCsSGIC9hZxynms+caMo72nRKZ9cPjxw8OX7co6Pv7/lOgV0hjRRTItJcAxMKO+iLzEFXubio34Ag7DuaDHn5Dw0cg7uxmJb/0eab1Gky6qI11XqJmBaPjRkxNmYEQqjaWHu08dT2yj0v574ZLgsdFD5gYGhmVmiGryxn6tNMTvOZtsL8lrN5LQWVhuqMkNSh4dmPjbo/NSi5L6f2tgvOVrXlGyEI2+nOWro+ndfPQBD2HVpCSSNFpnKrOs0PF+C+Wm35pvDhal7eOl4VG6+KXZB+LYe5El15XkvBjqo9rx19V0SLBoSkZYSkZQSnJmsSYJSNRzAcW2GoKtKWnm0rPqstabNpM0JSB4b2v2vwbRnBKcJuzX/wlJCBysKPahKgdRQhp8HttjCK2AC9J4Ag7FOaDIWu0AxByNhZc6UtfVmnC0L2DZIg04NT0oNTFmVchxCqNdUXakvOtpXsqtpXaayJlIenaBJSNIlJmoREdT+fXuC0L1ndtgpDVbm+qlRfUaqrqDbVRcsj0oKTM0PTF6TPTVTHd3sjF4+TRYkJirDU2eWBGgDn6AvNmnR5wN4QQBD2KXWKvOz7er5LwT/tGZMqReZt63rEKqNjldEzEiYjhBiOrTRWl+oqSvUVf9QfrdBXkQSZqImPU8bEK2PjlNExyqgwaWjft+Z5mza7rs7cUGuqrzHVVxlqqow1Fre1nyouSd0vNShpTtK0JLVXP1uHZCvb8kwQhIZSa8B2ECIIwj4mjxU79W63hRHIA7rmtfmm0EFe/YBFk1SKJjFF8+ceBVq7vspYU2WsrTLWHKg7XGuqNzhNkfLwaHlElCIiQhYeIQsLl4WGyUJ8bq+orrC6bS3W1kZrS7O1pcnS0mBparA01ZsbxbQoRhEdr4qJVUYPCR+YoI4Ll4X23l6sHhecrSr6pKZfTjjfBeEVRsYya0IAzyQJ6Mtx3yNIQpkgNZZbQ7L98FrZRZybM5ZbU2+O4bsgV6d9taehEdnn/sTJuhrMjfWWpgZLU6Ol+WRzfrO1rcXW6mCcYdKQYIkmVBoSJFYHSTRBYrVarFKLVGqxSiVSiGkxj/+QS3KxLpPTbHCa9A6DwWnUO4w6u15r12vtuja7rsXaShJkmDQkXBYWLguNlIdnhKRGySOiFZG+PjtTHi1GGAX4zHpbk4MSk4E8xRmCsK+pUmTGsoAOQmOZVR4jocXevkLsFYkoYYI6/uJ9f5ysq8XaqnXoW21teodRa9NVGmv0DoPebjA6TSaXmcNYKZQrhHK5UC4TSGUCiVQglQtlElospIRyoUxICkS0SEgJRZSQIkjJ/2+QqRD+pXfZarOaCev5f2Jz21jMIYQcjJPhGIZj7IzDzbkdjNPutjtZl81tt7pt//+/NrPLYnJZzC4zy3EqkUIlUqrFqiCxRiNWBUk0ier4ILEmRBocJg3x+Pbi3kOdLtcXmgM5CA1lVnVKQA9cgCDsa+pkedGhWr5LwSddoUWT7s+9ESJK2N7d2NkBTtZldprNLovZZbG67Ta3zcbYzS6Lg3EYHMZ6c6OTdblYl5N1ulg3izm76gEqegAAIABJREFU244QwghbXH+JPY7jSPIv/axSgZQiSISQiBYJSJoiKSktEZACMS2S0GIhLVSI5BHyMAktkQmkMqFULpAphHKlSCHxvofUPhOUoWjYp42e1IuT972cscwa4t1dFb0NgrCvyaLEjJVxGd1CVYA2ROiLzBm9PI/ey4kooUga3PNpi365H17fU6XIir+sZZ2ct43e6iMYmSqsSX63W+pVCcgPnl8EUibJjOXWKx/pj+wtTsxgWUTgPn8Ab0MJSUWc1FBq4bsg/LDU2wVyWhiQK6udA0HIA3WyzFgWoEGoL7JoMhS+M6gQBARNhlxfGKBBaCy1qgK7gxBBEPJClSI3lAZoEOra5+0C4E2CMhT6IjPfpeCHsdyqSg70zTshCHkgDROxTs5pcPNdkL7GujhztU2dCkEIvIskTESQhK3JyXdB+hxGpiqbKtG358D0HAQhHwikiJeYq218l6Ovmcqt8hhJgA5JAN5NkybXFwfcQ6GtySGQUQG+vgeCIOSLMkFmqgy4IDSWWdUB3wgDvFP7BF++S9HXTJU2ZQKckhCEPFEmSAMwCA1l0C0PvJQqSWaqsGEO812QPmWqtCn6BXq7KIIg5Is8VmJvcbJOju+C9B3GwdpbnLC6MfBOAjktVAmsdQ6+C9KnTFU2ZQIEIQQhT0iakEWKLbV2vgvSd0zlNkW8FDYlBl5LnSIzBFLrqNvMMDZWGha4a8ud47EgtNlsNTU1HNfpIw7LstXV1Q5HYN1wXYYiwFpHDaUWdQr0RgDvpUqWGcsCaDahsdKmTJDCpF7kqSB84403oqOjp0yZkp6eXlhYePEBx44dS0xMnD59elRU1GeffeaRN/V1yn5SU2UA3X4ay2C6EvBqqiSZqcqG2UDpJjRXWqFdtJ0HgrC6uvqJJ544ePBgWVnZkiVLHnjggYuPWbly5Zo1a0pKSrZv33733Xdrtdqev6+vUybKzFX2AOmcZ2ysU+eWx0AHIfBetJSSBAsDp8MCRsqc44Eg/OabbyZPnpyRkYEQuvvuu3fv3t3c3Hz+AYWFhWfPnr3zzjsRQsOGDcvOzt6wYUPP39fXCWSUQEHZmgNiDq+xzKpIkBIUtMIAr6ZKlgdINyHn5mxNTgUMXkMIeWT3icrKytTU1Pafw8LCFApFdXV1eHj4+QdER0dLpR23HikpKVVVVZ29Gsuy+fn5TU1N7b9GRkZGRXW6LDp22twtNSzpq0N+ZKGM/mS1gPHV8rM2m0vapTtK3SlGHkK4akt7u0gBpev1D7pIpuaaTrLhaYauHOzT9W9uwOIgzDSX812Qq0YQJB0ZT1CeXATAA69lNptDQv7cyksmkxmNxgsOkEgklzngfEaj8eGHHxYIOrYoGjp06KuvvtrZwZY/tqCCg90vOu9sA3SVIdSZPXyXo5s4jrN37S7EoL0xVLFPW9rU20UKKF2vf9BFHBZZWpa2ff0Wga7cZ+HT9W+wDqRYlfbr/XwXpDvEM26mkwZaLF0a2SQWi88FSmc8EIRhYWF6vf7cr3q9/vzHwfYDDAbD+Qf079+/s1cLCgratm1bdHSnm5qej54yXzhrMUX56l7nihp76ff1kWtu5Lsg3dTF/fBYF1f1TFHcY0/D3AnPgv0Ie0Pzi6Wqm9fJoq+8U5hP17/pi9qIdEXYsMV8F6RHPFX/Hridyc7OPnLkSPvPZ86cIUkyKSnp/AP69+/f0tJSX1/f/uuRI0eys7N7/r5+QBYtdrS6WJefT6s3V9tk0WJIQeATAmTVJ3O1XREHHYQdPBCECxcurKmpeeWVV/Ly8latWrV8+XKZTIYQeuyxx1544QWEUHh4+IIFC+699978/Pxnn30WYzx79uyev68fIChCGiGy1vv53EpzJaxeAXyGop/UVOXnQcjYWMbGSkJhKn0HDwShTCbbuXPnwYMHV65cOWzYsJdeeqn9z2NiYiIjI9t/fuedd+Li4lasWFFSUrJt2zaaDvTFzs+Rx0nNNX5+1pmqYJQ28BnKflKzvwehucYuj5HAVPpzPBNIWVlZP/300wV/eO+99577WalUvv766x55Lz+jiJP4+Y6gGJlr7KlLIAiBb5CEilgX5zS4ReorjLDwXZYamxzaRc/jq0Oe/IY8VmKu8ecJvNYmh0BGw4ZnwGcEwHah5lo7zCA8HwQhz6RhIsbKMlaW74L0FnOVTQntosCn+P14GUutHZ4IzwdByDcCyWPEZv9d1clUaVPASBngU5R+PV7GqXcjjPy44bcbIAj5J4+V+vHyhiZ4IgS+Rh4rsTc5OT+d12SGx8GLQBDyTx4n8deBo4yVZSysNBxGaQNfQgpIaYTI4qfzmizQQXgRCEL+yWPE/jqV0Fxrl8fCKG3ge+RxEn9tp7G0n5XgPBCE/BNrhKyLc5sZvgvieWYYpQ18kyJW6q/Dua31dlk0nJV/AUHoBQgkjxb7ZTuMpQaWcQI+yV87LJx6NyIJoRKmM/0FBKFXkEVLrPV+ePtpqYNGGOCT/HVek6XODvtjXwyC0CvIo8WWOn97IoRR2sCHEUgWLbbU+dvtqbXeIY+58sYagQaC0CvIYiQWv3siNNfYFfEwcQL4KkWcH3YTWurtcuggvAgEoVeQhoncZoZx+FU7jKUWRsoAH+aX3YSWOocMnggvAkHoHQgki/S3SRRmGCkDfJkiTmLxrydCt4XhXJxYI+S7IF4HgtBbyPxsNiFG1joHNMIA3yVSCxCBnAY33wXxGEudQx4jhnm9F4Mg9BbyaIk/9czbWpwCBUXLKL4LAkD3yWP96qHQWm+XwZDRS4Eg9BayGIk/DRy11MIobeDz5LESf1oQ31LvkEdBB+ElQBB6C1mEyKFzcW4/WefXUgf3nsDnyWP8aoIvPBF2BoLQWxAUIQkR2pqcfBfEM2C6EvAD8mix36w4yro4l5GRhMJImUuAIPQisiixtcEvWkcxstbDSBng84QqAUES/jFextbgkESICBKGylwCBKEX8ZsgtLc5aSlFS2GkDPB5shiJfwzntjZAB2GnIAi9iCxKbG30i1OuHibtAj8h95eF1qwNDmkknJWXBkHoRfzmidACMwiBv5D5y7wma4NDBk+EnYAg9CICOU1S/tAhYamzw0gZ4B/8ZN9sjKxNEISdgiD0LrJof3gohJ0/gd8QB/nDvtkOnYuWULQEuu0vDYLQu8gifT4IYedP4Ff8Yt9sa4NDBh2EnYMg9C5+0E0IO38CP+MH+2ZDB+HlQRB6F6nvByFMpQd+xg/2zYYgvDwIQu8iDRM5DW6fXmjNAh2EwL/4wb7Z1kYIwsuBIPQuBEVIQn17oTVrg0MeDacc8B+SUKHbxLAOX709ZZ2c28SIQ2BxtU5BEHodnx4vw9hZxsaKg+CUA/6DIAlJhMjW5Ktnpa3RIQmHxdUuB4LQ68gixb57ynUMToMzDvgXn749hXbRK4Ig9DrSSLG18f/au/PAJsq0AeBv7mSS3keSnkDpsYDQA8pR5CiCVCxHpRy1rC6sIOAFi7u6+gEeKyoqIIjI0bJ4UAXF5SgqLqdyWgVaCm0thaZteqRJ2tznfH+MG2tb2rQ5ZpI8v78m0zczT9JMnsy8z7yvp14ahT554JX4EVy1xyZCbaMBE3HIjoLSIBFSDibiaD12xFFNg54PHYTA63j0fU0aKdxE2AtIhJTDCWRZLbhJ7ZEjWWjq4YwQeCF+BFcr1SOc7Dj6RdtogOG2ewaJkIowEdcTC0dxK65rNmAiOOSAt2HyGEyMoW81kh1InxlVZoTjbD8Y6aknkAipiC/ieOJ8TLoWIzuAyeDAhwp4IQ/tJtRKYfal3sF3FhVhYo88I4RKGeDF+JE8rScmwkYDdBD2ChIhFfHFHlkvo2nQ8yNgTBngnTy0XkYj1UPJaK8gEVIRJuZqPLBnHs4IgRcTeGYihEuj9oBESEVMHoPBZXjcDL2aeh0kQuCtuCFsk8Zs1lnIDqQvcKRtMmBCOCPsBSRCiuKLPaxexqyxWE04J5BFdiAAuAYNYWKuZ/VZ6OVGJgbz8fYOEiFFedwhpyGuwMDgasB78cVcjUdVscGt9HaCREhRfJEnHnJwBQZ4M76Y41mFo3ArvZ0gEVIU5mmFo9pGuJUeeDlMxPWsDgttI5SM2gUSIUVh4RxdixG3ekzlqKYBKmWAl+NHcLVSgweVc2ulBj78PLUDJEKKorPpbH+mxwzpRBSnwW9P4NWYGIPOpnlKOTduxXWtRl44TA7aO0iE1IWJOJ4yvoxebmTyoDgNeD9+hMdcHdXLjJwAJp0FX/K9g/eIujxo6G0oTgM+woPKuTVS6La3FyRC6uKLOJ4yVb1WCsVpwCfwPWfebKiUsR8kQurytDNCOOSA9/OgM0Io5LYfJELq4gk5ulbPKByF8QyBj8CIo9LiCUclnBHaDRIhddGZNE4AS9dC9cJRqxnXK0xYOBxywPvRmTROIEvXTPVLNbgF18tNvDA4Ku0CiZDSPKJwVNdk4AazaQwYXQ34BI/oJtS1GDlBLDoTjkq7QCKkNMwT6mU0jdBBCHwIJvaAo1LbqOfDdVG7QSKkNI+ol4GSUeBT+J4w0JoGRhntC0iElOYRZ4TQJw98Cib2gA4LOCr7BBIhpWHhHL3cRPESNbibHvgUbgjbpDJbDFayA+kJ3DvRJ5AIKY3GoHGDKV2iZjFYzVoLNxjGMwS+gkan8cI52ibqHpVWM25QmHihcFTaCxIh1WFCSh9yWqmeJ+TAfLzAp2AiSs+Spms2cENYUMhtP0iEVMcTcamcCDWNMM8L8DkUr2LTNhkwIRyVfQCJkOowIaV75qFPHvggvpijbaLuGSHMidZXkAipjuKFo9AnD3wQJqL0PfXw87SvIBFSHcULR7Uw3DbwPZxAltVotegoWjiqbYRLo30DiZDqaAwaJ4ilk1FxxFGz1mo14+wAFtmBAOBeNIQJOfpmKh6VuAU3KEy8MCgZ7QNIhB6AsldH9U1GGL0C+CZMzNU1m8iOohvaZgM3GEpG+wYSoQegbL2MocUE4xkC34SJOIYWKiZCHVTK9B0kQg+ACSl6B4Wu2QSVMsA3YSKuvomKiRDq1/oBEqEHoPSlUfjtCXwSX8zRUbKPUNukx4RwVPaN0xKhTqf76aefamtr79VAJpOVlJTU1dU5a4++gxfO0bdSsXBU32KCRAh8E0vApNFoxnYz2YF0pm00QCLsK+ckwpKSkri4uOeee27UqFEvvvhi1wYLFixISEhYsWJFSkrKnDlzjEYq/pKirN8mxaZY4aixzURn0FgCJtmBAEAObjiLapdqiInpuTAxfR85JxGuWbPm2Wef/eGHH37++ecPP/ywvLy8U4PFixc3NjZeunTp9u3bZWVlhYWFTtmv76DgVPUaqYErhBJt4Ls4YSyqHZW6ZgM3GCam7zMnJMKmpqYzZ84sWbIEIRQZGTl9+vQvvviiU5tp06ax2WyEkJ+f39ChQ5uamhzfr0+hYDehtknPCYXTQeC7eEIW1Wbo1TbBddH+cMIXmUQi8fPzCw0NJR4OHDiwh57CX3/99cyZM+vXr79XA5PJdO7cOdvWIiIihgwZ4niQng4TclvL2smO4g+0UgNXBGeEwHdxw9ltpRQ7KqFktF/sTYQbNmwoLS3ttHLkyJGrV6/WarXE2R6By+VqNJpuNyKXyx955JE1a9YkJyffa0cajWbr1q0czm8/akaMGPHaa6/dq7FOp2Oz2QwGw85X4cH8LeoGnVqtJjuO36nqNcHxPEqF5Gs0Gg2NBhfBSGMVmDQNOrVKTZ1pyNrr1YFD+T5yVNr5+edyuUxmL5nO3kSYkZERFxfXaWVkZCRCSCgUKpVKq9VKp9MRQq2trSKRqOsW2trapk+f/sADD7z00ks97CgwMPCLL74gttwrBoPhI4kQG4BXKRr5PD5VBozAkUFmDoz1FwgEZIfiu3Ach/efRDiOM3ntLDOHE0SVUQaNMmlwbAAm8ImTQid+/u1NhBMmTLjXnwYOHBgYGHjx4sVx48YhhH788cdVq1Z1aqPRaGbOnJmcnPzOO+/0O1ZfZiscpUgHgF5uZGIMBgfuQwU+jS/maBv1FEmEUDLab074ImOz2StWrHjqqae++eabF198saWlZe7cuQih8+fPx8TEEG3mzp1bW1ublpa2a9eunTt3nj171vH9+hpKFY5CVwQACCFMSKH5mKBktN+cU/W3du3akJCQ7du3R0ZGnjlzhsvlIoSEQuH8+fOJBhMnThwxYkRNTQ3x0FYLA+yHCYm5QP3JDgQhhLSNMPsSAAgTcdqquy+JcD8oGe03Go5Ta7ySqKioS5cu2dlH6EPFMgi1/NzWWtae9OdosgNBCKGKT+uCEgW8RIafnx/ZsfgulUoF7z+JVCoVUjCrDzYkr+5cP0GK2m+aEUIx08PJDsRNnPj5hz4ej0GtS6NSmAIbAISJONpmA26lxOmEtgmOyn6CROgxeOEcfauRCiOO4lZc12LkhcMhB3wdg01nC5gGOSWmoYBRRvsNEqHHoDOpMlW9XmZkBzAZbPjwAIAwMYcK48sQJaPw87R/4LvMk1Bkhl6N1MCHiekBQAghhIm4VDgqdTAxvQMgEXqS/xWOkkzbqMcgEQKAEEKIL6LEGSGUjDoCEqEnochvT61Uz4c+eQAQQghhYi4VBsSHW3sdAYnQk1BkDgoNHHIA/A8xb7bVTHIVG5SMOgISoSehwlT1VjNuUJh4YTDvBAAIIURn0rjBLF0LyZdqNFK4NNp/kAg9yW+Foy1kFo5qG/W8MDb0yQNgg4m5WlK7CX/7eQolo/0FidDDEIP8khgAdEUA0Anpg13omg3cEPh52n+QCD0MJuJqSD3kYJRRADrhi7nkFo7CSE8OgkToYTARh9yLMBopnBEC8Aekl3NrGg1QyO0ISIQeBhORXKutleoxOCMEoANeKNukNlsMVrICgFt7HQSJ0MPwwtiGNrPVRM4hZ9ZbzDoLNwhKRgHogIZ4YWR2E0LPvYMgEXoYGp3GC2Vrm8g55LRSAybiIOiSB+CPMPKq2CxGq1Fl5oawSNm7d4BE6HlI7JDQNuphlFEAuuKT12ehbTRg4RwaHX6f9h8kQs/DF5NWLwOVMgB0CxNzNQ2k/TyFklEHQSL0PJiIS9alUU2Dnh8BiRCAzvgRXE2DjpRdQweh4yAReh6MvNHu4XYlALrF9mciGs2oMrt/13Brr+OYZAfgHGvWrKmtrSU7CvdRVmkCrmFu7hWwmnBVrTagim9bM2vWrEcffdSdMQBAWXwxR9ugZycK3Lxf6LBwnJckwk8++eT1118PCAggOxAfUlxcfP78eUiEABAwMVfToA90byI06ywWg4UTCCWjDvGSRIgQys7OFgqFZEfhQxoaGiorK8mOAgCq4Iu5bdUaN+9U06Dni7lwR5ODoI8QAACcgJQRR39LhMAxkAgBAMAJMDFH12J083ShWqkeg0Juh0EiBAAAJ6Cz6JxAd08XqpHCGaETQCIEAADn4Iu5mgY3Xh3FiZsI4d4JR0EiBAAA5+CL3XqPr77VyOIzmTyG2/borSARAgCAc2BirjuHP9Q0wJxozgGJkFouXbo0adIk28NXXnnlyy+/7KF9YWHhpk2bXB4WAMAO/Ai3Fo5qpDDkoXNAIqQWo9Eok8mI5bq6un//+9/Z2dk9tM/NzX3vvfcUCoVbogMA9IQbzDbrLGadxT2700KljJNAInSJ0tLS06dPX758ed26daWlpQihkpKSt99+e8uWLfX19UQbpVL52WefrVu37v33329oaOi6kd27d8+ZM4fNZiOEvv76a4lEotfrd+/ejRCqqKj49ttvEUICgWDq1Kn79u1z32sDANwLDfHFXE29m04K1Q0wMb1zQCJ0iRMnTvz1r39dt25dYGCg2WzeuXNnfn4+h8NRKBRjxoypqalBCB0/frykpCQiIqKhoSE1NVUqlXbayNGjRzMzM4nlDRs2lJWVqdXq5cuXI4TOnz+/fft24k+ZmZnHjh1z44sDANyTIIqnrnfHNBQWo9XUbuaFsd2wL6/nPUOsdfLkD5ZqlZvubA1k04oyGYw/jnJEp9OPHj3KYDA0Gs2kSZOuXr06cOBAhBCDwdi8efOWLVsWLly4cOFConFbW9v+/ftXr17dcQs3btyIj4/vde+JiYnESScAgHT8CDcNtKaVGngwH6+TeG0iXPYnequ7Oq15TMTo8mlMS0tjMBgIocrKSp1Ot3TpUmJ9U1OTWCxGCN28efPpp5+WSCRms1mhUDz22GMdn240GvV6PZ/P77zdLvh8fnt7u1NeCADAQfxIbsPZVjfsCG6ldyKvTYQpIST/UOJyubYFDoezY8cOGo3W8U/Lly+fN2/eihUrEEKrV6+2WP7Qwc5mswMCAhQKRWRkJEKIw+EYDL9PxqvX6zmc38qmFQpFWFiY618QAKB3fDFX12q0mnE607VfQZp6HT8SEqFzQB+hyw0ePDg8PPzSpUuD/odIhI2NjUlJSQghlUr19ddfd33iyJEjbdc8R4wYcfz4cWLZarUeP358xIgRxMNr166lp6e745UAAHpDY9B4oWw33E2ortdDInQWSIQux2KxioqK1q1bN2nSpNmzZyclJX366acIoZUrV+bl5c2bN2/8+PF/+tOfuj5x7ty533zzDbH8f//3f6WlpRkZGRaLJSkpyWKxPPfcc8Sfjh8/PnfuXLe9HABAzwSRPLWrC0dxpJVCInQar700Sq4VK1Z0vNQ5atSo8vLyqqoqpVKZkJAQGhqKEHr66adnzpwpkUiGDx/OZrOtVitCaMyYMadPnyaelZ+fv3HjxtbW1pCQkPDw8PPnz1+9enXkyJGnT5+OiIgg2kgkkoqKitmzZ7v7FQIA7oEfydXU6xAKct0utM0Glh+TyYXB1ZwDEqFL2DoIbVgs1pAhQzqtjI2NjY2N7dSMSJMIIYFA8Oabb164cOHhhx8m1kRFRdFoNFsWRAhduHBh8+bNxL2GAAAq4EdyZVfbXLoLTb1OEMlz6S58CiRCSsvNze34kMfjPf/88x3XzJs3z70RAQB6IYjkaaR6hCPXTRyvrtcLouC6qNNAH6En4fP5b7zxBtlRAAB6wuDSWQKmrsXQe9P+0tTp+HBG6DyQCF3igw8+IO6LcIWtW7e+/fbbPTQoLi5+8sknXbR3AECvBJFcl9bLqBugUsaZIBG6xIQJE+bPn++KLavV6rfeeuuJJ57ooU1WVta5c+fKy8tdEQAAoFeCaJ66zlUDrenlRjqDxvaDji2ngUToEhaLxWw2I4RkMtlnn31WVVX18ssvv/HGG0qlsrW19c0331y3bt3du3eJxnV1dR988MHzzz//7rvvNjc32zZy48aN9evXb9iwQSKREGNtI4SKiooyMjKCgoIQQt9//z2R7QoLCzUaTUNDw8GDBxFCNBotLy9vx44dbn7VAACCIJqnrnVVItTU6wVRcF3UmSARusTJkyc/+eQThJBEIlm5cuVzzz0XGxt76dKlRx55ZNGiRf7+/gqFYvLkySaTCSF07NgxpVKZkpLS3NyclpZGjJdWVlY2adIkLpcbHBw8f/58YqxthFBxcfHkyZOJ5Z07d545cwYh9MwzzyiVyoqKitdee4340+TJk4uLi93/wgEACCFBDE9dr8OtLhnuWF2v50MidCqvPblWFG02y5vcsy8aix26ZB2id/+rQq1W7927NywsbObMmSKR6L///W9mZiaO41999VVZWVlKSsqyZcuIlnl5eZWVlcXFxQsWLNi0adPSpUtfeOEFhJBQKLSVj5aVldnT+xgfH19dXa3T6Xg8OGAAcDcml8H2Y+pajJjQ+TPIa+p0wtEuvEnRB3ltIhRMnG1VuWm6WhqXf68siBASiUTEWKBCoZBGow0bNgwhRKPRhEJha2srQujs2bPPPPOMXq8XCAR3794dP348QqiioiIrK4vYQmpqqm1rGo0Gw7BeQyJG61apVJAIASCFIBpT1+pckQjVdbq4RyJ6bwfs5rWJkCUegMQDyI4CIYSIOSi6PqTRaDiOI4Qef/zxjz76aOrUqQih3NxcYkiawMDAtrbf7slVKpW2p4eFhcnlcmKZy+Xq9b9XpnU8/5PJZEwmMzg42EUvCgDQM78YnkqiDR8V6NzNGpQmhCNOEMu5m/Vx0EdIPplMRkwxIZFIvvvuO2LlQw89tHPnTrVajeP4li1bbI3T09OvXbtGLKemphYXFxMdjQihr7/+OiUlhVi+fv16Wloak+m1P3QAoDgX1cuo7ur8Ynu/JgT6BBIh+dasWfPAAw/MmDFj1qxZo0ePJlY+8cQTycnJcXFxgwcPjo6Otp3q5ebm2qpgli9fHhQUNHjwYJ1Ol5GRcfv27VdeeYX407Fjx2DQGQBIJIjkahoNVrOT62XUtVpBDPR3OBtOMZGRkXV1dXY21mq1ZrMZx3GhUNjY2OjKuPrGYDBotVocx81ms1KptK2Xy+VWq5VYbmtrMxqNxHJtbe3Vq1eNRqNGo9HpdLb2RqPRarUePnw4NTWVWGO1WpOTk0tLS21tWltbMQy7du2abU1bW9ugQYPkcrnLXh+O4/jmzZtXrFjh0l2AnrW3t5Mdgk/r9f3/eWOVSqJ17k6vb7utqFQ5d5seyomff7h05hK2UbAZDEZAQIBtPXH/H8Hf39+2HB0dHR0djRBisX679G80GpcsWTJ+/Hi5XL5t27ZNmzYR62k02vbt22/cuEEU3SCEgoOD6XR6SEiIbWulpaVvvvlmx30BANyPuDrqxHv+cCuurnPmBgEBEiFFsVisOXPmlJeXYxhWXFxsm4YXITR27NixY8d2bLxq1So/Pz/bw4yMDPcFCgC4B78YnqpWJ3LeBrWNBk4gi8mD2ZecDBIhRdFotJycnJycHHsav/rqq66OBwDQV4IYrOFcqxM3qKrVQQehK0CxDAAAuARfzDEoTWaNpfem9lHd1ULJqCtAIgQAAJeg0Wl+MVj7Ha2zNqhOJ06bAAAVI0lEQVSu1fnBGaELwKVRVzEYDLt3766oqEhISFi2bJmtCgYA4Dv8B2HtNdrgoX69N+2NxWDVtxr5Yph9yfngjNAlcByfMWPG5cuXJ06cePz48by8PLIjAgCQwH8gv/22ximbUtXq+JFcGsNl0977MK89I3z1h411Kql79sVhcrY88C867fdfFT/88ENtbe13331Hp9OnTZsWFRVVWVmZkJDgnngAABThH8vTSPVWM05nOprA2qs1AXF8p0QFOvHaRPjX5EUqo9o9++IwOB2zIELoxo0bKSkpdDodIeTn55eQkHDr1i1IhAD4Gjqbjgk56lqt/yBHc1hbtSb6gTCnRAU68dpEGCFw4t07fabVatXq39OwWq3ueJ8fAMB3+A/kt9c4mgitZlxdp/MbACWjLgF9hK5y6tSpmpoahNCPP/5IzLhLdkQAABL4D8TabjtaOKq6q8VEHAYHvrFdwmvPCEk3bty43NxcHo938+bNnTt3dhxQDQDgO/wHYVVF9bgVp9H7303YBh2ErgSJ0FWio6O/+eab6urq2NhYLhcqngHwUSwBk+XP1EoN/Mj+fw+0V2sjJ4X03g70C5xouxCTyUxMTIQsCICPC0oUKCr6X7uHW3BVrdZvIHQQugokQpe4//77c3NzyY4CAEAJQUkCZYWq309X1ep44RwmF8badhW4NOoSo0aNcuTpVqvVYrE4ZTAag8HA4XAc3w4AoN/84/i3PpZYDNb+Vbu0VWsCHL77AvQAzghd5eLFi9XV1T23OXXqVENDQ9f1Bw8efOihhxyPwWKxcLnc9vb2fm9BoVAUFxc7HgkAvozBpvtFY23V/RxiRlGuCkwUODck0JFzEqHVar1w4cKxY8eUSmUPzQwGQ0lJSWurM+cloaxNmzadOHGi5zZr16796aef3BNP/9TU1KxcuZLsKADweIFJAsWt/nQTmjUWbaMhYDCcEbqQEy6NWiyW7OxsiUQyaNCgJUuWnDhx4r777uu25dq1a995552CgoLHHnvM8f1S2blz565fv97W1nbnzp309PScnByNRrN9+/abN28mJiauXLlSIBAUFxffuXNn375958+fnzp16pQpU7rdlEql2rZtW1VV1dChQ1esWMHj/Tb2/OHDh0+cOKHX6zMzMxcuXKhWq/ft2/fLL7+wWKwZM2bMmDGjh/BefPHF/Pz8PXv2GI3Gxx57zHYh98qVK0VFRTqdbubMmdOnT0cIbd++XaFQvPDCCwihtWvXYhh01wPQH0GJglv/rkVI3Ncnym+qAhL4jo/QBnrghDPCo0eP/vrrr5cvX/7Pf/6zdOnSdevWddvs8uXL586dS0lJcXyP1CcUCoOCgmJiYtLS0mJjY61W65QpU65du5aTk3Pjxo1JkyZZLJaoqCiBQBAXF5eWliYWd394mM3m8ePH//rrrzk5OZcvX542bRqO4wihtWvX/vOf/8zIyMjOzq6qqkIINTQ0NDc3z549e+LEiatXry4qKuohvLfffnvJkiXjxo0bNmxYVlbW9evXEUJnz57NyspKTEycMGHCsmXLCgoKEEJJSUlsNjstLS0tLY3JhB5lAPqJL+YS00f09YnyG+1OmbwC9MAJX22HDh2aM2cOcaaSl5d33333mc3mTl+aRqPxySefLCgoWLZsmeN7tEf5nrvaRoN79sXkMUY8N6jj3bIJCQnR0dGpqalE7eh3333X2Nj4448/MhiMrKys+Pj4b7/99qGHHgoNDc3IyJg5c+a9tnzkyBFiOicajTZt2rQBAwacOXMmOTn5rbfeKi8vj4uLQwgRT09ISFi/fr1Op2tqalq5cmVRUdGCBQt6iPmll17Kzs5GCNXW1r7//vu7d+/euHHj888/v3TpUoQQl8tds2bN4sWLMzMzP/jgA6iABcBRNBSU6Ke4pRZnBNv/JNyCKys1cTkRrosLIKckwrq6upEjRxLLMTExZrO5sbExKiqqY5vXX389Ozs7OTm5160ZDIbDhw8HB//2WYmKihozZsy9GlssFoul+9mf4+dFWoxWe1+DY2gMWs9jRlRVVY0YMYLBYCCEGAxGSkpKZWWlPeUwVVVVqampNBoNIcRms4cPH15RUcHn8wMDA4ksaCOVSufNm9fS0hIdHS2Xy4l99cD2v0hJSXn//fcRQpWVlc8++yyxcuTIkTU1NUZjL79eierWXl8FcJEePv/ADfr6/gcO4Ut/kIePCbD/KW1VGm4Ym47R4B/dlZ3vP51OJ75Ce2BXIrx27drq1au7ri8oKIiNjTUajbZCf2LBYPjDqdj169cPHTp05coVe/al1+uPHDli6wlLTU3t4WqqwWDAcZzBYBAXDDti+TGpMxNuQEBAxzIihUIRGBhozxMDAwM7PTEoKCg4OLi9vb3Tafdbb72Vnp7+7rvvIoT279//3nvv9bxlWympUqkkgum4L6VSyefz2Wx2zx8gq9Xa6X8N3MloNML7T6K+vv/YIJb2gF7VrGEH2HsGIitt80/kwX+5W3a+/2w2u9duHbv+HwMGDFi7dm3X9WFhYQghkUgkk8mINS0tLQihTj1e//rXvyIjI9evX48QkkgkBw4c8PPzy8nJ6XZfAQEBu3btioyMtCcwGo3GZrMZDEavCd/9QkNDJRIJsTxp0qTly5f//PPPqampV69evXz5cmFhYac23crMzPzb3/5WXl4+ZMiQixcv3rx58/777xcKhUlJSe++++4//vEPhJBMJgsNDdVoNKGhoQghnU63Y8eOXsPbsWPH1q1bDQZDYWEhMW/w9OnTd+7cOWvWLCaTuW3bNqJYJiQkpLW1VavVdlsmw2QyoXyGRBaLBd5/EvXj/Q+5L0Bzyxg42b6Rh3HUXlH3pyUxGAajU3XDiZ9/u4plAgICJnaHCCIjI+PkyZNEy1OnTqWkpHQKbvHixTk5OYMGDRo0aBCHwwkLCyO+sr3b0qVLjxw5IhKJVq1aFRUVtWvXrocffjg5OTkrK+ujjz6KjY1FCD377LNbt24VCoVvv/12x+fS6XTiJ8zgwYO3bduWmZmZnJyck5NTWFgoFovpdPr+/fsPHjw4ePDg5OTkuXPnEpv6+OOPR44cmZKSMmLECGI7NBqNyWR2+yuBwWAMHz48Li4uJibmiSeeQAg9//zzxBXXhISE8vLyTZs2IYRiYmLy8/MTExODg4MVCoWL3zMAvFxYamDLL212Nm6r1jA4dL4YsqDr4Q6Ty+VisXj16tW7d+8WiURFRUXE+nHjxm3cuLFT4/T09L179/awtcjIyLq6Ojt3rdVqzWYzjuNCobCxsbHvsbuVxWJpaGiwWCz9e6LVau20Xi6Xd3zVJpPp7t27xOXintHp9JaWFqVSKZfLO/1JpVJ1XdmtzZs3r1ixwp6WwEXa29vJDsGn9ef9t+KX1t/SNOrtaXvrY0n9WVmfd+EznPj5d8LtE0FBQRcvXmSz2T/99FNBQcH8+fOJ9cuXL58wYUKnxitXrvTZmfnodDpxPte/J3Y9sQsKChIKhbaHTCYzJiaGzWbbudmAgICgoKBOKwUCQdeVAADnoKGwZH+ZHSeFZo1FcVMVPtKuYgLgIOfcGRYTE7Nhw4ZOK/Pz87u2/POf/+yUPQJHbNiwgc+HgSoAIEFYWuCtvZLoaWE9l5o3lyiDh/oxeTDQtjvAWKO+6O9//7utLhcA4E6CKB4nmNXycy8nhY0X5aIxcG3GTSARAgCAW8U8GC450YxbO9/0ZdP2qwa3Iv+BcNnGTSARAgCAWwXE8dkB9zwpxK347f9IY6eHI8rdFOa1IBECAIC7xWYJa7/r/qRQ+oOcxWeGJvdhABrgIEiEAADgbv4DMV4o++6xpk7rjSqz5PuWuJw+T1IBHOEl8wlwOJzRo0f3OsCmz8ItuNWCM1h028UW3IpbTTiDTe/35Ze2trZFixY5K0IAfE1ifvT1rbdZ/szIib8NMGLWWCo/kQhHB/HCOeTG5mu8JBGWlJQ4Mg+7L2i6opT+0BozLYztz9JIDdIfW+PnR/Ij+j9oBY1GCwiAqzcA9BMTYwxdNuD61ttmnTUgDkM4qvq8PnREQOz0cLJD8zlekghDQ0N9Ydg2RwwahNQZuqqiepxJC4sMGvq3JP8Bjg7Tp1KpnBIbAL6JE8gatmyA9Ee55LsWQ5sp7pGI4CEw9SAJvCQRAnsIongpawaTHQUA4He8cM6gOdAjSDIolgEAAODTIBECAADwaZAIAQAA+DTPToSHDx8uLy8nOwrfVVhY2NzcTHYUvmvTpk0mk4nsKHyU2Wx+7733yI7Cd8lksj179jhra56dCI8dO3blyhWyo/Bd+/fvr6qqIjsK37V161alUkl2FD5KpVJt3ryZ7Ch8V3V19aeffuqsrXl2IgQAAAAcBIkQAACAT4NECAAAwKfRcPyec2KRQiAQhIaG2jlqaEtLC4/HEwgEro4KdEsqlQYHB3M4MC4iOWpra6Oiouh0+DlLAqvVKpFIYmNjyQ7ERxmNRplMFhER0WvLvLy81157rec2lEuEDQ0Ner3ezsYmk4nBYMAXAVkMBgNkQRLB+08ueP/JZef7LxaLeTxez20olwgBAAAAd4JzKQAAAD4NEiEAAACfBokQAACAT4NECAAAwKd5zHyELS0te/bsaWlpmTFjRmZmZtcGFotl3759paWlSUlJf/nLX1gslvuD9FYtLS1Hjhy5efNmYGDgvHnz4uPjOzWwWq27d++2PRw2bNi4cePcG6M3O336dGVlJbHMZDIXL17ctU1DQ0NBQYFSqZw9e/b48ePdG6CX27VrV8eiwq4f78rKytOnT9sezp49OzwcZpl3SHNzc0lJiUQimTRpUkJCgm19XV1dYWFhe3v7I488MmbMmK5PNBqNe/bsqaqqSk5Ozs/Pt/OeAs84I9RqtWPHjq2oqIiNjc3Ly/v888+7tlm5cuX27dvj4+M/+eSTxx9/3O0xerOnnnrq22+/FYvFzc3NycnJ58+f79TAbDYvW7bs1q1bt2/fvn37dmtrKylxequ9e/d+/vnnxHtbU1PTtYFSqUxPT6+vr4+Kipo1a9axY8fcH6QXq6mpuf0/q1atKi0t7dTgwoULGzdutLUxGAykxOlNpkyZ8uqrr7744osXLlywrZTJZKNGjWppaRGLxVlZWSdOnOj6xIULF37++efx8fFbtmxZvXq1vfvDPUFBQcGoUaOsViuO45999tnw4cM7NZBKpRwORyKR4Dgul8u5XG51dTUJgXopnU5nW162bNnixYs7NSCOfJVK5d64fMVjjz323nvv9dBg8+bNmZmZxPKOHTsyMjLcEpfP+emnn3g8nkKh6LR+79692dnZpITkrSwWC47jo0eP3rt3r23lW2+9lZWVRSxv2bLF9pm3uXnzJoZhbW1tOI7X1NTweDyZTGbP7jzjjPDs2bNTp06l0WgIoalTp16/fl2hUHRscOHChcGDB0dFRSGEgoKCUlNTz507R06s3ojL5dqW9Xr9vYby+eijj95///2ff/7ZXXH5kIsXL27cuPHAgQPdzrt09uzZadOmEctTp069cOECTM/kCnv27MnNzQ0MDOz6p7q6uo0bNxYUFLS0tLg/MO/T7SXNTp/zc+fOWa3WTg3S09P9/f0RQgMGDIiOjr506ZJdu3M4YHeQSqVhYWHEckhICJPJlEql92qAEBIKhQ0NDW4N0TdcuHDh0KFDTz/9dNc/TZkypbW19ebNm5mZmRs3bnR/bF4sJiYmLCxMLpdv2LAhPT1dq9V2atDx8x8eHm61WhsbG90eppfT6XRFRUXddtAGBAQMGzasra3t0KFDSUlJXa+dAqfo9Dk3mUwymaxjg8bGxo6JIDw83M5E4BnFMkwm02w2E8sWi8VisbDZ7E4NLBaL7aHJZOrUADiuoqIiNzd3165dgwcP7vQnNpv9/fffE8sLFy584IEHVqxYwefz3R6jd3r11VdtC6mpqQUFBU899VTHBh0PEGIBPv9O9+WXXwYFBU2YMKHrn2bPnj179mxiefny5a+88srBgwfdG51P6PVz3u9E4BlnhJGRkbbETiyIxeJODerr620P6+vr7RmMFdivsrJyypQpb7755rx583puOXbsWLPZXFdX557AfAqLxUpPT+9aL9PxAKmvr2exWKGhoW6PzssVFBQsWbKE6KDpwbhx427fvu2ekHxNp885hmGdLlP3OxF4RiLMzs4+cuQIMRj3wYMHMzMzibONq1ev3r17FyE0ceJEmUxWUlKCEKqqqrp165btUjJw3N27dx988MG1a9fm5+d3XH/lyhXiY6fT6Wwrjx49imHYgAED3BykF7O9vSqV6vTp00OHDkUIGY3GkydPEmVK2dnZhw4dIvoFDxw4MGPGDDvnbwF2qqmpOXfu3KJFi2xrtFrtyZMnifMS2z8Ix/Fjx44NGzaMnCi9XXZ29ldffUWc8x04cCA7O5tYf+XKFSJBPvjgg9euXSN+KV68eFGr1WZkZNi1aadU+Lia2WyeNm1aWlraokWLQkJCzp8/T6zPzMx87bXXiOXNmzeLxeLFixdHR0fbVgKnmD59Op/PT/ufJ598klifkpKybds2HMd37do1dOjQRx99dPr06f7+/h9//DGp8Xqb4ODg7OzsvLw8sVj88MMPm0wmHMeJI//OnTs4juv1+vHjx48dOzYvLy80NPSXX34hO2Rv89JLL82YMaPjmlu3biGEWltbcRyfPn36lClT8vPz77vvvvj4+Lt375IUpvdYtWpVWloan88fMGBAWloa8Z2v1WpHjx49fvz4BQsWhIeHl5WVEY2HDx++Y8cOYvnll1+OjY1dvHixSCT68MMP7dydx8w+YbFYTp8+LZPJJk6cKBKJiJUVFRV+fn62k9+ysjLihvqUlBTyIvVClZWVKpXK9tDPz4+4xfXGjRthYWFEr3VJSUlNTU1AQMDIkSPhbmLnunPnztWrV41GY0JCQnJyMrHSZDL98ssvycnJRC+IyWQ6deqUUqmcPHlyx3oB4BSVlZX+/v62bx6EkF6vv379elpaGoPBkMvlly9fVigUkZGRY8eOhdE8HFddXa1UKm0P4+PjiVpQ4kJIe3v7lClTQkJCiL+WlZUJhULbx76kpKSysnLEiBFDhgyxc3cekwgBAAAAV/CMPkIAAADARSARAgAA8GmQCAEAAPg0SIQAAAB8GiRCAAAAPg0SIQAAAJ8GiRAAAIBPg0QIAADAp0EiBAAA4NMgEQIAAPBpkAgBAAD4tP8HUGZ0NgrJy1wAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 12 + } + ], + "cell_type": "code", + "source": [ + "ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\n", + "ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\n", + "\n", + "using Plots\n", + "x = a * vec(first.(DFTK.r_vectors(basis)))\n", + "p = plot(x, real.(ψ), label=\"real(ψ)\")\n", + "plot!(p, x, imag.(ψ), label=\"imag(ψ)\")\n", + "plot!(p, x, ρ, label=\"ρ\")\n", + "plot!(p, x, tot_local_pot, label=\"tot local pot\")" + ], + "metadata": {}, + "execution_count": 12 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/custom_potential/9587e68c.svg b/v0.6.17/examples/custom_potential/9587e68c.svg new file mode 100644 index 0000000000..e1f407b961 --- /dev/null +++ b/v0.6.17/examples/custom_potential/9587e68c.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/custom_potential/index.html b/v0.6.17/examples/custom_potential/index.html new file mode 100644 index 0000000000..bf811b8f36 --- /dev/null +++ b/v0.6.17/examples/custom_potential/index.html @@ -0,0 +1,63 @@ + +Custom potential · DFTK.jl

    Custom potential

    We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.

    using DFTK
    +using LinearAlgebra

    First, we define a new element which represents a nucleus generating a Gaussian potential.

    struct CustomPotential <: DFTK.Element
    +    α  # Prefactor
    +    L  # Width of the Gaussian nucleus
    +end

    Some default values

    CustomPotential() = CustomPotential(1.0, 0.5);

    We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.

    function DFTK.local_potential_real(el::CustomPotential, r::Real)
    +    -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)
    +end
    +function DFTK.local_potential_fourier(el::CustomPotential, p::Real)
    +    # = ∫ V(r) exp(-ix⋅p) dx
    +    -el.α * exp(- (p * el.L)^2 / 2)
    +end
    Gaussian potentials and DFTK

    DFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.

    We set up the lattice. For a 1D case we supply two zero lattice vectors

    a = 10
    +lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];

    In this example, we want to generate two Gaussian potentials generated by two "nuclei" localized at positions $x_1$ and $x_2$, that are expressed in $[0,1)$ in fractional coordinates. $|x_1 - x_2|$ should be different from $0.5$ to break symmetry and get nonzero forces.

    x1 = 0.2
    +x2 = 0.8
    +positions = [[x1, 0, 0], [x2, 0, 0]]
    +gauss     = CustomPotential()
    +atoms     = [gauss, gauss];

    We setup a Gross-Pitaevskii model

    C = 1.0
    +α = 2;
    +n_electrons = 1  # Increase this for fun
    +terms = [Kinetic(),
    +         AtomicLocal(),
    +         LocalNonlinearity(ρ -> C * ρ^α)]
    +model = Model(lattice, atoms, positions; n_electrons, terms,
    +              spin_polarization=:spinless);  # use "spinless electrons"

    We discretize using a moderate Ecut and run a SCF algorithm to compute forces afterwards. As there is no ionic charge associated to gauss we have to specify a starting density and we choose to start from a zero density.

    basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))
    +ρ = zeros(eltype(basis), basis.fft_size..., 1)
    +scfres = self_consistent_field(basis; tol=1e-5, ρ)
    +scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             0.0380288 
    +    AtomicLocal         -0.3163455
    +    LocalNonlinearity   0.1212603 
    +
    +    total               -0.157056406901

    Computing the forces can then be done as usual:

    compute_forces(scfres)
    2-element Vector{StaticArraysCore.SVector{3, Float64}}:
    + [-0.05566906591350171, -0.0, -0.0]
    + [0.05567887726821205, -0.0, -0.0]

    Extract the converged total local potential

    tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1

    Extract other quantities before plotting them

    ρ = scfres.ρ[:, 1, 1, 1]        # converged density, first spin component
    +ψ_fourier = scfres.ψ[1][:, 1]   # first k-point, all G components, first eigenvector
    101-element Vector{ComplexF64}:
    +      0.2860565525607772 + 0.9296670055248262im
    +    0.029397485665668435 + 0.09554219030423607im
    +    -0.03483395959741724 - 0.11320465047370018im
    +   -0.015131344200807171 - 0.049176406646321905im
    +    0.002641628303384301 + 0.008582118182445923im
    +       0.004018341826156 + 0.01305905963810589im
    +   0.0005795577722291493 + 0.0018839955815742786im
    +  -0.0006450037473007222 - 0.0020960908262269637im
    + -0.00027776285462668114 - 0.0009028089617412838im
    +    4.229889610233169e-5 + 0.000137419570212876im
    +                         ⋮
    +    4.227148009703606e-5 + 0.00013742669782889713im
    +  -0.0002778161884740249 - 0.0009027929126799747im
    +   -0.000644928986148059 - 0.0020961124662859146im
    +   0.0005798208354061129 + 0.001883918231170302im
    +    0.004018165935452298 + 0.013059111938006936im
    +    0.002639926675676923 + 0.008582640371017239im
    +   -0.015131567138699573 - 0.049176326293052616im
    +    -0.03483188569872623 - 0.11320525483432914im
    +    0.029398658281991005 + 0.09554182520523936im

    Transform the wave function to real space and fix the phase:

    ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]
    +ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));
    +
    +using Plots
    +x = a * vec(first.(DFTK.r_vectors(basis)))
    +p = plot(x, real.(ψ), label="real(ψ)")
    +plot!(p, x, imag.(ψ), label="imag(ψ)")
    +plot!(p, x, ρ, label="ρ")
    +plot!(p, x, tot_local_pot, label="tot local pot")
    Example block output
    diff --git a/v0.6.17/examples/custom_solvers.ipynb b/v0.6.17/examples/custom_solvers.ipynb new file mode 100644 index 0000000000..d9533b5b5d --- /dev/null +++ b/v0.6.17/examples/custom_solvers.ipynb @@ -0,0 +1,190 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Custom solvers\n", + "In this example, we show how to define custom solvers. Our system\n", + "will again be silicon, because we are not very imaginative" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK, LinearAlgebra\n", + "\n", + "a = 10.26\n", + "lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# We take very (very) crude parameters\n", + "model = model_LDA(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "We define our custom fix-point solver: simply a damped fixed-point" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function my_fp_solver(f, x0, max_iter; tol)\n", + " mixing_factor = .7\n", + " x = x0\n", + " fx = f(x)\n", + " for n = 1:max_iter\n", + " inc = fx - x\n", + " if norm(inc) < tol\n", + " break\n", + " end\n", + " x = x + mixing_factor * inc\n", + " fx = f(x)\n", + " end\n", + " (; fixpoint=x, converged=norm(fx-x) < tol)\n", + "end;" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Our eigenvalue solver just forms the dense matrix and diagonalizes\n", + "it explicitly (this only works for very small systems)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function my_eig_solver(A, X0; maxiter, tol, kwargs...)\n", + " n = size(X0, 2)\n", + " A = Array(A)\n", + " E = eigen(A)\n", + " λ = E.values[1:n]\n", + " X = E.vectors[:, 1:n]\n", + " (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)\n", + "end;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Finally we also define our custom mixing scheme. It will be a mixture\n", + "of simple mixing (for the first 2 steps) and than default to Kerker mixing.\n", + "In the mixing interface `δF` is $(ρ_\\text{out} - ρ_\\text{in})$, i.e.\n", + "the difference in density between two subsequent SCF steps and the `mix`\n", + "function returns $δρ$, which is added to $ρ_\\text{in}$ to yield $ρ_\\text{next}$,\n", + "the density for the next SCF step." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "struct MyMixing\n", + " n_simple # Number of iterations for simple mixing\n", + "end\n", + "MyMixing() = MyMixing(2)\n", + "\n", + "function DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)\n", + " if n_iter <= mixing.n_simple\n", + " return δF # Simple mixing -> Do not modify update at all\n", + " else\n", + " # Use the default KerkerMixing from DFTK\n", + " DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)\n", + " end\n", + "end" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "That's it! Now we just run the SCF with these solvers" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.090073978406 -0.39 0.0 2.26s\n", + " 2 -7.226157343674 -0.87 -0.65 0.0 937ms\n", + " 3 -7.249782177445 -1.63 -1.17 0.0 43.0ms\n", + " 4 -7.250986294028 -2.92 -1.48 0.0 50.6ms\n", + " 5 -7.251258312426 -3.57 -1.78 0.0 53.2ms\n", + " 6 -7.251319808416 -4.21 -2.07 0.0 54.3ms\n", + " 7 -7.251334099764 -4.84 -2.35 0.0 122ms\n", + " 8 -7.251337569219 -5.46 -2.62 0.0 39.2ms\n", + " 9 -7.251338457710 -6.05 -2.88 0.0 38.5ms\n", + " 10 -7.251338698748 -6.62 -3.14 0.0 50.0ms\n", + " 11 -7.251338767946 -7.16 -3.39 0.0 53.1ms\n", + " 12 -7.251338788853 -7.68 -3.64 0.0 53.0ms\n", + " 13 -7.251338795449 -8.18 -3.88 0.0 102ms\n", + " 14 -7.251338797603 -8.67 -4.12 0.0 38.2ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres = self_consistent_field(basis;\n", + " tol=1e-4,\n", + " solver=my_fp_solver,\n", + " eigensolver=my_eig_solver,\n", + " mixing=MyMixing());" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Note that the default convergence criterion is the difference in\n", + "density. When this gets below `tol`, the\n", + "\"driver\" `self_consistent_field` artificially makes the fixed-point\n", + "solver think it's converged by forcing `f(x) = x`. You can customize\n", + "this with the `is_converged` keyword argument to\n", + "`self_consistent_field`." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/custom_solvers/index.html b/v0.6.17/examples/custom_solvers/index.html new file mode 100644 index 0000000000..5de1b6c139 --- /dev/null +++ b/v0.6.17/examples/custom_solvers/index.html @@ -0,0 +1,65 @@ + +Custom solvers · DFTK.jl

    Custom solvers

    In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative

    using DFTK, LinearAlgebra
    +
    +a = 10.26
    +lattice = a / 2 * [[0 1 1.];
    +                   [1 0 1.];
    +                   [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms = [Si, Si]
    +positions =  [ones(3)/8, -ones(3)/8]
    +
    +# We take very (very) crude parameters
    +model = model_LDA(lattice, atoms, positions)
    +basis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);

    We define our custom fix-point solver: simply a damped fixed-point

    function my_fp_solver(f, x0, max_iter; tol)
    +    mixing_factor = .7
    +    x = x0
    +    fx = f(x)
    +    for n = 1:max_iter
    +        inc = fx - x
    +        if norm(inc) < tol
    +            break
    +        end
    +        x = x + mixing_factor * inc
    +        fx = f(x)
    +    end
    +    (; fixpoint=x, converged=norm(fx-x) < tol)
    +end;

    Our eigenvalue solver just forms the dense matrix and diagonalizes it explicitly (this only works for very small systems)

    function my_eig_solver(A, X0; maxiter, tol, kwargs...)
    +    n = size(X0, 2)
    +    A = Array(A)
    +    E = eigen(A)
    +    λ = E.values[1:n]
    +    X = E.vectors[:, 1:n]
    +    (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)
    +end;

    Finally we also define our custom mixing scheme. It will be a mixture of simple mixing (for the first 2 steps) and than default to Kerker mixing. In the mixing interface δF is $(ρ_\text{out} - ρ_\text{in})$, i.e. the difference in density between two subsequent SCF steps and the mix function returns $δρ$, which is added to $ρ_\text{in}$ to yield $ρ_\text{next}$, the density for the next SCF step.

    struct MyMixing
    +    n_simple  # Number of iterations for simple mixing
    +end
    +MyMixing() = MyMixing(2)
    +
    +function DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)
    +    if n_iter <= mixing.n_simple
    +        return δF  # Simple mixing -> Do not modify update at all
    +    else
    +        # Use the default KerkerMixing from DFTK
    +        DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)
    +    end
    +end

    That's it! Now we just run the SCF with these solvers

    scfres = self_consistent_field(basis;
    +                               tol=1e-4,
    +                               solver=my_fp_solver,
    +                               eigensolver=my_eig_solver,
    +                               mixing=MyMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.090073978406                   -0.39    0.0    200ms
    +  2   -7.226157343674       -0.87       -0.65    0.0    661ms
    +  3   -7.249782177445       -1.63       -1.17    0.0   38.9ms
    +  4   -7.250986294028       -2.92       -1.48    0.0   45.1ms
    +  5   -7.251258312426       -3.57       -1.78    0.0   49.2ms
    +  6   -7.251319808416       -4.21       -2.07    0.0   49.0ms
    +  7   -7.251334099764       -4.84       -2.35    0.0   52.7ms
    +  8   -7.251337569219       -5.46       -2.62    0.0    116ms
    +  9   -7.251338457710       -6.05       -2.88    0.0   38.6ms
    + 10   -7.251338698748       -6.62       -3.14    0.0   44.1ms
    + 11   -7.251338767946       -7.16       -3.39    0.0   49.7ms
    + 12   -7.251338788853       -7.68       -3.64    0.0   49.9ms
    + 13   -7.251338795449       -8.18       -3.88    0.0   52.9ms
    + 14   -7.251338797603       -8.67       -4.12    0.0   82.5ms

    Note that the default convergence criterion is the difference in density. When this gets below tol, the "driver" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.

    diff --git a/v0.6.17/examples/dielectric.ipynb b/v0.6.17/examples/dielectric.ipynb new file mode 100644 index 0000000000..46a90279f7 --- /dev/null +++ b/v0.6.17/examples/dielectric.ipynb @@ -0,0 +1,189 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Eigenvalues of the dielectric matrix\n", + "\n", + "We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.235847917872 -0.50 7.0 11.8ms\n", + " 2 -7.250327938398 -1.84 -1.40 1.0 7.67ms\n", + " 3 -7.250999559449 -3.17 -1.90 2.0 8.51ms\n", + " 4 -7.250948696699 + -4.29 -1.87 2.0 9.06ms\n", + " 5 -7.251331068999 -3.42 -2.67 1.0 7.37ms\n", + " 6 -7.251338293023 -5.14 -3.29 1.0 6.55ms\n", + " 7 -7.251338734100 -6.36 -3.65 2.0 6.33ms\n", + " 8 -7.251338781367 -7.33 -3.93 1.0 5.41ms\n", + " 9 -7.251338795389 -7.85 -4.29 2.0 6.17ms\n", + " 10 -7.251338798198 -8.55 -4.79 2.0 6.30ms\n", + " 11 -7.251338798679 -9.32 -5.24 2.0 6.57ms\n", + " 12 -7.251338798697 -10.73 -5.64 1.0 5.71ms\n", + " 13 -7.251338798704 -11.20 -6.14 2.0 6.66ms\n", + " 14 -7.251338798704 -12.08 -6.55 2.0 6.81ms\n", + " 15 -7.251338798705 -13.27 -7.01 1.0 5.70ms\n", + " 16 -7.251338798705 -13.91 -7.44 2.0 6.66ms\n", + " 17 -7.251338798705 -14.75 -8.12 1.0 5.69ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using KrylovKit\n", + "using Printf\n", + "\n", + "# Calculation parameters\n", + "kgrid = [1, 1, 1]\n", + "Ecut = 5\n", + "\n", + "# Silicon lattice\n", + "a = 10.26\n", + "lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# Compute the dielectric operator without symmetries\n", + "model = model_LDA(lattice, atoms, positions, symmetries=false)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "scfres = self_consistent_field(basis, tol=1e-8);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Applying $ε^† ≔ (1- χ_0 K)$ …" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function eps_fun(δρ)\n", + " δV = apply_kernel(basis, δρ; ρ=scfres.ρ)\n", + " χ0δV = apply_χ0(scfres, δV)\n", + " δρ - χ0δV\n", + "end;" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "… eagerly diagonalizes the subspace matrix at each iteration" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Arnoldi iteration step 1: normres = 0.03822593620238611\n", + "[ Info: Arnoldi iteration step 2: normres = 0.5640318937978195\n", + "[ Info: Arnoldi iteration step 3: normres = 0.9218079878776702\n", + "[ Info: Arnoldi iteration step 4: normres = 0.38624350882467695\n", + "[ Info: Arnoldi iteration step 5: normres = 0.24085755746152887\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (3.07e-02, 3.88e-02, 1.78e-01, 1.40e-01, 6.57e-02)\n", + "[ Info: Arnoldi iteration step 6: normres = 0.4929826070254614\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (1.17e-02, 5.28e-02, 4.71e-01, 1.15e-01, 2.80e-02)\n", + "[ Info: Arnoldi iteration step 7: normres = 0.08483570533764531\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (5.35e-04, 8.48e-03, 3.60e-02, 2.77e-02, 6.75e-02)\n", + "[ Info: Arnoldi iteration step 8: normres = 0.10277346050423909\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (2.39e-05, 6.30e-04, 2.94e-03, 9.61e-03, 6.04e-02)\n", + "[ Info: Arnoldi iteration step 9: normres = 0.07234883178392133\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (7.44e-07, 3.23e-05, 1.67e-04, 2.37e-03, 3.38e-02)\n", + "[ Info: Arnoldi iteration step 10: normres = 0.11567242526638426\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (3.80e-08, 2.75e-06, 1.59e-05, 1.06e-03, 4.01e-02)\n", + "[ Info: Arnoldi iteration step 11: normres = 0.06105304844728932\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (1.00e-09, 1.20e-07, 7.70e-07, 2.38e-04, 2.44e-02)\n", + "[ Info: Arnoldi iteration step 12: normres = 0.0888474041710801\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (3.77e-11, 7.32e-09, 5.20e-08, 5.89e-05, 1.08e-02)\n", + "[ Info: Arnoldi iteration step 13: normres = 0.176047773811772\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 0 values converged, normres = (2.92e-12, 9.44e-10, 7.48e-09, 3.95e-05, 1.80e-02)\n", + "[ Info: Arnoldi iteration step 14: normres = 0.34645437202960205\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 0 values converged, normres = (1.02e-12, 4.01e-09, 3.18e-01, 1.25e-01, 2.01e-03)\n", + "[ Info: Arnoldi iteration step 15: normres = 0.04515869997143047\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (2.06e-14, 1.83e-08, 1.04e-02, 6.31e-06, 1.84e-06)\n", + "[ Info: Arnoldi iteration step 16: normres = 0.5783144314043371\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (8.76e-15, 1.76e-08, 1.35e-02, 8.29e-06, 5.75e-01)\n", + "[ Info: Arnoldi iteration step 17: normres = 0.03957062544123441\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (1.86e-16, 8.84e-04, 7.09e-04, 2.40e-07, 1.88e-02)\n", + "[ Info: Arnoldi iteration step 18: normres = 0.018890975731742046\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (1.46e-18, 1.12e-07, 1.43e-05, 1.83e-08, 2.62e-04)\n", + "[ Info: Arnoldi iteration step 19: normres = 0.0712235381615384\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (4.29e-20, 1.40e-07, 6.57e-07, 2.67e-06, 1.33e-05)\n", + "[ Info: Arnoldi iteration step 20: normres = 0.14668873867916896\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (3.04e-21, 3.05e-08, 7.92e-08, 5.01e-07, 1.88e-06)\n", + "[ Info: Arnoldi iteration step 21: normres = 0.030837061488713163\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (4.01e-23, 5.63e-10, 1.75e-09, 6.94e-09, 4.63e-08)\n", + "[ Info: Arnoldi iteration step 22: normres = 0.03014615843216232\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (4.98e-25, 1.12e-11, 3.46e-11, 2.79e-10, 9.82e-10)\n", + "[ Info: Arnoldi iteration step 23: normres = 0.6783378165334957\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 1 values converged, normres = (2.28e-25, 1.32e-11, 4.07e-11, 4.21e-10, 1.52e-09)\n", + "[ Info: Arnoldi iteration step 24: normres = 0.016301327392616593\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 2 values converged, normres = (2.15e-27, 5.78e-13, 1.78e-12, 1.38e-08, 4.65e-08)\n", + "[ Info: Arnoldi iteration step 25: normres = 0.0370197191203105\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 3 values converged, normres = (3.27e-29, 1.40e-14, 4.32e-14, 1.13e-04, 5.96e-05)\n", + "[ Info: Arnoldi iteration step 26: normres = 0.09559823231369448\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (1.40e-30, 1.01e-15, 3.10e-15, 1.03e-08, 2.58e-08)\n", + "[ Info: Arnoldi iteration step 27: normres = 0.017688753001318596\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (1.03e-32, 1.20e-17, 3.69e-17, 1.10e-07, 1.64e-07)\n", + "[ Info: Arnoldi iteration step 28: normres = 0.09576608762419475\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (4.14e-34, 7.74e-19, 2.39e-18, 1.47e-08, 7.14e-09)\n", + "[ Info: Arnoldi iteration step 29: normres = 0.09596189083972209\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (1.76e-35, 5.50e-20, 1.70e-19, 1.10e-09, 9.40e-10)\n", + "[ Info: Arnoldi iteration step 30: normres = 0.09866574513123841\n", + "[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (8.45e-37, 4.74e-21, 1.46e-20, 1.08e-10, 9.15e-11)\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (8.46e-37, 4.74e-21, 1.46e-20, 1.08e-10, 9.15e-11)\n", + "[ Info: Arnoldi iteration step 20: normres = 0.05988661582047134\n", + "[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 3 values converged, normres = (2.13e-38, 1.93e-22, 5.96e-22, 4.89e-12, 4.11e-12)\n", + "[ Info: Arnoldi iteration step 21: normres = 0.05158517814971411\n", + "┌ Info: Arnoldi eigsolve finished after 2 iterations:\n", + "│ * 6 eigenvalues converged\n", + "│ * norm of residuals = (4.726383937079186e-40, 7.042314106118627e-24, 2.182729902105407e-23, 1.979881053477996e-13, 8.943425192088202e-14, 8.646903942624529e-14)\n", + "└ * number of operations = 32\n" + ] + } + ], + "cell_type": "code", + "source": [ + "eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);" + ], + "metadata": {}, + "execution_count": 3 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/dielectric/index.html b/v0.6.17/examples/dielectric/index.html new file mode 100644 index 0000000000..3cb2ac8b96 --- /dev/null +++ b/v0.6.17/examples/dielectric/index.html @@ -0,0 +1,112 @@ + +Eigenvalues of the dielectric matrix · DFTK.jl

    Eigenvalues of the dielectric matrix

    We compute a few eigenvalues of the dielectric matrix ($q=0$, $ω=0$) iteratively.

    using DFTK
    +using Plots
    +using KrylovKit
    +using Printf
    +
    +# Calculation parameters
    +kgrid = [1, 1, 1]
    +Ecut = 5
    +
    +# Silicon lattice
    +a = 10.26
    +lattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +# Compute the dielectric operator without symmetries
    +model  = model_LDA(lattice, atoms, positions, symmetries=false)
    +basis  = PlaneWaveBasis(model; Ecut, kgrid)
    +scfres = self_consistent_field(basis, tol=1e-8);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.233893390952                   -0.50    7.0   10.3ms
    +  2   -7.250224307783       -1.79       -1.41    1.0   5.59ms
    +  3   -7.251284244585       -2.97       -2.15    2.0   6.39ms
    +  4   -7.251288161400       -5.41       -2.30    2.0   6.51ms
    +  5   -7.251322610378       -4.46       -2.56    1.0   5.40ms
    +  6   -7.251338432151       -4.80       -3.32    1.0   5.49ms
    +  7   -7.251338768615       -6.47       -3.90    1.0   5.67ms
    +  8   -7.251338789877       -7.67       -4.07    2.0   6.78ms
    +  9   -7.251338797901       -8.10       -4.59    1.0   5.84ms
    + 10   -7.251338798647       -9.13       -5.22    2.0   6.85ms
    + 11   -7.251338798698      -10.30       -5.58    2.0   6.74ms
    + 12   -7.251338798701      -11.45       -5.71    2.0   7.11ms
    + 13   -7.251338798704      -11.66       -6.04    1.0   6.19ms
    + 14   -7.251338798704      -12.03       -6.64    2.0   6.96ms
    + 15   -7.251338798705      -13.20       -7.30    1.0   6.17ms
    + 16   -7.251338798705      -14.10       -7.19    3.0   8.11ms
    + 17   -7.251338798705      -14.57       -7.23    1.0   6.16ms
    + 18   -7.251338798705      -15.05       -7.62    1.0   6.01ms
    + 19   -7.251338798705      -15.05       -7.83    2.0   7.04ms
    + 20   -7.251338798705      -15.05       -7.96    1.0   6.00ms
    + 21   -7.251338798705   +  -14.75       -8.34    1.0   6.02ms

    Applying $ε^† ≔ (1- χ_0 K)$

    function eps_fun(δρ)
    +    δV = apply_kernel(basis, δρ; ρ=scfres.ρ)
    +    χ0δV = apply_χ0(scfres, δV)
    +    δρ - χ0δV
    +end;

    … eagerly diagonalizes the subspace matrix at each iteration

    eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);
    [ Info: Arnoldi iteration step 1: normres = 0.07717396626613025
    +[ Info: Arnoldi iteration step 2: normres = 0.5940059976151519
    +[ Info: Arnoldi iteration step 3: normres = 0.6492332454692612
    +[ Info: Arnoldi iteration step 4: normres = 0.29828365380506966
    +[ Info: Arnoldi iteration step 5: normres = 0.4433351150246992
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 5: 0 values converged, normres = (1.42e-02, 7.71e-02, 3.30e-01, 2.85e-01, 1.66e-02)
    +[ Info: Arnoldi iteration step 6: normres = 0.24187829402077152
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 6: 0 values converged, normres = (3.11e-03, 1.29e-01, 1.81e-01, 6.68e-02, 2.25e-02)
    +[ Info: Arnoldi iteration step 7: normres = 0.07670690426593917
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 7: 0 values converged, normres = (1.11e-04, 9.43e-03, 1.01e-02, 2.04e-02, 6.65e-02)
    +[ Info: Arnoldi iteration step 8: normres = 0.10474551024617836
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 8: 0 values converged, normres = (4.94e-06, 6.81e-04, 8.06e-04, 6.12e-03, 4.19e-02)
    +[ Info: Arnoldi iteration step 9: normres = 0.08272236839254764
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 9: 0 values converged, normres = (1.82e-07, 4.20e-05, 5.55e-05, 2.16e-03, 5.17e-02)
    +[ Info: Arnoldi iteration step 10: normres = 0.08407249999358296
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 10: 0 values converged, normres = (6.57e-09, 2.49e-06, 3.66e-06, 5.97e-04, 2.97e-02)
    +[ Info: Arnoldi iteration step 11: normres = 0.08844937081400792
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 11: 0 values converged, normres = (2.57e-10, 1.63e-07, 2.67e-07, 2.13e-04, 2.70e-02)
    +[ Info: Arnoldi iteration step 12: normres = 0.06444066064809145
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 12: 0 values converged, normres = (6.99e-12, 7.19e-09, 1.30e-08, 3.91e-05, 9.99e-03)
    +[ Info: Arnoldi iteration step 13: normres = 0.04819488801563417
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 13: 1 values converged, normres = (1.46e-13, 2.47e-10, 4.97e-10, 6.16e-06, 3.22e-03)
    +[ Info: Arnoldi iteration step 14: normres = 0.7224486273262888
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 14: 1 values converged, normres = (5.66e-14, 1.87e-10, 4.40e-10, 7.04e-01, 1.51e-01)
    +[ Info: Arnoldi iteration step 15: normres = 0.05626444465076618
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 15: 1 values converged, normres = (2.67e-15, 8.24e-10, 4.43e-02, 4.26e-04, 7.64e-07)
    +[ Info: Arnoldi iteration step 16: normres = 0.6796067711338744
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 16: 1 values converged, normres = (1.02e-15, 1.07e-09, 3.49e-02, 3.34e-04, 6.73e-01)
    +[ Info: Arnoldi iteration step 17: normres = 0.04126227321381642
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 17: 1 values converged, normres = (2.99e-17, 3.89e-09, 6.05e-03, 3.77e-06, 2.95e-02)
    +[ Info: Arnoldi iteration step 18: normres = 0.022008157588243923
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 18: 1 values converged, normres = (2.72e-19, 2.77e-05, 8.34e-05, 2.47e-05, 4.69e-04)
    +[ Info: Arnoldi iteration step 19: normres = 0.20310028149904247
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 19: 1 values converged, normres = (2.39e-20, 6.80e-08, 1.28e-05, 3.83e-08, 7.57e-05)
    +[ Info: Arnoldi iteration step 20: normres = 0.04730542269404601
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 20: 1 values converged, normres = (5.36e-22, 1.02e-08, 5.05e-07, 2.77e-06, 1.98e-06)
    +[ Info: Arnoldi iteration step 21: normres = 0.03464715596602793
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 21: 1 values converged, normres = (7.73e-24, 8.98e-09, 7.51e-09, 2.95e-09, 8.70e-08)
    +[ Info: Arnoldi iteration step 22: normres = 0.01727622417262145
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 22: 1 values converged, normres = (5.50e-26, 3.76e-11, 1.28e-10, 1.07e-10, 1.08e-09)
    +[ Info: Arnoldi iteration step 23: normres = 0.015477489698911436
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 23: 2 values converged, normres = (3.49e-28, 3.82e-13, 1.29e-12, 1.24e-12, 1.20e-11)
    +[ Info: Arnoldi iteration step 24: normres = 0.5916970989640061
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 24: 4 values converged, normres = (1.05e-28, 2.15e-13, 7.24e-13, 8.00e-13, 7.80e-12)
    +[ Info: Arnoldi iteration step 25: normres = 0.10505687704984816
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 25: 3 values converged, normres = (4.57e-29, 1.10e-13, 3.70e-13, 2.14e-11, 2.09e-10)
    +[ Info: Arnoldi iteration step 26: normres = 0.05698718295107285
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 26: 3 values converged, normres = (2.20e-31, 4.87e-15, 1.64e-14, 1.21e-11, 1.18e-10)
    +[ Info: Arnoldi iteration step 27: normres = 0.018264312827295247
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 27: 3 values converged, normres = (1.65e-33, 5.86e-17, 1.98e-16, 4.68e-11, 4.62e-10)
    +[ Info: Arnoldi iteration step 28: normres = 0.07886254463400907
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 28: 3 values converged, normres = (5.39e-35, 3.05e-18, 1.03e-17, 6.89e-12, 6.73e-11)
    +[ Info: Arnoldi iteration step 29: normres = 0.06650198479801143
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 29: 3 values converged, normres = (1.59e-36, 1.52e-19, 5.11e-19, 1.59e-07, 2.66e-08)
    +[ Info: Arnoldi iteration step 30: normres = 0.15238429598919445
    +[ Info: Arnoldi schursolve in iter 1, krylovdim = 30: 3 values converged, normres = (1.16e-37, 1.95e-20, 6.59e-20, 1.35e-11, 3.23e-10)
    +[ Info: Arnoldi schursolve in iter 2, krylovdim = 19: 3 values converged, normres = (1.16e-37, 1.95e-20, 6.59e-20, 1.35e-11, 3.23e-10)
    +[ Info: Arnoldi iteration step 20: normres = 0.022506411577103605
    +[ Info: Arnoldi schursolve in iter 2, krylovdim = 20: 4 values converged, normres = (1.12e-39, 3.09e-22, 1.04e-21, 9.09e-13, 4.16e-10)
    +[ Info: Arnoldi iteration step 21: normres = 0.03530620746687402
    +[ Info: Arnoldi schursolve in iter 2, krylovdim = 21: 4 values converged, normres = (1.62e-41, 7.13e-24, 2.40e-23, 2.15e-14, 1.05e-11)
    +[ Info: Arnoldi iteration step 22: normres = 0.05944523477970127
    +┌ Info: Arnoldi eigsolve finished after 2 iterations:
    +*  6 eigenvalues converged
    +*  norm of residuals = (4.1490892098623406e-43, 2.9960048531311745e-25, 1.0276089037430989e-24, 1.004801669048703e-15, 4.852868054654679e-13, 9.279010451844582e-15)
    +*  number of operations = 33
    diff --git a/v0.6.17/examples/energy_cutoff_smearing.ipynb b/v0.6.17/examples/energy_cutoff_smearing.ipynb new file mode 100644 index 0000000000..f004b3fe6d --- /dev/null +++ b/v0.6.17/examples/energy_cutoff_smearing.ipynb @@ -0,0 +1,456 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Energy cutoff smearing\n", + "\n", + "A technique that has been employed in the literature to ensure smooth energy bands\n", + "for finite Ecut values is energy cutoff smearing.\n", + "\n", + "As recalled in the\n", + "[Problems and plane-wave discretization](https://docs.dftk.org/stable/guide/periodic_problems/)\n", + "section, the energy of periodic systems is computed by solving eigenvalue\n", + "problems of the form\n", + "$$\n", + "H_k u_k = ε_k u_k,\n", + "$$\n", + "for each $k$-point in the first Brillouin zone of the system.\n", + "Each of these eigenvalue problem is discretized with a plane-wave basis\n", + "$\\mathcal{B}_k^{E_c}=\\{x ↦ e^{iG · x} \\;\\;|\\;G ∈ \\mathcal{R}^*,\\;\\; |k+G|^2 ≤ 2E_c\\}$\n", + "whose size highly depends on the choice of $k$-point, cell size or\n", + "cutoff energy $\\rm E_c$ (the `Ecut` parameter of DFTK).\n", + "As a result, energy bands computed along a $k$-path in the Brillouin zone\n", + "or with respect to the system's unit cell volume - in the case of geometry optimization\n", + "for example - display big irregularities when `Ecut` is taken too small.\n", + "\n", + "Here is for example the variation of the ground state energy of face cubic centred\n", + "(FCC) silicon with respect to its lattice parameter,\n", + "around the experimental lattice constant." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Statistics\n", + "\n", + "a0 = 10.26 # Experimental lattice constant of silicon in bohr\n", + "a_list = range(a0 - 1/2, a0 + 1/2; length=20)\n", + "\n", + "function compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)\n", + " lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + " Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + " atoms = [Si, Si]\n", + " positions = [ones(3)/8, -ones(3)/8]\n", + " model = model_PBE(lattice, atoms, positions; kinetic_blowup)\n", + " basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + " self_consistent_field(basis; callback=identity, kwargs...).energies.total\n", + "end\n", + "\n", + "Ecut = 5 # Very low Ecut to display big irregularities\n", + "kgrid = (2, 2, 2) # Very sparse k-grid to speed up convergence\n", + "E0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "To be compared with the same computation for a high `Ecut=100`. The naive approximation\n", + "of the energy is shifted for the legibility of the plot." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,\n", + " -7.848576991754026, -7.850892888614151, -7.852921532056932,\n", + " -7.854675317792186, -7.85616622262217, -7.85740584131599,\n", + " -7.858405359984107, -7.859175611288143, -7.859727053496513,\n", + " -7.860069804791132, -7.860213631865354, -7.8601679947736915,\n", + " -7.859942011410533, -7.859544518721661, -7.858984032385052,\n", + " -7.858268793303855, -7.857406769423708]\n", + "\n", + "using Plots\n", + "shift = mean(abs.(E0_naive .- E0_ref))\n", + "p = plot(a_list, E0_naive .- shift, label=\"Ecut=5\", xlabel=\"lattice parameter a (bohr)\",\n", + " ylabel=\"Ground state energy (Ha)\", color=1)\n", + "plot!(p, a_list, E0_ref, label=\"Ecut=100\", color=2)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "The problem of non-smoothness of the approximated energy is typically avoided by\n", + "taking a large enough `Ecut`, at the cost of a high computation time.\n", + "Another method consist in introducing a modified kinetic term defined through\n", + "the data of a blow-up function, a method which is also referred to as \"energy cutoff\n", + "smearing\". DFTK features energy cutoff smearing using the CHV blow-up\n", + "function introduced in [^CHV2022] that is mathematically ensured to provide $C^2$\n", + "regularity of the energy bands.\n", + "\n", + "[^CHV2022]:\n", + " Éric Cancès, Muhammad Hassan and Laurent Vidal\n", + " *Modified-operator method for the calculation of band diagrams of\n", + " crystalline materials*, 2022.\n", + " [arXiv preprint.](https://arxiv.org/abs/2210.00442)" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Let us lauch the computation again with the modified kinetic term." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Abinit energy cutoff smearing option\"\n", + " For the sake of completeness, DFTK also provides the blow-up function `BlowupAbinit`\n", + " proposed in the Abinit quantum chemistry code. This function depends on a parameter\n", + " `Ecutsm` fixed by the user\n", + " (see [Abinit user guide](https://docs.abinit.org/variables/rlx/#ecutsm)).\n", + " For the right choice of `Ecutsm`, `BlowupAbinit` corresponds to the `BlowupCHV` approach\n", + " with coefficients ensuring $C^1$ regularity. To choose `BlowupAbinit`, pass\n", + " `kinetic_blowup=BlowupAbinit(Ecutsm)` to the model constructors." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We can know compare the approximation of the energy as well as the estimated\n", + "lattice constant for each strategy." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=7}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]\n", + "a0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])\n", + "\n", + "shift = mean(abs.(E0_modified .- E0_ref)) # Shift for legibility of the plot\n", + "plot!(p, a_list, E0_modified .- shift, label=\"Ecut=5 + BlowupCHV\", color=3)\n", + "vline!(p, [a0], label=\"experimental a0\", linestyle=:dash, linecolor=:black)\n", + "vline!(p, [a0_naive], label=\"a0 Ecut=5\", linestyle=:dash, color=1)\n", + "vline!(p, [a0_ref], label=\"a0 Ecut=100\", linestyle=:dash, color=2)\n", + "vline!(p, [a0_modified], label=\"a0 Ecut=5 + BlowupCHV\", linestyle=:dash, color=3)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The smoothed curve obtained with the modified kinetic term allow to clearly designate\n", + "a minimal value of the energy with respect to the lattice parameter $a$, even with\n", + "the low `Ecut=5` Ha." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Error of approximation of the reference a0 with modified kinetic term: 0.50393%\n" + ] + } + ], + "cell_type": "code", + "source": [ + "println(\"Error of approximation of the reference a0 with modified kinetic term:\"*\n", + " \" $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%\")" + ], + "metadata": {}, + "execution_count": 5 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/energy_cutoff_smearing/0b21f989.svg b/v0.6.17/examples/energy_cutoff_smearing/0b21f989.svg new file mode 100644 index 0000000000..22e7d7c7f2 --- /dev/null +++ b/v0.6.17/examples/energy_cutoff_smearing/0b21f989.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/energy_cutoff_smearing/6c2309be.svg b/v0.6.17/examples/energy_cutoff_smearing/6c2309be.svg new file mode 100644 index 0000000000..d7cad5a5c8 --- /dev/null +++ b/v0.6.17/examples/energy_cutoff_smearing/6c2309be.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/energy_cutoff_smearing/index.html b/v0.6.17/examples/energy_cutoff_smearing/index.html new file mode 100644 index 0000000000..9a726381ca --- /dev/null +++ b/v0.6.17/examples/energy_cutoff_smearing/index.html @@ -0,0 +1,43 @@ + +Energy cutoff smearing · DFTK.jl

    Energy cutoff smearing

    A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.

    As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form

    \[H_k u_k = ε_k u_k,\]

    for each $k$-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis $\mathcal{B}_k^{E_c}=\{x ↦ e^{iG · x} \;\;|\;G ∈ \mathcal{R}^*,\;\; |k+G|^2 ≤ 2E_c\}$ whose size highly depends on the choice of $k$-point, cell size or cutoff energy $\rm E_c$ (the Ecut parameter of DFTK). As a result, energy bands computed along a $k$-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.

    Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.

    using DFTK
    +using Statistics
    +
    +a0 = 10.26  # Experimental lattice constant of silicon in bohr
    +a_list = range(a0 - 1/2, a0 + 1/2; length=20)
    +
    +function compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)
    +    lattice = a / 2 * [[0 1 1.];
    +                       [1 0 1.];
    +                       [1 1 0.]]
    +    Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +    atoms = [Si, Si]
    +    positions = [ones(3)/8, -ones(3)/8]
    +    model = model_PBE(lattice, atoms, positions; kinetic_blowup)
    +    basis = PlaneWaveBasis(model; Ecut, kgrid)
    +    self_consistent_field(basis; callback=identity, kwargs...).energies.total
    +end
    +
    +Ecut  = 5          # Very low Ecut to display big irregularities
    +kgrid = (2, 2, 2)  # Very sparse k-grid to speed up convergence
    +E0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);

    To be compared with the same computation for a high Ecut=100. The naive approximation of the energy is shifted for the legibility of the plot.

    E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,
    +          -7.848576991754026, -7.850892888614151, -7.852921532056932,
    +          -7.854675317792186, -7.85616622262217,  -7.85740584131599,
    +          -7.858405359984107, -7.859175611288143, -7.859727053496513,
    +          -7.860069804791132, -7.860213631865354, -7.8601679947736915,
    +          -7.859942011410533, -7.859544518721661, -7.858984032385052,
    +          -7.858268793303855, -7.857406769423708]
    +
    +using Plots
    +shift = mean(abs.(E0_naive .- E0_ref))
    +p = plot(a_list, E0_naive .- shift, label="Ecut=5", xlabel="lattice parameter a (bohr)",
    +         ylabel="Ground state energy (Ha)", color=1)
    +plot!(p, a_list, E0_ref, label="Ecut=100", color=2)
    Example block output

    The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as "energy cutoff smearing". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide $C^2$ regularity of the energy bands.

    Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.

    Let us lauch the computation again with the modified kinetic term.

    E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);
    Abinit energy cutoff smearing option

    For the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring $C^1$ regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.

    We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.

    estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]
    +a0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])
    +
    +shift = mean(abs.(E0_modified .- E0_ref))  # Shift for legibility of the plot
    +plot!(p, a_list, E0_modified .- shift, label="Ecut=5 + BlowupCHV", color=3)
    +vline!(p, [a0], label="experimental a0", linestyle=:dash, linecolor=:black)
    +vline!(p, [a0_naive], label="a0 Ecut=5", linestyle=:dash, color=1)
    +vline!(p, [a0_ref], label="a0 Ecut=100", linestyle=:dash, color=2)
    +vline!(p, [a0_modified], label="a0 Ecut=5 + BlowupCHV", linestyle=:dash, color=3)
    Example block output

    The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter $a$, even with the low Ecut=5 Ha.

    println("Error of approximation of the reference a0 with modified kinetic term:"*
    +        " $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%")
    Error of approximation of the reference a0 with modified kinetic term: 0.50393%
    diff --git a/v0.6.17/examples/error_estimates_forces.ipynb b/v0.6.17/examples/error_estimates_forces.ipynb new file mode 100644 index 0000000000..a5f314d979 --- /dev/null +++ b/v0.6.17/examples/error_estimates_forces.ipynb @@ -0,0 +1,542 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Practical error bounds for the forces\n", + "\n", + "This is a simple example showing how to compute error estimates for the forces\n", + "on a ${\\rm TiO}_2$ molecule, from which we can either compute asymptotically\n", + "valid error bounds or increase the precision on the computation of the forces.\n", + "\n", + "The strategy we follow is described with more details in [^CDKL2021] and we\n", + "will use in comments the density matrices framework. We will also needs\n", + "operators and functions from\n", + "[`src/scf/newton.jl`](https://dftk.org/blob/master/src/scf/newton.jl).\n", + "\n", + "[^CDKL2021]:\n", + " E. Cancès, G. Dusson, G. Kemlin, and A. Levitt\n", + " *Practical error bounds for properties in plane-wave electronic structure\n", + " calculations* Preprint, 2021. [arXiv](https://arxiv.org/abs/2111.01470)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Printf\n", + "using LinearAlgebra\n", + "using ForwardDiff\n", + "using LinearMaps\n", + "using IterativeSolvers" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Setup\n", + "We setup manually the ${\\rm TiO}_2$ configuration from\n", + "[Materials Project](https://materialsproject.org/materials/mp-2657/)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Ti = ElementPsp(:Ti; psp=load_psp(\"hgh/lda/ti-q4.hgh\"))\n", + "O = ElementPsp(:O; psp=load_psp(\"hgh/lda/o-q6.hgh\"))\n", + "atoms = [Ti, Ti, O, O, O, O]\n", + "positions = [[0.5, 0.5, 0.5], # Ti\n", + " [0.0, 0.0, 0.0], # Ti\n", + " [0.19542, 0.80458, 0.5], # O\n", + " [0.80458, 0.19542, 0.5], # O\n", + " [0.30458, 0.30458, 0.0], # O\n", + " [0.69542, 0.69542, 0.0]] # O\n", + "lattice = [[8.79341 0.0 0.0];\n", + " [0.0 8.79341 0.0];\n", + " [0.0 0.0 5.61098]];" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We apply a small displacement to one of the $\\rm Ti$ atoms to get nonzero\n", + "forces." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "3-element Vector{Float64}:\n 0.478\n 0.528\n 0.535" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "positions[1] .+= [-0.022, 0.028, 0.035]" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "We build a model with one $k$-point only, not too high `Ecut_ref` and small\n", + "tolerance to limit computational time. These parameters can be increased for\n", + "more precise results." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "model = model_LDA(lattice, atoms, positions)\n", + "kgrid = [1, 1, 1]\n", + "Ecut_ref = 35\n", + "basis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)\n", + "tol = 1e-5;" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "## Computations" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We compute the reference solution $P_*$ from which we will compute the\n", + "references forces." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)\n", + "ψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We compute a variational approximation of the reference solution with\n", + "smaller `Ecut`. `ψr`, `ρr` and `Er` are the quantities computed with `Ecut`\n", + "and then extended to the reference grid.\n", + "\n", + "!!! note \"Choice of convergence parameters\"\n", + " Be careful to choose `Ecut` not too close to `Ecut_ref`.\n", + " Note also that the current choice `Ecut_ref = 35` is such that the\n", + " reference solution is not converged and `Ecut = 15` is such that the\n", + " asymptotic regime (crucial to validate the approach) is barely established." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "Ecut = 15\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "scfres = self_consistent_field(basis; tol, callback=identity)\n", + "ψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)\n", + "ρr = compute_density(basis_ref, ψr, scfres.occupation)\n", + "Er, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We then compute several quantities that we need to evaluate the error bounds." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the residual $R(P)$, and remove the virtual orbitals, as required\n", + " in [`src/scf/newton.jl`](https://github.com/JuliaMolSim/DFTK.jl/blob/fedc720dab2d194b30d468501acd0f04bd4dd3d6/src/scf/newton.jl#L121)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)\n", + "res, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)\n", + "ψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the error $P-P_*$ on the associated orbitals $ϕ-ψ$ after aligning\n", + " them: this is done by solving $\\min |ϕ - ψU|$ for $U$ unitary matrix of\n", + " size $N×N$ ($N$ being the number of electrons) whose solution is\n", + " $U = S(S^*S)^{-1/2}$ where $S$ is the overlap matrix $ψ^*ϕ$." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function compute_error(basis, ϕ, ψ)\n", + " map(zip(ϕ, ψ)) do (ϕk, ψk)\n", + " S = ψk'ϕk\n", + " U = S*(S'S)^(-1/2)\n", + " ϕk - ψk*U\n", + " end\n", + "end\n", + "err = compute_error(basis_ref, ψr, ψ_ref);" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute ${\\boldsymbol M}^{-1}R(P)$ with ${\\boldsymbol M}^{-1}$ defined in [^CDKL2021]:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]\n", + "map(zip(P, ψr)) do (Pk, ψk)\n", + " DFTK.precondprep!(Pk, ψk)\n", + "end\n", + "function apply_M(φk, Pk, δφnk, n)\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + " δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + " δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + "end\n", + "function apply_inv_M(φk, Pk, δφnk, n)\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + " op(x) = apply_M(φk, Pk, x, n)\n", + " function f_ldiv!(x, y)\n", + " x .= DFTK.proj_tangent_kpt(y, φk)\n", + " x ./= (Pk.mean_kin[n] .+ Pk.kin)\n", + " DFTK.proj_tangent_kpt!(x, φk)\n", + " end\n", + " J = LinearMap{eltype(φk)}(op, size(δφnk, 1))\n", + " δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),\n", + " verbose=false, reltol=0, abstol=1e-15)\n", + " DFTK.proj_tangent_kpt!(δφnk, φk)\n", + "end\n", + "function apply_metric(φ, P, δφ, A::Function)\n", + " map(enumerate(δφ)) do (ik, δφk)\n", + " Aδφk = similar(δφk)\n", + " φk = φ[ik]\n", + " for n = 1:size(δφk,2)\n", + " Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)\n", + " end\n", + " Aδφk\n", + " end\n", + "end\n", + "Mres = apply_metric(ψr, P, res, apply_inv_M);" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "We can now compute the modified residual $R_{\\rm Schur}(P)$ using a Schur\n", + "complement to approximate the error on low-frequencies[^CDKL2021]:\n", + "\n", + "$$\n", + "\\begin{bmatrix}\n", + "(\\boldsymbol Ω + \\boldsymbol K)_{11} & (\\boldsymbol Ω + \\boldsymbol K)_{12} \\\\\n", + "0 & {\\boldsymbol M}_{22}\n", + "\\end{bmatrix}\n", + "\\begin{bmatrix}\n", + "P_{1} - P_{*1} \\\\ P_{2}-P_{*2}\n", + "\\end{bmatrix} =\n", + "\\begin{bmatrix}\n", + "R_{1} \\\\ R_{2}\n", + "\\end{bmatrix}.\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the projection of the residual onto the high and low frequencies:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "resLF = DFTK.transfer_blochwave(res, basis_ref, basis)\n", + "resHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute ${\\boldsymbol M}^{-1}_{22}R_2(P)$:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "e2 = apply_metric(ψr, P, resHF, apply_inv_M);" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "- Compute the right hand side of the Schur system:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "# Rayleigh coefficients needed for `apply_Ω`\n", + "Λ = map(enumerate(ψr)) do (ik, ψk)\n", + " Hk = hamr.blocks[ik]\n", + " Hψk = Hk * ψk\n", + " ψk'Hψk\n", + "end\n", + "ΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)\n", + "ΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)\n", + "rhs = resLF - ΩpKe2;" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "- Solve the Schur system to compute $R_{\\rm Schur}(P)$: this is the most\n", + " costly step, but inverting $\\boldsymbol{Ω} + \\boldsymbol{K}$ on the small space has\n", + " the same cost than the full SCF cycle on the small grid." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "(; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)\n", + "e1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ\n", + "e1 = DFTK.transfer_blochwave(e1, basis, basis_ref)\n", + "res_schur = e1 + Mres;" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "## Error estimates" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We start with different estimations of the forces:\n", + "- Force from the reference solution" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "f_ref = compute_forces(scfres_ref)\n", + "forces = Dict(\"F(P_*)\" => f_ref)\n", + "relerror = Dict(\"F(P_*)\" => 0.0)\n", + "compute_relerror(f) = norm(f - f_ref) / norm(f_ref);" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "- Force from the variational solution and relative error without\n", + " any post-processing:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "f = compute_forces(scfres)\n", + "forces[\"F(P)\"] = f\n", + "relerror[\"F(P)\"] = compute_relerror(f);" + ], + "metadata": {}, + "execution_count": 15 + }, + { + "cell_type": "markdown", + "source": [ + "We then try to improve $F(P)$ using the first order linearization:\n", + "\n", + "$$\n", + "F(P) = F(P_*) + {\\rm d}F(P)·(P-P_*).\n", + "$$" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To this end, we use the `ForwardDiff.jl` package to compute ${\\rm d}F(P)$\n", + "using automatic differentiation." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function df(basis, occupation, ψ, δψ, ρ)\n", + " δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)\n", + " ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)\n", + "end;" + ], + "metadata": {}, + "execution_count": 16 + }, + { + "cell_type": "markdown", + "source": [ + "- Computation of the forces by a linearization argument if we have access to\n", + " the actual error $P-P_*$. Usually this is of course not the case, but this\n", + " is the \"best\" improvement we can hope for with a linearisation, so we are\n", + " aiming for this precision." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)\n", + "forces[\"F(P) - df(P)⋅(P-P_*)\"] = f - df_err\n", + "relerror[\"F(P) - df(P)⋅(P-P_*)\"] = compute_relerror(f - df_err);" + ], + "metadata": {}, + "execution_count": 17 + }, + { + "cell_type": "markdown", + "source": [ + "- Computation of the forces by a linearization argument when replacing the\n", + " error $P-P_*$ by the modified residual $R_{\\rm Schur}(P)$. The latter\n", + " quantity is computable in practice." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "df_schur = df(basis_ref, occ, ψr, res_schur, ρr)\n", + "forces[\"F(P) - df(P)⋅Rschur(P)\"] = f - df_schur\n", + "relerror[\"F(P) - df(P)⋅Rschur(P)\"] = compute_relerror(f - df_schur);" + ], + "metadata": {}, + "execution_count": 18 + }, + { + "cell_type": "markdown", + "source": [ + "Summary of all forces on the first atom (Ti)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " F(P_*) = [1.47901, -1.25376, 0.81010] (rel. error: 0.00000)\n", + " F(P) = [1.13546, -1.01526, 0.40015] (rel. error: 0.20484)\n", + " F(P) - df(P)⋅Rschur(P) = [1.29130, -1.10185, 0.69055] (rel. error: 0.07832)\n", + " F(P) - df(P)⋅(P-P_*) = [1.50905, -1.28634, 0.86145] (rel. error: 0.08072)\n" + ] + } + ], + "cell_type": "code", + "source": [ + "for (key, value) in pairs(forces)\n", + " @printf(\"%30s = [%7.5f, %7.5f, %7.5f] (rel. error: %7.5f)\\n\",\n", + " key, (value[1])..., relerror[key])\n", + "end" + ], + "metadata": {}, + "execution_count": 19 + }, + { + "cell_type": "markdown", + "source": [ + "Notice how close the computable expression $F(P) - {\\rm d}F(P)⋅R_{\\rm Schur}(P)$\n", + "is to the best linearization ansatz $F(P) - {\\rm d}F(P)⋅(P-P_*)$." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/error_estimates_forces/index.html b/v0.6.17/examples/error_estimates_forces/index.html new file mode 100644 index 0000000000..3b1a58352a --- /dev/null +++ b/v0.6.17/examples/error_estimates_forces/index.html @@ -0,0 +1,113 @@ + +Practical error bounds for the forces · DFTK.jl

    Practical error bounds for the forces

    This is a simple example showing how to compute error estimates for the forces on a ${\rm TiO}_2$ molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.

    The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.

    using DFTK
    +using Printf
    +using LinearAlgebra
    +using ForwardDiff
    +using LinearMaps
    +using IterativeSolvers

    Setup

    We setup manually the ${\rm TiO}_2$ configuration from Materials Project.

    Ti = ElementPsp(:Ti; psp=load_psp("hgh/lda/ti-q4.hgh"))
    +O  = ElementPsp(:O; psp=load_psp("hgh/lda/o-q6.hgh"))
    +atoms     = [Ti, Ti, O, O, O, O]
    +positions = [[0.5,     0.5,     0.5],  # Ti
    +             [0.0,     0.0,     0.0],  # Ti
    +             [0.19542, 0.80458, 0.5],  # O
    +             [0.80458, 0.19542, 0.5],  # O
    +             [0.30458, 0.30458, 0.0],  # O
    +             [0.69542, 0.69542, 0.0]]  # O
    +lattice   = [[8.79341  0.0      0.0];
    +             [0.0      8.79341  0.0];
    +             [0.0      0.0      5.61098]];

    We apply a small displacement to one of the $\rm Ti$ atoms to get nonzero forces.

    positions[1] .+= [-0.022, 0.028, 0.035]
    3-element Vector{Float64}:
    + 0.478
    + 0.528
    + 0.535

    We build a model with one $k$-point only, not too high Ecut_ref and small tolerance to limit computational time. These parameters can be increased for more precise results.

    model = model_LDA(lattice, atoms, positions)
    +kgrid = [1, 1, 1]
    +Ecut_ref = 35
    +basis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)
    +tol = 1e-5;

    Computations

    We compute the reference solution $P_*$ from which we will compute the references forces.

    scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)
    +ψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;

    We compute a variational approximation of the reference solution with smaller Ecut. ψr, ρr and Er are the quantities computed with Ecut and then extended to the reference grid.

    Choice of convergence parameters

    Be careful to choose Ecut not too close to Ecut_ref. Note also that the current choice Ecut_ref = 35 is such that the reference solution is not converged and Ecut = 15 is such that the asymptotic regime (crucial to validate the approach) is barely established.

    Ecut = 15
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +scfres = self_consistent_field(basis; tol, callback=identity)
    +ψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)
    +ρr = compute_density(basis_ref, ψr, scfres.occupation)
    +Er, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);

    We then compute several quantities that we need to evaluate the error bounds.

    • Compute the residual $R(P)$, and remove the virtual orbitals, as required in src/scf/newton.jl.
    res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)
    +res, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)
    +ψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;
    • Compute the error $P-P_*$ on the associated orbitals $ϕ-ψ$ after aligning them: this is done by solving $\min |ϕ - ψU|$ for $U$ unitary matrix of size $N×N$ ($N$ being the number of electrons) whose solution is $U = S(S^*S)^{-1/2}$ where $S$ is the overlap matrix $ψ^*ϕ$.
    function compute_error(basis, ϕ, ψ)
    +    map(zip(ϕ, ψ)) do (ϕk, ψk)
    +        S = ψk'ϕk
    +        U = S*(S'S)^(-1/2)
    +        ϕk - ψk*U
    +    end
    +end
    +err = compute_error(basis_ref, ψr, ψ_ref);
    • Compute ${\boldsymbol M}^{-1}R(P)$ with ${\boldsymbol M}^{-1}$ defined in [CDKL2021]:
    P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]
    +map(zip(P, ψr)) do (Pk, ψk)
    +    DFTK.precondprep!(Pk, ψk)
    +end
    +function apply_M(φk, Pk, δφnk, n)
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +    δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +    δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +end
    +function apply_inv_M(φk, Pk, δφnk, n)
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +    op(x) = apply_M(φk, Pk, x, n)
    +    function f_ldiv!(x, y)
    +        x .= DFTK.proj_tangent_kpt(y, φk)
    +        x ./= (Pk.mean_kin[n] .+ Pk.kin)
    +        DFTK.proj_tangent_kpt!(x, φk)
    +    end
    +    J = LinearMap{eltype(φk)}(op, size(δφnk, 1))
    +    δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),
    +              verbose=false, reltol=0, abstol=1e-15)
    +    DFTK.proj_tangent_kpt!(δφnk, φk)
    +end
    +function apply_metric(φ, P, δφ, A::Function)
    +    map(enumerate(δφ)) do (ik, δφk)
    +        Aδφk = similar(δφk)
    +        φk = φ[ik]
    +        for n = 1:size(δφk,2)
    +            Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)
    +        end
    +        Aδφk
    +    end
    +end
    +Mres = apply_metric(ψr, P, res, apply_inv_M);

    We can now compute the modified residual $R_{\rm Schur}(P)$ using a Schur complement to approximate the error on low-frequencies[CDKL2021]:

    \[\begin{bmatrix} +(\boldsymbol Ω + \boldsymbol K)_{11} & (\boldsymbol Ω + \boldsymbol K)_{12} \\ +0 & {\boldsymbol M}_{22} +\end{bmatrix} +\begin{bmatrix} +P_{1} - P_{*1} \\ P_{2}-P_{*2} +\end{bmatrix} = +\begin{bmatrix} +R_{1} \\ R_{2} +\end{bmatrix}.\]

    • Compute the projection of the residual onto the high and low frequencies:
    resLF = DFTK.transfer_blochwave(res, basis_ref, basis)
    +resHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);
    • Compute ${\boldsymbol M}^{-1}_{22}R_2(P)$:
    e2 = apply_metric(ψr, P, resHF, apply_inv_M);
    • Compute the right hand side of the Schur system:
    # Rayleigh coefficients needed for `apply_Ω`
    +Λ = map(enumerate(ψr)) do (ik, ψk)
    +    Hk = hamr.blocks[ik]
    +    Hψk = Hk * ψk
    +    ψk'Hψk
    +end
    +ΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)
    +ΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)
    +rhs = resLF - ΩpKe2;
    • Solve the Schur system to compute $R_{\rm Schur}(P)$: this is the most costly step, but inverting $\boldsymbol{Ω} + \boldsymbol{K}$ on the small space has the same cost than the full SCF cycle on the small grid.
    (; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)
    +e1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ
    +e1 = DFTK.transfer_blochwave(e1, basis, basis_ref)
    +res_schur = e1 + Mres;

    Error estimates

    We start with different estimations of the forces:

    • Force from the reference solution
    f_ref = compute_forces(scfres_ref)
    +forces   = Dict("F(P_*)" => f_ref)
    +relerror = Dict("F(P_*)" => 0.0)
    +compute_relerror(f) = norm(f - f_ref) / norm(f_ref);
    • Force from the variational solution and relative error without any post-processing:
    f = compute_forces(scfres)
    +forces["F(P)"]   = f
    +relerror["F(P)"] = compute_relerror(f);

    We then try to improve $F(P)$ using the first order linearization:

    \[F(P) = F(P_*) + {\rm d}F(P)·(P-P_*).\]

    To this end, we use the ForwardDiff.jl package to compute ${\rm d}F(P)$ using automatic differentiation.

    function df(basis, occupation, ψ, δψ, ρ)
    +    δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)
    +    ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)
    +end;
    • Computation of the forces by a linearization argument if we have access to the actual error $P-P_*$. Usually this is of course not the case, but this is the "best" improvement we can hope for with a linearisation, so we are aiming for this precision.
    df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)
    +forces["F(P) - df(P)⋅(P-P_*)"]   = f - df_err
    +relerror["F(P) - df(P)⋅(P-P_*)"] = compute_relerror(f - df_err);
    • Computation of the forces by a linearization argument when replacing the error $P-P_*$ by the modified residual $R_{\rm Schur}(P)$. The latter quantity is computable in practice.
    df_schur = df(basis_ref, occ, ψr, res_schur, ρr)
    +forces["F(P) - df(P)⋅Rschur(P)"]   = f - df_schur
    +relerror["F(P) - df(P)⋅Rschur(P)"] = compute_relerror(f - df_schur);

    Summary of all forces on the first atom (Ti)

    for (key, value) in pairs(forces)
    +    @printf("%30s = [%7.5f, %7.5f, %7.5f]   (rel. error: %7.5f)\n",
    +            key, (value[1])..., relerror[key])
    +end
                            F(P_*) = [1.47899, -1.25380, 0.81012]   (rel. error: 0.00000)
    +                          F(P) = [1.13549, -1.01530, 0.40016]   (rel. error: 0.20483)
    +        F(P) - df(P)⋅Rschur(P) = [1.29122, -1.10177, 0.69056]   (rel. error: 0.07831)
    +          F(P) - df(P)⋅(P-P_*) = [1.50906, -1.28638, 0.86147]   (rel. error: 0.08072)

    Notice how close the computable expression $F(P) - {\rm d}F(P)⋅R_{\rm Schur}(P)$ is to the best linearization ansatz $F(P) - {\rm d}F(P)⋅(P-P_*)$.

    • CDKL2021E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv
    diff --git a/v0.6.17/examples/forwarddiff.ipynb b/v0.6.17/examples/forwarddiff.ipynb new file mode 100644 index 0000000000..d45f2b58b2 --- /dev/null +++ b/v0.6.17/examples/forwarddiff.ipynb @@ -0,0 +1,180 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Polarizability using automatic differentiation\n", + "\n", + "Simple example for computing properties using (forward-mode)\n", + "automatic differentiation.\n", + "For a more classical approach and more details about computing polarizabilities,\n", + "see Polarizability by linear response." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "using ForwardDiff\n", + "\n", + "# Construct PlaneWaveBasis given a particular electric field strength\n", + "# Again we take the example of a Helium atom.\n", + "function make_basis(ε::T; a=10., Ecut=30) where {T}\n", + " lattice=T(a) * I(3) # lattice is a cube of $a$ Bohrs\n", + " # Helium at the center of the box\n", + " atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n", + " positions = [[1/2, 1/2, 1/2]]\n", + "\n", + " model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];\n", + " extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n", + " symmetries=false)\n", + " PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1]) # No k-point sampling on isolated system\n", + "end\n", + "\n", + "# dipole moment of a given density (assuming the current geometry)\n", + "function dipole(basis, ρ)\n", + " @assert isdiag(basis.model.lattice)\n", + " a = basis.model.lattice[1, 1]\n", + " rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]\n", + " sum(rr .* ρ) * basis.dvol\n", + "end\n", + "\n", + "# Function to compute the dipole for a given field strength\n", + "function compute_dipole(ε; tol=1e-8, kwargs...)\n", + " scfres = self_consistent_field(make_basis(ε; kwargs...); tol)\n", + " dipole(scfres.basis, scfres.ρ)\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "With this in place we can compute the polarizability from finite differences\n", + "(just like in the previous example):" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770902606321 -0.52 9.0 173ms\n", + " 2 -2.772148440179 -2.90 -1.32 1.0 114ms\n", + " 3 -2.772170349925 -4.66 -2.47 1.0 109ms\n", + " 4 -2.772170653399 -6.52 -3.18 1.0 110ms\n", + " 5 -2.772170722133 -7.16 -3.98 2.0 130ms\n", + " 6 -2.772170722437 -9.52 -4.11 1.0 116ms\n", + " 7 -2.772170722993 -9.26 -4.87 1.0 114ms\n", + " 8 -2.772170723009 -10.78 -5.14 1.0 122ms\n", + " 9 -2.772170723015 -11.26 -6.22 1.0 121ms\n", + " 10 -2.772170723015 -12.92 -6.11 2.0 152ms\n", + " 11 -2.772170723015 -13.30 -6.50 1.0 124ms\n", + " 12 -2.772170723015 -13.72 -7.14 1.0 140ms\n", + " 13 -2.772170723015 -13.70 -7.56 1.0 136ms\n", + " 14 -2.772170723015 + -13.67 -7.91 2.0 143ms\n", + " 15 -2.772170723015 -13.91 -8.61 1.0 145ms\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770741737137 -0.52 9.0 188ms\n", + " 2 -2.772059181019 -2.88 -1.32 1.0 109ms\n", + " 3 -2.772082945885 -4.62 -2.43 1.0 123ms\n", + " 4 -2.772083322478 -6.42 -3.10 1.0 114ms\n", + " 5 -2.772083417487 -7.02 -4.21 2.0 136ms\n", + " 6 -2.772083417670 -9.74 -4.46 1.0 112ms\n", + " 7 -2.772083417809 -9.86 -5.79 1.0 117ms\n", + " 8 -2.772083417811 -11.73 -6.46 2.0 141ms\n", + " 9 -2.772083417811 -14.45 -6.43 2.0 136ms\n", + " 10 -2.772083417811 -13.69 -7.40 1.0 164ms\n", + " 11 -2.772083417811 -13.75 -7.90 2.0 206ms\n", + " 12 -2.772083417811 + -14.15 -8.98 1.0 194ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "1.7735579671161017" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "polarizability_fd = let\n", + " ε = 0.01\n", + " (compute_dipole(ε) - compute_dipole(0.0)) / ε\n", + "end" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We do the same thing using automatic differentiation. Under the hood this uses\n", + "custom rules to implicitly differentiate through the self-consistent\n", + "field fixed-point problem." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770783549717 -0.52 9.0 185ms\n", + " 2 -2.772060936365 -2.89 -1.32 1.0 107ms\n", + " 3 -2.772083065833 -4.66 -2.46 1.0 130ms\n", + " 4 -2.772083336281 -6.57 -3.14 1.0 111ms\n", + " 5 -2.772083416681 -7.09 -3.99 2.0 141ms\n", + " 6 -2.772083417678 -9.00 -4.58 1.0 114ms\n", + " 7 -2.772083417806 -9.90 -5.72 1.0 215ms\n", + " 8 -2.772083417810 -11.34 -5.79 2.0 184ms\n", + " 9 -2.772083417811 -12.38 -6.40 1.0 475ms\n", + " 10 -2.772083417811 -13.55 -7.62 2.0 157ms\n", + " 11 -2.772083417811 -13.85 -8.31 1.0 404ms\n", + "\n", + "Polarizability via ForwardDiff: 1.7725349608243555\n", + "Polarizability via finite difference: 1.7735579671161017\n" + ] + } + ], + "cell_type": "code", + "source": [ + "polarizability = ForwardDiff.derivative(compute_dipole, 0.0)\n", + "println()\n", + "println(\"Polarizability via ForwardDiff: $polarizability\")\n", + "println(\"Polarizability via finite difference: $polarizability_fd\")" + ], + "metadata": {}, + "execution_count": 3 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/forwarddiff/index.html b/v0.6.17/examples/forwarddiff/index.html new file mode 100644 index 0000000000..c10c59c125 --- /dev/null +++ b/v0.6.17/examples/forwarddiff/index.html @@ -0,0 +1,53 @@ + +Polarizability using automatic differentiation · DFTK.jl

    Polarizability using automatic differentiation

    Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.

    using DFTK
    +using LinearAlgebra
    +using ForwardDiff
    +
    +# Construct PlaneWaveBasis given a particular electric field strength
    +# Again we take the example of a Helium atom.
    +function make_basis(ε::T; a=10., Ecut=30) where {T}
    +    lattice=T(a) * I(3)  # lattice is a cube of ``a`` Bohrs
    +    # Helium at the center of the box
    +    atoms     = [ElementPsp(:He; psp=load_psp("hgh/lda/He-q2"))]
    +    positions = [[1/2, 1/2, 1/2]]
    +
    +    model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];
    +                      extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],
    +                      symmetries=false)
    +    PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])  # No k-point sampling on isolated system
    +end
    +
    +# dipole moment of a given density (assuming the current geometry)
    +function dipole(basis, ρ)
    +    @assert isdiag(basis.model.lattice)
    +    a  = basis.model.lattice[1, 1]
    +    rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]
    +    sum(rr .* ρ) * basis.dvol
    +end
    +
    +# Function to compute the dipole for a given field strength
    +function compute_dipole(ε; tol=1e-8, kwargs...)
    +    scfres = self_consistent_field(make_basis(ε; kwargs...); tol)
    +    dipole(scfres.basis, scfres.ρ)
    +end;

    With this in place we can compute the polarizability from finite differences (just like in the previous example):

    polarizability_fd = let
    +    ε = 0.01
    +    (compute_dipole(ε) - compute_dipole(0.0)) / ε
    +end
    1.7735579410519497

    We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.

    polarizability = ForwardDiff.derivative(compute_dipole, 0.0)
    +println()
    +println("Polarizability via ForwardDiff:       $polarizability")
    +println("Polarizability via finite difference: $polarizability_fd")
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -2.770780326942                   -0.52    8.0    175ms
    +  2   -2.772058438809       -2.89       -1.32    1.0    105ms
    +  3   -2.772082982379       -4.61       -2.46    1.0    136ms
    +  4   -2.772083337610       -6.45       -3.18    1.0    108ms
    +  5   -2.772083415374       -7.11       -3.82    2.0    130ms
    +  6   -2.772083417665       -8.64       -4.58    1.0    139ms
    +  7   -2.772083417810       -9.84       -5.58    2.0    127ms
    +  8   -2.772083417810      -13.67       -5.83    1.0    115ms
    +  9   -2.772083417811      -12.58       -6.88    1.0    155ms
    + 10   -2.772083417811      -13.65       -6.91    2.0    143ms
    + 11   -2.772083417811   +  -13.69       -8.29    1.0    128ms
    +
    +Polarizability via ForwardDiff:       1.7725349888405708
    +Polarizability via finite difference: 1.7735579410519497
    diff --git a/v0.6.17/examples/gaas_surface.ipynb b/v0.6.17/examples/gaas_surface.ipynb new file mode 100644 index 0000000000..89968d124e --- /dev/null +++ b/v0.6.17/examples/gaas_surface.ipynb @@ -0,0 +1,226 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Modelling a gallium arsenide surface\n", + "\n", + "This example shows how to use the\n", + "[atomistic simulation environment](https://wiki.fysik.dtu.dk/ase/index.html),\n", + "or ASE for short,\n", + "to set up and run a particular calculation of a gallium arsenide surface.\n", + "ASE is a Python package to simplify the process of setting up,\n", + "running and analysing results from atomistic simulations across different simulation codes.\n", + "By means of [ASEconvert](https://github.com/mfherbst/ASEconvert.jl) it is seamlessly\n", + "integrated with the AtomsBase ecosystem and thus available to DFTK via our own\n", + "AtomsBase integration.\n", + "\n", + "In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Parameters of the calculation. Since this surface is far from easy to converge,\n", + "we made the problem simpler by choosing a smaller `Ecut` and smaller values\n", + "for `n_GaAs` and `n_vacuum`.\n", + "More interesting settings are `Ecut = 15` and `n_GaAs = n_vacuum = 20`." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "miller = (1, 1, 0) # Surface Miller indices\n", + "n_GaAs = 2 # Number of GaAs layers\n", + "n_vacuum = 4 # Number of vacuum layers\n", + "Ecut = 5 # Hartree\n", + "kgrid = (4, 4, 1); # Monkhorst-Pack mesh" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Use ASE to build the structure:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using ASEconvert\n", + "\n", + "a = 5.6537 # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)\n", + "gaas = ase.build.bulk(\"GaAs\", \"zincblende\"; a)\n", + "surface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Get the amount of vacuum in Ångström we need to add" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum\n", + "surface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Write an image of the surface and embed it as a nice illustration:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Python: None" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "ase.io.write(\"surface.png\", surface * pytuple((3, 3, 1)), rotation=\"-90x, 30y, -75z\")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Use the `pyconvert` function from `PythonCall` to convert to an AtomsBase-compatible system.\n", + "These two functions not only support importing ASE atoms into DFTK,\n", + "but a few more third-party data structures as well.\n", + "Typically the imported `atoms` use a bare Coulomb potential,\n", + "such that appropriate pseudopotentials need to be attached in a post-step:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(As₂Ga₂, periodic = TTT):\n bounding_box : [ 3.99777 0 0;\n 0 3.99777 0;\n 0 0 21.2014]u\"Å\"\n\n Atom(Ga, [ 0, 0, 8.48055]u\"Å\")\n Atom(As, [ 3.99777, 1.99888, 9.89397]u\"Å\")\n Atom(Ga, [ 1.99888, 1.99888, 11.3074]u\"Å\")\n Atom(As, [ 1.99888, 6.96512e-16, 12.7208]u\"Å\")\n\n .---------. \n /| | \n * | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | As | \n | | Ga | \n | | | \n | | As \n | | | \n | | | \n Ga| | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | | | \n | .---------. \n |/ / \n *---------* \n" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "system = attach_psp(pyconvert(AbstractSystem, surface);\n", + " Ga=\"hgh/pbe/ga-q3.hgh\",\n", + " As=\"hgh/pbe/as-q5.hgh\")" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We model this surface with (quite large a) temperature of 0.01 Hartree\n", + "to ease convergence. Try lowering the SCF convergence tolerance (`tol`)\n", + "or the `temperature` or try `mixing=KerkerMixing()`\n", + "to see the full challenge of this system." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -16.58948859808 -0.58 5.6 1.24s\n", + " 2 -16.72538984312 -0.87 -1.01 1.0 546ms\n", + " 3 -16.73065359466 -2.28 -1.58 2.4 374ms\n", + " 4 -16.73126036871 -3.22 -2.16 1.1 270ms\n", + " 5 -16.73132755322 -4.17 -2.60 1.8 304ms\n", + " 6 -16.73133536402 -5.11 -2.90 1.9 322ms\n", + " 7 -16.73111519446 + -3.66 -2.64 2.0 349ms\n", + " 8 -16.73113287930 -4.75 -2.62 2.3 348ms\n", + " 9 -16.73120502137 -4.14 -2.72 2.0 326ms\n", + " 10 -16.73132097404 -3.94 -3.12 1.0 244ms\n", + " 11 -16.73133832741 -4.76 -3.56 1.3 265ms\n", + " 12 -16.73133953381 -5.92 -3.84 1.4 274ms\n", + " 13 -16.73133968832 -6.81 -3.91 1.8 305ms\n", + " 14 -16.73134019260 -6.30 -4.60 1.0 244ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],\n", + " temperature=0.001, smearing=DFTK.Smearing.Gaussian())\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "\n", + "scfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 5.8594055 \n AtomicLocal -105.6101639\n AtomicNonlocal 2.3494797 \n Ewald 35.5044300\n PspCorrection 0.2016043 \n Hartree 49.5615728\n Xc -4.5976652\n Entropy -0.0000035\n\n total -16.731340192602" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 7 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/gaas_surface/index.html b/v0.6.17/examples/gaas_surface/index.html new file mode 100644 index 0000000000..070398b349 --- /dev/null +++ b/v0.6.17/examples/gaas_surface/index.html @@ -0,0 +1,82 @@ + +Modelling a gallium arsenide surface · DFTK.jl

    Modelling a gallium arsenide surface

    This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.

    In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.

    Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.

    miller = (1, 1, 0)   # Surface Miller indices
    +n_GaAs = 2           # Number of GaAs layers
    +n_vacuum = 4         # Number of vacuum layers
    +Ecut = 5             # Hartree
    +kgrid = (4, 4, 1);   # Monkhorst-Pack mesh

    Use ASE to build the structure:

    using ASEconvert
    +
    +a = 5.6537  # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)
    +gaas = ase.build.bulk("GaAs", "zincblende"; a)
    +surface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);

    Get the amount of vacuum in Ångström we need to add

    d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum
    +surface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);

    Write an image of the surface and embed it as a nice illustration:

    ase.io.write("surface.png", surface * pytuple((3, 3, 1)), rotation="-90x, 30y, -75z")
    Python: None

    Use the pyconvert function from PythonCall to convert to an AtomsBase-compatible system. These two functions not only support importing ASE atoms into DFTK, but a few more third-party data structures as well. Typically the imported atoms use a bare Coulomb potential, such that appropriate pseudopotentials need to be attached in a post-step:

    using DFTK
    +system = attach_psp(pyconvert(AbstractSystem, surface);
    +                    Ga="hgh/pbe/ga-q3.hgh",
    +                    As="hgh/pbe/as-q5.hgh")
    FlexibleSystem(As₂Ga₂, periodic = TTT):
    +    bounding_box      : [ 3.99777        0        0;
    +                                0  3.99777        0;
    +                                0        0  21.2014]u"Å"
    +
    +    Atom(Ga, [       0,        0,  8.48055]u"Å")
    +    Atom(As, [ 3.99777,  1.99888,  9.89397]u"Å")
    +    Atom(Ga, [ 1.99888,  1.99888,  11.3074]u"Å")
    +    Atom(As, [ 1.99888, 6.96512e-16,  12.7208]u"Å")
    +
    +      .---------.  
    +     /|         |  
    +    * |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |  As     |  
    +    | |   Ga    |  
    +    | |         |  
    +    | |        As  
    +    | |         |  
    +    | |         |  
    +    Ga|         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | |         |  
    +    | .---------.  
    +    |/         /   
    +    *---------*    
    +

    We model this surface with (quite large a) temperature of 0.01 Hartree to ease convergence. Try lowering the SCF convergence tolerance (tol) or the temperature or try mixing=KerkerMixing() to see the full challenge of this system.

    model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],
    +                  temperature=0.001, smearing=DFTK.Smearing.Gaussian())
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +
    +scfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -16.58925300764                   -0.58    5.6    513ms
    +  2   -16.72543768458       -0.87       -1.01    1.0    234ms
    +  3   -16.73064877048       -2.28       -1.58    2.4    294ms
    +  4   -16.73126048023       -3.21       -2.16    1.1    279ms
    +  5   -16.73132798851       -4.17       -2.60    1.7    258ms
    +  6   -16.73133580850       -5.11       -2.91    1.9    265ms
    +  7   -16.73115327161   +   -3.74       -2.68    2.0    291ms
    +  8   -16.73110583641   +   -4.32       -2.60    2.3    280ms
    +  9   -16.73122854438       -3.91       -2.76    2.0    269ms
    + 10   -16.73132208686       -4.03       -3.14    1.0    219ms
    + 11   -16.73133820830       -4.79       -3.56    1.3    229ms
    + 12   -16.73133975370       -5.81       -3.91    1.6    241ms
    + 13   -16.73133977808       -7.61       -3.95    2.1    297ms
    + 14   -16.73134019060       -6.38       -4.57    1.0    217ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             5.8593970 
    +    AtomicLocal         -105.6100271
    +    AtomicNonlocal      2.3494757 
    +    Ewald               35.5044300
    +    PspCorrection       0.2016043 
    +    Hartree             49.5614450
    +    Xc                  -4.5976615
    +    Entropy             -0.0000035
    +
    +    total               -16.731340190598
    diff --git a/v0.6.17/examples/geometry_optimization.ipynb b/v0.6.17/examples/geometry_optimization.ipynb new file mode 100644 index 0000000000..0d8cb09f72 --- /dev/null +++ b/v0.6.17/examples/geometry_optimization.ipynb @@ -0,0 +1,191 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Geometry optimization\n", + "\n", + "We use the DFTK and Optim packages in this example to find the minimal-energy\n", + "bond length of the $H_2$ molecule. We setup $H_2$ in an\n", + "LDA model just like in the Tutorial for silicon." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Optim\n", + "using LinearAlgebra\n", + "using Printf\n", + "\n", + "kgrid = [1, 1, 1] # k-point grid\n", + "Ecut = 5 # kinetic energy cutoff in Hartree\n", + "tol = 1e-8 # tolerance for the optimization routine\n", + "a = 10 # lattice constant in Bohr\n", + "lattice = a * I(3)\n", + "H = ElementPsp(:H; psp=load_psp(\"hgh/lda/h-q1\"));\n", + "atoms = [H, H];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "We define a Bloch wave and a density to be used as global variables so that we\n", + "can transfer the solution from one iteration to another and therefore reduce\n", + "the optimization time." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ψ = nothing\n", + "ρ = nothing" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "First, we create a function that computes the solution associated to the\n", + "position $x ∈ ℝ^6$ of the atoms in reduced coordinates\n", + "(cf. Reduced and cartesian coordinates for more\n", + "details on the coordinates system).\n", + "They are stored as a vector: `x[1:3]` represents the position of the\n", + "first atom and `x[4:6]` the position of the second.\n", + "We also update `ψ` and `ρ` for the next iteration." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function compute_scfres(x)\n", + " model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])\n", + " basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + " global ψ, ρ\n", + " if isnothing(ρ)\n", + " ρ = guess_density(basis)\n", + " end\n", + " is_converged = ScfConvergenceForce(tol / 10)\n", + " scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n", + " ψ = scfres.ψ\n", + " ρ = scfres.ρ\n", + " scfres\n", + "end;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Then, we create the function we want to optimize: `fg!` is used to update the\n", + "value of the objective function `F`, namely the energy, and its gradient `G`,\n", + "here computed with the forces (which are, by definition, the negative gradient\n", + "of the energy)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function fg!(F, G, x)\n", + " scfres = compute_scfres(x)\n", + " if !isnothing(G)\n", + " grad = compute_forces(scfres)\n", + " G .= -[grad[1]; grad[2]]\n", + " end\n", + " scfres.energies.total\n", + "end;" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Now, we can optimize on the 6 parameters `x = [x1, y1, z1, x2, y2, z2]` in\n", + "reduced coordinates, using `LBFGS()`, the default minimization algorithm\n", + "in Optim. We start from `x0`, which is a first guess for the coordinates. By\n", + "default, `optimize` traces the output of the optimization algorithm during the\n", + "iterations. Once we have the minimizer `xmin`, we compute the bond length in\n", + "Cartesian coordinates." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Iter Function value Gradient norm \n", + " 0 -1.061651e+00 6.219313e-01\n", + " * time: 5.1021575927734375e-5\n", + " 1 -1.064073e+00 2.919807e-01\n", + " * time: 4.911370038986206\n", + " 2 -1.066008e+00 4.821012e-02\n", + " * time: 5.582175016403198\n", + " 3 -1.066049e+00 4.314805e-04\n", + " * time: 6.007590055465698\n", + " 4 -1.066049e+00 6.954631e-09\n", + " * time: 6.291849851608276\n", + "\n", + "Optimal bond length for Ecut=5.00: 1.556 Bohr\n" + ] + } + ], + "cell_type": "code", + "source": [ + "x0 = vcat(lattice \\ [0., 0., 0.], lattice \\ [1.4, 0., 0.])\n", + "xres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),\n", + " Optim.Options(; show_trace=true, f_tol=tol))\n", + "xmin = Optim.minimizer(xres)\n", + "dmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])\n", + "@printf \"\\nOptimal bond length for Ecut=%.2f: %.3f Bohr\\n\" Ecut dmin" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "We used here very rough parameters to generate the example and\n", + "setting `Ecut` to 10 Ha yields a bond length of 1.523 Bohr,\n", + "which [agrees with ABINIT](https://docs.abinit.org/tutorial/base1/).\n", + "\n", + "!!! note \"Degrees of freedom\"\n", + " We used here a very general setting where we optimized on the 6 variables\n", + " representing the position of the 2 atoms and it can be easily extended\n", + " to molecules with more atoms (such as $H_2O$). In the particular case\n", + " of $H_2$, we could use only the internal degree of freedom which, in\n", + " this case, is just the bond length." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/geometry_optimization/index.html b/v0.6.17/examples/geometry_optimization/index.html new file mode 100644 index 0000000000..806ce1fa7d --- /dev/null +++ b/v0.6.17/examples/geometry_optimization/index.html @@ -0,0 +1,50 @@ + +Geometry optimization · DFTK.jl

    Geometry optimization

    We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the $H_2$ molecule. We setup $H_2$ in an LDA model just like in the Tutorial for silicon.

    using DFTK
    +using Optim
    +using LinearAlgebra
    +using Printf
    +
    +kgrid = [1, 1, 1]       # k-point grid
    +Ecut = 5                # kinetic energy cutoff in Hartree
    +tol = 1e-8              # tolerance for the optimization routine
    +a = 10                  # lattice constant in Bohr
    +lattice = a * I(3)
    +H = ElementPsp(:H; psp=load_psp("hgh/lda/h-q1"));
    +atoms = [H, H];

    We define a Bloch wave and a density to be used as global variables so that we can transfer the solution from one iteration to another and therefore reduce the optimization time.

    ψ = nothing
    +ρ = nothing

    First, we create a function that computes the solution associated to the position $x ∈ ℝ^6$ of the atoms in reduced coordinates (cf. Reduced and cartesian coordinates for more details on the coordinates system). They are stored as a vector: x[1:3] represents the position of the first atom and x[4:6] the position of the second. We also update ψ and ρ for the next iteration.

    function compute_scfres(x)
    +    model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])
    +    basis = PlaneWaveBasis(model; Ecut, kgrid)
    +    global ψ, ρ
    +    if isnothing(ρ)
    +        ρ = guess_density(basis)
    +    end
    +    is_converged = ScfConvergenceForce(tol / 10)
    +    scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)
    +    ψ = scfres.ψ
    +    ρ = scfres.ρ
    +    scfres
    +end;

    Then, we create the function we want to optimize: fg! is used to update the value of the objective function F, namely the energy, and its gradient G, here computed with the forces (which are, by definition, the negative gradient of the energy).

    function fg!(F, G, x)
    +    scfres = compute_scfres(x)
    +    if !isnothing(G)
    +        grad = compute_forces(scfres)
    +        G .= -[grad[1]; grad[2]]
    +    end
    +    scfres.energies.total
    +end;

    Now, we can optimize on the 6 parameters x = [x1, y1, z1, x2, y2, z2] in reduced coordinates, using LBFGS(), the default minimization algorithm in Optim. We start from x0, which is a first guess for the coordinates. By default, optimize traces the output of the optimization algorithm during the iterations. Once we have the minimizer xmin, we compute the bond length in Cartesian coordinates.

    x0 = vcat(lattice \ [0., 0., 0.], lattice \ [1.4, 0., 0.])
    +xres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),
    +                Optim.Options(; show_trace=true, f_tol=tol))
    +xmin = Optim.minimizer(xres)
    +dmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])
    +@printf "\nOptimal bond length for Ecut=%.2f: %.3f Bohr\n" Ecut dmin
    Iter     Function value   Gradient norm
    +     0    -1.061651e+00     6.219313e-01
    + * time: 4.601478576660156e-5
    +     1    -1.064073e+00     2.919813e-01
    + * time: 0.8897130489349365
    +     2    -1.066008e+00     4.821036e-02
    + * time: 1.5668840408325195
    +     3    -1.066049e+00     4.314863e-04
    + * time: 1.9871180057525635
    +     4    -1.066049e+00     6.954704e-09
    + * time: 2.2946441173553467
    +
    +Optimal bond length for Ecut=5.00: 1.556 Bohr

    We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.

    Degrees of freedom

    We used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as $H_2O$). In the particular case of $H_2$, we could use only the internal degree of freedom which, in this case, is just the bond length.

    diff --git a/v0.6.17/examples/graphene.ipynb b/v0.6.17/examples/graphene.ipynb new file mode 100644 index 0000000000..75de5d73f3 --- /dev/null +++ b/v0.6.17/examples/graphene.ipynb @@ -0,0 +1,379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Graphene band structure" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This example plots the band structure of graphene, a 2D material. 2D band\n", + "structures are not supported natively (yet), so we manually build a custom\n", + "path in reciprocal space." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -11.15665333628 -0.60 6.3 305ms\n", + " 2 -11.16021030586 -2.45 -1.30 1.0 138ms\n", + " 3 -11.16039679634 -3.73 -2.34 2.1 160ms\n", + " 4 -11.16041655201 -4.70 -3.24 2.3 189ms\n", + " 5 -11.16041703801 -6.31 -3.39 2.3 179ms\n", + " 6 -11.16041704589 -8.10 -3.53 1.0 121ms\n", + " 7 -11.16041704835 -8.61 -3.72 1.0 119ms\n", + " 8 -11.16041705035 -8.70 -4.10 1.0 120ms\n", + " 9 -11.16041705116 -9.09 -4.53 1.4 133ms\n", + " 10 -11.16041705138 -9.65 -4.97 1.4 137ms\n", + " 11 -11.16041705144 -10.23 -5.53 2.0 158ms\n", + " 12 -11.16041705145 -11.13 -5.85 2.0 186ms\n", + " 13 -11.16041705145 -12.02 -6.43 1.9 154ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=25}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "using LinearAlgebra\n", + "using Plots\n", + "\n", + "# Define the convergence parameters (these should be increased in production)\n", + "L = 20 # height of the simulation box\n", + "kgrid = [6, 6, 1]\n", + "Ecut = 15\n", + "temperature = 1e-3\n", + "\n", + "# Define the geometry and pseudopotential\n", + "a = 4.66 # lattice constant\n", + "a1 = a*[1/2,-sqrt(3)/2, 0]\n", + "a2 = a*[1/2, sqrt(3)/2, 0]\n", + "a3 = L*[0 , 0 , 1]\n", + "lattice = [a1 a2 a3]\n", + "C1 = [1/3,-1/3,0.0] # in reduced coordinates\n", + "C2 = -C1\n", + "positions = [C1, C2]\n", + "C = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\n", + "atoms = [C, C]\n", + "\n", + "# Run SCF\n", + "model = model_PBE(lattice, atoms, positions; temperature)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "scfres = self_consistent_field(basis)\n", + "\n", + "# Construct 2D path through Brillouin zone\n", + "kpath = irrfbz_path(model; dim=2, space_group_number=13) # graphene space group number\n", + "bands = compute_bands(scfres, kpath; kline_density=20)\n", + "plot_bandstructure(bands)" + ], + "metadata": {}, + "execution_count": 1 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/graphene/171ec854.svg b/v0.6.17/examples/graphene/5f945849.svg similarity index 80% rename from dev/examples/graphene/171ec854.svg rename to v0.6.17/examples/graphene/5f945849.svg index 2b1a3a5206..d87bef353b 100644 --- a/dev/examples/graphene/171ec854.svg +++ b/v0.6.17/examples/graphene/5f945849.svg @@ -1,134 +1,134 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/graphene/index.html b/v0.6.17/examples/graphene/index.html new file mode 100644 index 0000000000..6b8fbebb25 --- /dev/null +++ b/v0.6.17/examples/graphene/index.html @@ -0,0 +1,34 @@ + +Graphene band structure · DFTK.jl

    Graphene band structure

    This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.

    using DFTK
    +using Unitful
    +using UnitfulAtomic
    +using LinearAlgebra
    +using Plots
    +
    +# Define the convergence parameters (these should be increased in production)
    +L = 20  # height of the simulation box
    +kgrid = [6, 6, 1]
    +Ecut = 15
    +temperature = 1e-3
    +
    +# Define the geometry and pseudopotential
    +a = 4.66  # lattice constant
    +a1 = a*[1/2,-sqrt(3)/2, 0]
    +a2 = a*[1/2, sqrt(3)/2, 0]
    +a3 = L*[0  , 0        , 1]
    +lattice = [a1 a2 a3]
    +C1 = [1/3,-1/3,0.0]  # in reduced coordinates
    +C2 = -C1
    +positions = [C1, C2]
    +C = ElementPsp(:C; psp=load_psp("hgh/pbe/c-q4"))
    +atoms = [C, C]
    +
    +# Run SCF
    +model = model_PBE(lattice, atoms, positions; temperature)
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +scfres = self_consistent_field(basis)
    +
    +# Construct 2D path through Brillouin zone
    +kpath = irrfbz_path(model; dim=2, space_group_number=13)  # graphene space group number
    +bands = compute_bands(scfres, kpath; kline_density=20)
    +plot_bandstructure(bands)
    Example block output
    diff --git a/v0.6.17/examples/gross_pitaevskii.ipynb b/v0.6.17/examples/gross_pitaevskii.ipynb new file mode 100644 index 0000000000..307353f208 --- /dev/null +++ b/v0.6.17/examples/gross_pitaevskii.ipynb @@ -0,0 +1,538 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Gross-Pitaevskii equation in one dimension\n", + "In this example we will use DFTK to solve\n", + "the Gross-Pitaevskii equation, and use this opportunity to explore a few internals." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## The model\n", + "The [Gross-Pitaevskii equation](https://en.wikipedia.org/wiki/Gross%E2%80%93Pitaevskii_equation) (GPE)\n", + "is a simple non-linear equation used to model bosonic systems\n", + "in a mean-field approach. Denoting by $ψ$ the effective one-particle bosonic\n", + "wave function, the time-independent GPE reads in atomic units:\n", + "$$\n", + " H ψ = \\left(-\\frac12 Δ + V + 2 C |ψ|^2\\right) ψ = μ ψ \\qquad \\|ψ\\|_{L^2} = 1\n", + "$$\n", + "where $C$ provides the strength of the boson-boson coupling.\n", + "It's in particular a favorite model of applied mathematicians because it\n", + "has a structure simpler than but similar to that of DFT, and displays\n", + "interesting behavior (especially in higher dimensions with magnetic fields, see\n", + "Gross-Pitaevskii equation with external magnetic field)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We wish to model this equation in 1D using DFTK.\n", + "First we set up the lattice. For a 1D case we supply two zero lattice vectors," + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "a = 10\n", + "lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "which is special cased in DFTK to support 1D models.\n", + "\n", + "For the potential term `V` we pick a harmonic\n", + "potential. We use the function `ExternalFromReal` which uses\n", + "cartesian coordinates ( see Lattices and lattice vectors)." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "pot(x) = (x - a/2)^2;" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "We setup each energy term in sequence: kinetic, potential and nonlinear term.\n", + "For the non-linearity we use the `LocalNonlinearity(f)` term of DFTK, with f(ρ) = C ρ^α.\n", + "This object introduces an energy term $C ∫ ρ(r)^α dr$\n", + "to the total energy functional, thus a potential term $α C ρ^{α-1}$.\n", + "In our case we thus need the parameters" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "C = 1.0\n", + "α = 2;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "… and with this build the model" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "\n", + "n_electrons = 1 # Increase this for fun\n", + "terms = [Kinetic(),\n", + " ExternalFromReal(r -> pot(r[1])),\n", + " LocalNonlinearity(ρ -> C * ρ^α),\n", + "]\n", + "model = Model(lattice; n_electrons, terms, spin_polarization=:spinless); # spinless electrons" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "We discretize using a moderate Ecut (For 1D values up to `5000` are completely fine)\n", + "and run a direct minimization algorithm:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +173.2814463049 -2.58 353ms\n", + " 2 +126.7210109547 1.67 -0.91 1.52ms\n", + " 3 +34.04477195676 1.97 -0.52 1.67ms\n", + " 4 +30.06959035600 0.60 -0.41 1.31ms\n", + " 5 +23.09507457463 0.84 -0.40 1.03ms\n", + " 6 +7.904247076061 1.18 -0.33 972μs\n", + " 7 +3.561393690562 0.64 -0.33 972μs\n", + " 8 +2.797347737158 -0.12 -0.19 809μs\n", + " 9 +1.938274316764 -0.07 -0.21 835μs\n", + " 10 +1.722523264565 -0.67 -0.18 806μs\n", + " 11 +1.468438639211 -0.60 -0.42 640μs\n", + " 12 +1.361578420460 -0.97 -0.44 650μs\n", + " 13 +1.273299697771 -1.05 -0.38 654μs\n", + " 14 +1.194377664890 -1.10 -1.00 633μs\n", + " 15 +1.162735829289 -1.50 -1.43 680μs\n", + " 16 +1.149062733606 -1.86 -1.41 637μs\n", + " 17 +1.145501294218 -2.45 -1.98 634μs\n", + " 18 +1.144520853337 -3.01 -2.37 644μs\n", + " 19 +1.144308362815 -3.67 -2.29 474μs\n", + " 20 +1.144241227562 -4.17 -2.07 637μs\n", + " 21 +1.144074732637 -3.78 -2.54 471μs\n", + " 22 +1.144048809317 -4.59 -2.98 694μs\n", + " 23 +1.144045556927 -5.49 -3.02 635μs\n", + " 24 +1.144041262492 -5.37 -3.20 637μs\n", + " 25 +1.144038046351 -5.49 -3.09 635μs\n", + " 26 +1.144037368537 -6.17 -3.53 675μs\n", + " 27 +1.144037144407 -6.65 -4.04 639μs\n", + " 28 +1.144036995888 -6.83 -3.92 673μs\n", + " 29 +1.144036984727 -7.95 -3.90 533μs\n", + " 30 +1.144036901817 -7.08 -4.45 642μs\n", + " 31 +1.144036874391 -7.56 -4.05 633μs\n", + " 32 +1.144036855734 -7.73 -3.65 637μs\n", + " 33 +1.144036854891 -9.07 -5.20 466μs\n", + " 34 +1.144036854536 -9.45 -5.91 470μs\n", + " 35 +1.144036854173 -9.44 -4.93 658μs\n", + " 36 +1.144036853232 -9.03 -5.15 637μs\n", + " 37 +1.144036852897 -9.47 -5.27 629μs\n", + " 38 +1.144036852798 -10.00 -5.86 632μs\n", + " 39 +1.144036852776 -10.66 -5.68 641μs\n", + " 40 +1.144036852762 -10.86 -5.77 625μs\n", + " 41 +1.144036852758 -11.42 -6.46 486μs\n", + " 42 +1.144036852756 -11.78 -7.34 641μs\n", + " 43 +1.144036852756 -12.21 -6.52 627μs\n", + " 44 +1.144036852756 -12.86 -6.34 628μs\n", + " 45 +1.144036852756 -13.41 -6.88 472μs\n", + " 46 +1.144036852755 -12.86 -7.23 462μs\n", + " 47 +1.144036852755 -14.48 -7.77 623μs\n", + " 48 +1.144036852755 -14.14 -7.99 653μs\n", + " 49 +1.144036852755 -14.75 -8.23 636μs\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.2682057 \n ExternalFromReal 0.4707475 \n LocalNonlinearity 0.4050836 \n\n total 1.144036852755 " + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))\n", + "scfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS\n", + "scfres.energies" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "## Internals\n", + "We use the opportunity to explore some of DFTK internals.\n", + "\n", + "Extract the converged density and the obtained wave function:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ρ = real(scfres.ρ)[:, 1, 1, 1] # converged density, first spin component\n", + "ψ_fourier = scfres.ψ[1][:, 1]; # first k-point, all G components, first eigenvector" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Transform the wave function to real space and fix the phase:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\n", + "ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Check whether $ψ$ is normalised:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "x = a * vec(first.(DFTK.r_vectors(basis)))\n", + "N = length(x)\n", + "dx = a / N # real-space grid spacing\n", + "@assert sum(abs2.(ψ)) * dx ≈ 1.0" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "The density is simply built from ψ:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "1.0723527077550007e-15" + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "norm(scfres.ρ - abs2.(ψ))" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "We summarize the ground state in a nice plot:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=3}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "\n", + "p = plot(x, real.(ψ), label=\"real(ψ)\")\n", + "plot!(p, x, imag.(ψ), label=\"imag(ψ)\")\n", + "plot!(p, x, ρ, label=\"ρ\")" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "The `energy_hamiltonian` function can be used to get the energy and\n", + "effective Hamiltonian (derivative of the energy with respect to the density matrix)\n", + "of a particular state (ψ, occupation).\n", + "The density ρ associated to this state is precomputed\n", + "and passed to the routine as an optimization." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)\n", + "@assert E.total == scfres.energies.total" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "Now the Hamiltonian contains all the blocks corresponding to $k$-points. Here, we just\n", + "have one $k$-point:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "H = ham.blocks[1];" + ], + "metadata": {}, + "execution_count": 12 + }, + { + "cell_type": "markdown", + "source": [ + "`H` can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector\n", + "Hmat = Array(H) # This is now just a plain Julia matrix,\n", + "# which we can compute and store in this simple 1D example\n", + "@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10" + ], + "metadata": {}, + "execution_count": 13 + }, + { + "cell_type": "markdown", + "source": [ + "Let's check that ψ11 is indeed an eigenstate:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2.3515220655416577e-7" + }, + "metadata": {}, + "execution_count": 14 + } + ], + "cell_type": "code", + "source": [ + "norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)" + ], + "metadata": {}, + "execution_count": 14 + }, + { + "cell_type": "markdown", + "source": [ + "Build a finite-differences version of the GPE operator $H$, as a sanity check:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "0.00022342979420322736" + }, + "metadata": {}, + "execution_count": 15 + } + ], + "cell_type": "code", + "source": [ + "A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))\n", + "A[1, end] = A[end, 1] = -1\n", + "K = A / dx^2 / 2\n", + "V = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))\n", + "H_findiff = K + V;\n", + "maximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))" + ], + "metadata": {}, + "execution_count": 15 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/gross_pitaevskii/5bcd81c8.svg b/v0.6.17/examples/gross_pitaevskii/5bcd81c8.svg new file mode 100644 index 0000000000..b03b54b3a3 --- /dev/null +++ b/v0.6.17/examples/gross_pitaevskii/5bcd81c8.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/gross_pitaevskii/index.html b/v0.6.17/examples/gross_pitaevskii/index.html new file mode 100644 index 0000000000..817758261a --- /dev/null +++ b/v0.6.17/examples/gross_pitaevskii/index.html @@ -0,0 +1,37 @@ + +Gross-Pitaevskii equation in one dimension · DFTK.jl

    Gross-Pitaevskii equation in one dimension

    In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.

    The model

    The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by $ψ$ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:

    \[ H ψ = \left(-\frac12 Δ + V + 2 C |ψ|^2\right) ψ = μ ψ \qquad \|ψ\|_{L^2} = 1\]

    where $C$ provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).

    We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,

    a = 10
    +lattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];

    which is special cased in DFTK to support 1D models.

    For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).

    pot(x) = (x - a/2)^2;

    We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term $C ∫ ρ(r)^α dr$ to the total energy functional, thus a potential term $α C ρ^{α-1}$. In our case we thus need the parameters

    C = 1.0
    +α = 2;

    … and with this build the model

    using DFTK
    +using LinearAlgebra
    +
    +n_electrons = 1  # Increase this for fun
    +terms = [Kinetic(),
    +         ExternalFromReal(r -> pot(r[1])),
    +         LocalNonlinearity(ρ -> C * ρ^α),
    +]
    +model = Model(lattice; n_electrons, terms, spin_polarization=:spinless);  # spinless electrons

    We discretize using a moderate Ecut (For 1D values up to 5000 are completely fine) and run a direct minimization algorithm:

    basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))
    +scfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS
    +scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             0.2682057 
    +    ExternalFromReal    0.4707475 
    +    LocalNonlinearity   0.4050836 
    +
    +    total               1.144036852755 

    Internals

    We use the opportunity to explore some of DFTK internals.

    Extract the converged density and the obtained wave function:

    ρ = real(scfres.ρ)[:, 1, 1, 1]  # converged density, first spin component
    +ψ_fourier = scfres.ψ[1][:, 1];    # first k-point, all G components, first eigenvector

    Transform the wave function to real space and fix the phase:

    ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]
    +ψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));

    Check whether $ψ$ is normalised:

    x = a * vec(first.(DFTK.r_vectors(basis)))
    +N = length(x)
    +dx = a / N  # real-space grid spacing
    +@assert sum(abs2.(ψ)) * dx ≈ 1.0

    The density is simply built from ψ:

    norm(scfres.ρ - abs2.(ψ))
    1.1584903582408719e-15

    We summarize the ground state in a nice plot:

    using Plots
    +
    +p = plot(x, real.(ψ), label="real(ψ)")
    +plot!(p, x, imag.(ψ), label="imag(ψ)")
    +plot!(p, x, ρ, label="ρ")
    Example block output

    The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.

    E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)
    +@assert E.total == scfres.energies.total

    Now the Hamiltonian contains all the blocks corresponding to $k$-points. Here, we just have one $k$-point:

    H = ham.blocks[1];

    H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:

    ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector
    +Hmat = Array(H)  # This is now just a plain Julia matrix,
    +#                  which we can compute and store in this simple 1D example
    +@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10

    Let's check that ψ11 is indeed an eigenstate:

    norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)
    2.925577134877447e-7

    Build a finite-differences version of the GPE operator $H$, as a sanity check:

    A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))
    +A[1, end] = A[end, 1] = -1
    +K = A / dx^2 / 2
    +V = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))
    +H_findiff = K + V;
    +maximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))
    0.00022344060666504905
    diff --git a/v0.6.17/examples/gross_pitaevskii_2D.ipynb b/v0.6.17/examples/gross_pitaevskii_2D.ipynb new file mode 100644 index 0000000000..34c54fd77b --- /dev/null +++ b/v0.6.17/examples/gross_pitaevskii_2D.ipynb @@ -0,0 +1,1755 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Gross-Pitaevskii equation with external magnetic field" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We solve the 2D Gross-Pitaevskii equation with a magnetic field.\n", + "This is similar to the\n", + "previous example (Gross-Pitaevskii equation in one dimension),\n", + "but with an extra term for the magnetic field.\n", + "We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Δtime\n", + "--- --------------- --------- --------- ------\n", + " 1 +29.29261710546 -1.32 6.55s\n", + " 2 +20.59043562490 0.94 -0.75 10.5ms\n", + " 3 +14.46990086573 0.79 -0.21 10.4ms\n", + " 4 +11.44024142401 0.48 -0.39 10.4ms\n", + " 5 +10.38693275323 0.02 -0.71 8.42ms\n", + " 6 +9.713150258236 -0.17 -0.82 8.36ms\n", + " 7 +9.136330584109 -0.24 -1.00 8.40ms\n", + " 8 +8.618157435745 -0.29 -0.96 8.51ms\n", + " 9 +8.259323193632 -0.45 -0.94 8.35ms\n", + " 10 +8.090500748410 -0.77 -0.98 8.41ms\n", + " 11 +7.994504820458 -1.02 -0.95 8.34ms\n", + " 12 +7.976946053170 -1.76 -1.03 6.35ms\n", + " 13 +7.916587160084 -1.22 -1.07 6.45ms\n", + " 14 +7.858569704962 -1.24 -1.06 6.40ms\n", + " 15 +7.812963569915 -1.34 -0.93 8.54ms\n", + " 16 +7.786482550135 -1.58 -1.15 6.60ms\n", + " 17 +7.774156752946 -1.91 -1.20 6.45ms\n", + " 18 +7.748384899239 -1.59 -1.15 8.39ms\n", + " 19 +7.743654680300 -2.33 -1.19 6.43ms\n", + " 20 +7.735328617541 -2.08 -1.24 6.36ms\n", + " 21 +7.721836296039 -1.87 -1.30 6.39ms\n", + " 22 +7.709368431166 -1.90 -1.21 8.46ms\n", + " 23 +7.698148412127 -1.95 -1.17 6.49ms\n", + " 24 +7.685633462554 -1.90 -1.26 6.47ms\n", + " 25 +7.676087225295 -2.02 -1.35 6.42ms\n", + " 26 +7.670960227885 -2.29 -1.40 36.0ms\n", + " 27 +7.662741671977 -2.09 -1.23 9.01ms\n", + " 28 +7.655998837311 -2.17 -1.28 8.64ms\n", + " 29 +7.653665449286 -2.63 -1.48 6.70ms\n", + " 30 +7.648026542391 -2.25 -1.32 8.58ms\n", + " 31 +7.647449008892 -3.24 -1.43 6.61ms\n", + " 32 +7.645146293433 -2.64 -1.54 6.64ms\n", + " 33 +7.644403409099 -3.13 -1.65 6.58ms\n", + " 34 +7.640935780598 -2.46 -1.37 8.72ms\n", + " 35 +7.638663260315 -2.64 -1.63 6.74ms\n", + " 36 +7.637013003677 -2.78 -1.63 6.58ms\n", + " 37 +7.636791509197 -3.65 -1.62 6.44ms\n", + " 38 +7.636336744386 -3.34 -1.72 6.50ms\n", + " 39 +7.636250251753 -4.06 -1.78 6.46ms\n", + " 40 +7.636118428731 -3.88 -1.61 6.48ms\n", + " 41 +7.634494031976 -2.79 -1.80 6.48ms\n", + " 42 +7.633721292659 -3.11 -1.71 6.69ms\n", + " 43 +7.633522424683 -3.70 -1.76 6.61ms\n", + " 44 +7.633448309025 -4.13 -1.76 6.58ms\n", + " 45 +7.632072874344 -2.86 -1.95 6.58ms\n", + " 46 +7.631438413025 -3.20 -1.76 6.54ms\n", + " 47 +7.630187873138 -2.90 -1.75 8.54ms\n", + " 48 +7.629231580081 -3.02 -1.79 8.70ms\n", + " 49 +7.629216887222 -4.83 -1.90 6.56ms\n", + " 50 +7.628675472934 -3.27 -1.91 8.54ms\n", + " 51 +7.628096777994 -3.24 -1.76 8.54ms\n", + " 52 +7.627872967118 -3.65 -2.11 6.55ms\n", + " 53 +7.627728076363 -3.84 -1.96 6.51ms\n", + " 54 +7.627622342642 -3.98 -1.96 6.54ms\n", + " 55 +7.627194693345 -3.37 -1.87 8.60ms\n", + " 56 +7.626876928031 -3.50 -2.14 6.52ms\n", + " 57 +7.626484075302 -3.41 -1.85 6.59ms\n", + " 58 +7.626362470606 -3.92 -2.16 6.59ms\n", + " 59 +7.626040151053 -3.49 -2.25 6.56ms\n", + " 60 +7.625916636394 -3.91 -1.73 6.46ms\n", + " 61 +7.625663327203 -3.60 -2.12 6.44ms\n", + " 62 +7.625396626401 -3.57 -2.07 6.40ms\n", + " 63 +7.625011756761 -3.41 -2.06 6.37ms\n", + " 64 +7.624633531439 -3.42 -1.67 8.76ms\n", + " 65 +7.624274163850 -3.44 -1.55 9.58ms\n", + " 66 +7.624118227003 -3.81 -1.94 7.38ms\n", + " 67 +7.623942699653 -3.76 -1.99 7.27ms\n", + " 68 +7.623890222657 -4.28 -1.78 27.9ms\n", + " 69 +7.623548674609 -3.47 -1.67 8.94ms\n", + " 70 +7.623363534442 -3.73 -2.02 6.55ms\n", + " 71 +7.623105044778 -3.59 -1.66 8.43ms\n", + " 72 +7.622949321559 -3.81 -1.97 6.43ms\n", + " 73 +7.622858086175 -4.04 -1.71 6.46ms\n", + " 74 +7.622632713535 -3.65 -1.81 8.41ms\n", + " 75 +7.622465677995 -3.78 -2.19 6.43ms\n", + " 76 +7.622186481851 -3.55 -2.08 6.39ms\n", + " 77 +7.621687081193 -3.30 -1.70 8.40ms\n", + " 78 +7.621506957495 -3.74 -1.65 6.46ms\n", + " 79 +7.621131293980 -3.43 -1.56 8.44ms\n", + " 80 +7.620578917594 -3.26 -1.93 6.37ms\n", + " 81 +7.620355594497 -3.65 -1.76 6.40ms\n", + " 82 +7.620015428457 -3.47 -1.93 6.41ms\n", + " 83 +7.619762190391 -3.60 -1.66 6.40ms\n", + " 84 +7.619204066887 -3.25 -1.52 8.50ms\n", + " 85 +7.619127801651 -4.12 -1.86 6.45ms\n", + " 86 +7.618694351924 -3.36 -1.85 6.43ms\n", + " 87 +7.618154997520 -3.27 -1.65 8.61ms\n", + " 88 +7.617405021987 -3.12 -2.10 6.49ms\n", + " 89 +7.616609978538 -3.10 -1.50 8.54ms\n", + " 90 +7.616045942817 -3.25 -1.76 8.64ms\n", + " 91 +7.615679946127 -3.44 -1.84 6.56ms\n", + " 92 +7.615143994761 -3.27 -1.57 8.60ms\n", + " 93 +7.614803318262 -3.47 -1.82 6.50ms\n", + " 94 +7.614463205677 -3.47 -1.73 6.47ms\n", + " 95 +7.614314671878 -3.83 -1.74 6.53ms\n", + " 96 +7.613437093937 -3.06 -1.37 8.52ms\n", + " 97 +7.612777203963 -3.18 -1.63 8.67ms\n", + " 98 +7.612209343983 -3.25 -1.74 6.67ms\n", + " 99 +7.611436300069 -3.11 -1.81 6.50ms\n", + " 100 +7.610915000802 -3.28 -1.86 8.65ms\n", + " 101 +7.610347565365 -3.25 -1.99 6.53ms\n", + " 102 +7.609733051808 -3.21 -1.74 8.49ms\n", + " 103 +7.609221993778 -3.29 -1.90 6.43ms\n", + " 104 +7.608987800937 -3.63 -1.90 6.53ms\n", + " 105 +7.608528923406 -3.34 -2.09 6.51ms\n", + " 106 +7.608284734172 -3.61 -1.85 6.75ms\n", + " 107 +7.607935766441 -3.46 -1.98 9.64ms\n", + " 108 +7.607257389387 -3.17 -2.06 7.49ms\n", + " 109 +7.606875588776 -3.42 -2.05 7.33ms\n", + " 110 +7.606679024418 -3.71 -1.78 15.6ms\n", + " 111 +7.606335031908 -3.46 -1.93 6.66ms\n", + " 112 +7.606011998576 -3.49 -1.99 6.56ms\n", + " 113 +7.605997355906 -4.83 -1.98 6.48ms\n", + " 114 +7.605552558522 -3.35 -1.92 6.45ms\n", + " 115 +7.605266812370 -3.54 -1.90 6.46ms\n", + " 116 +7.604842001343 -3.37 -1.98 7.46ms\n", + " 117 +7.604323423310 -3.29 -1.74 8.53ms\n", + " 118 +7.604064146306 -3.59 -1.93 6.59ms\n", + " 119 +7.603685681005 -3.42 -2.12 6.52ms\n", + " 120 +7.603319313823 -3.44 -2.01 6.52ms\n", + " 121 +7.603021290488 -3.53 -1.86 8.46ms\n", + " 122 +7.603018324330 -5.53 -1.87 6.55ms\n", + " 123 +7.602997633826 -4.68 -2.00 6.45ms\n", + " 124 +7.602719717882 -3.56 -1.87 8.41ms\n", + " 125 +7.602421339399 -3.53 -2.07 6.45ms\n", + " 126 +7.602294164691 -3.90 -1.91 6.49ms\n", + " 127 +7.602056973111 -3.62 -2.12 6.78ms\n", + " 128 +7.601899571165 -3.80 -2.13 6.63ms\n", + " 129 +7.601889217571 -4.98 -1.95 6.72ms\n", + " 130 +7.601705081883 -3.73 -2.10 6.57ms\n", + " 131 +7.601571116696 -3.87 -2.06 6.54ms\n", + " 132 +7.601310426873 -3.58 -2.25 6.55ms\n", + " 133 +7.601018730331 -3.54 -1.93 8.53ms\n", + " 134 +7.600845085537 -3.76 -1.91 8.54ms\n", + " 135 +7.600710390760 -3.87 -2.18 6.73ms\n", + " 136 +7.600550403570 -3.80 -2.26 6.57ms\n", + " 137 +7.600383156917 -3.78 -1.88 8.47ms\n", + " 138 +7.600377709424 -5.26 -2.03 6.44ms\n", + " 139 +7.600296100974 -4.09 -2.03 6.45ms\n", + " 140 +7.600033875397 -3.58 -1.55 8.48ms\n", + " 141 +7.599912832179 -3.92 -1.76 6.50ms\n", + " 142 +7.599710374711 -3.69 -1.67 8.44ms\n", + " 143 +7.599486471982 -3.65 -2.01 6.40ms\n", + " 144 +7.599228793198 -3.59 -2.07 6.41ms\n", + " 145 +7.599022811281 -3.69 -2.02 6.47ms\n", + " 146 +7.598920842281 -3.99 -1.75 6.39ms\n", + " 147 +7.598687466063 -3.63 -2.06 6.39ms\n", + " 148 +7.598591674183 -4.02 -1.87 6.37ms\n", + " 149 +7.598415292550 -3.75 -1.59 8.77ms\n", + " 150 +7.598161997363 -3.60 -2.06 7.21ms\n", + " 151 +7.597966108173 -3.71 -1.94 9.52ms\n", + " 152 +7.597791694536 -3.76 -2.10 15.3ms\n", + " 153 +7.597714942071 -4.11 -2.04 6.53ms\n", + " 154 +7.597621581349 -4.03 -2.09 6.48ms\n", + " 155 +7.597545931919 -4.12 -2.01 6.55ms\n", + " 156 +7.597443639088 -3.99 -1.83 6.45ms\n", + " 157 +7.597296124302 -3.83 -2.01 6.43ms\n", + " 158 +7.597029992490 -3.57 -2.08 6.42ms\n", + " 159 +7.596936874733 -4.03 -1.94 6.45ms\n", + " 160 +7.596747357633 -3.72 -1.98 8.38ms\n", + " 161 +7.596626959388 -3.92 -2.29 6.38ms\n", + " 162 +7.596504313693 -3.91 -2.06 8.42ms\n", + " 163 +7.596464542801 -4.40 -2.16 6.36ms\n", + " 164 +7.596346456632 -3.93 -1.91 8.36ms\n", + " 165 +7.596209183043 -3.86 -1.62 8.38ms\n", + " 166 +7.596197285875 -4.92 -1.68 6.40ms\n", + " 167 +7.596073233906 -3.91 -2.03 6.38ms\n", + " 168 +7.595972291176 -4.00 -1.95 6.39ms\n", + " 169 +7.595828952937 -3.84 -2.06 6.43ms\n", + " 170 +7.595692977756 -3.87 -1.75 8.42ms\n", + " 171 +7.595542379878 -3.82 -1.84 8.41ms\n", + " 172 +7.595422927587 -3.92 -1.93 8.39ms\n", + " 173 +7.595410139841 -4.89 -2.10 6.39ms\n", + " 174 +7.595305673948 -3.98 -1.78 8.43ms\n", + " 175 +7.595256414550 -4.31 -2.30 6.37ms\n", + " 176 +7.595188643805 -4.17 -2.26 8.48ms\n", + " 177 +7.595080172962 -3.96 -2.06 6.41ms\n", + " 178 +7.594981183852 -4.00 -2.03 8.42ms\n", + " 179 +7.594970950889 -4.99 -1.84 6.47ms\n", + " 180 +7.594865982958 -3.98 -2.19 6.43ms\n", + " 181 +7.594854252472 -4.93 -2.25 6.42ms\n", + " 182 +7.594696963489 -3.80 -2.45 6.46ms\n", + " 183 +7.594598881003 -4.01 -2.12 6.53ms\n", + " 184 +7.594562530484 -4.44 -1.99 6.62ms\n", + " 185 +7.594454600311 -3.97 -2.10 8.40ms\n", + " 186 +7.594402929579 -4.29 -1.98 6.44ms\n", + " 187 +7.594288239568 -3.94 -2.42 6.44ms\n", + " 188 +7.594177696200 -3.96 -2.16 6.43ms\n", + " 189 +7.594112656749 -4.19 -2.31 6.54ms\n", + " 190 +7.593946384603 -3.78 -1.84 8.42ms\n", + " 191 +7.593892812767 -4.27 -2.22 6.95ms\n", + " 192 +7.593883813210 -5.05 -1.96 7.26ms\n", + " 193 +7.593771643822 -3.95 -2.22 7.32ms\n", + " 194 +7.593657933392 -3.94 -2.23 16.0ms\n", + " 195 +7.593526370634 -3.88 -1.83 8.80ms\n", + " 196 +7.593469634024 -4.25 -2.30 6.56ms\n", + " 197 +7.593455305766 -4.84 -1.94 6.50ms\n", + " 198 +7.593385804733 -4.16 -2.26 8.49ms\n", + " 199 +7.593363529622 -4.65 -2.20 6.50ms\n", + " 200 +7.593310136365 -4.27 -2.18 8.55ms\n", + " 201 +7.593262106200 -4.32 -2.24 6.50ms\n", + " 202 +7.593150570127 -3.95 -2.40 6.42ms\n", + " 203 +7.593071908566 -4.10 -2.16 8.60ms\n", + " 204 +7.593030476218 -4.38 -2.34 6.48ms\n", + " 205 +7.593003155441 -4.56 -2.53 6.47ms\n", + " 206 +7.592975807445 -4.56 -2.64 6.53ms\n", + " 207 +7.592950315233 -4.59 -2.51 6.51ms\n", + " 208 +7.592939098703 -4.95 -2.30 6.42ms\n", + " 209 +7.592928496640 -4.97 -2.51 6.41ms\n", + " 210 +7.592905881836 -4.65 -2.29 6.43ms\n", + " 211 +7.592881198910 -4.61 -2.67 6.63ms\n", + " 212 +7.592865256326 -4.80 -2.35 6.54ms\n", + " 213 +7.592838835051 -4.58 -2.48 6.60ms\n", + " 214 +7.592803640561 -4.45 -2.56 6.49ms\n", + " 215 +7.592773147223 -4.52 -2.43 8.49ms\n", + " 216 +7.592764865312 -5.08 -2.50 6.57ms\n", + " 217 +7.592749784464 -4.82 -2.65 6.64ms\n", + " 218 +7.592732872800 -4.77 -2.69 6.52ms\n", + " 219 +7.592701754904 -4.51 -2.38 8.64ms\n", + " 220 +7.592684581182 -4.77 -2.36 8.59ms\n", + " 221 +7.592664834432 -4.70 -2.38 8.49ms\n", + " 222 +7.592655721218 -5.04 -2.67 6.51ms\n", + " 223 +7.592635073786 -4.69 -2.19 8.46ms\n", + " 224 +7.592630510334 -5.34 -2.33 6.44ms\n", + " 225 +7.592625309044 -5.28 -2.58 6.42ms\n", + " 226 +7.592611803148 -4.87 -2.88 6.47ms\n", + " 227 +7.592595683738 -4.79 -2.37 6.39ms\n", + " 228 +7.592583533329 -4.92 -2.59 8.40ms\n", + " 229 +7.592572799395 -4.97 -2.72 6.40ms\n", + " 230 +7.592561888459 -4.96 -2.76 6.37ms\n", + " 231 +7.592557392813 -5.35 -2.78 6.39ms\n", + " 232 +7.592550673201 -5.17 -2.87 6.37ms\n", + " 233 +7.592543971252 -5.17 -2.76 8.60ms\n", + " 234 +7.592539924267 -5.39 -2.88 7.22ms\n", + " 235 +7.592534464632 -5.26 -2.69 9.42ms\n", + " 236 +7.592531077356 -5.47 -2.66 27.4ms\n", + " 237 +7.592529146643 -5.71 -2.62 10.0ms\n", + " 238 +7.592524267839 -5.31 -2.57 9.66ms\n", + " 239 +7.592519622385 -5.33 -2.85 8.32ms\n", + " 240 +7.592514612827 -5.30 -2.84 6.51ms\n", + " 241 +7.592513486326 -5.95 -2.84 6.51ms\n", + " 242 +7.592511001611 -5.60 -2.90 6.51ms\n", + " 243 +7.592507461927 -5.45 -2.96 6.41ms\n", + " 244 +7.592504351312 -5.51 -2.99 6.40ms\n", + " 245 +7.592499170520 -5.29 -2.82 6.38ms\n", + " 246 +7.592494803482 -5.36 -2.88 6.40ms\n", + " 247 +7.592490421527 -5.36 -2.85 8.40ms\n", + " 248 +7.592486657258 -5.42 -2.80 8.37ms\n", + " 249 +7.592483480987 -5.50 -2.76 8.37ms\n", + " 250 +7.592481930555 -5.81 -2.92 6.37ms\n", + " 251 +7.592479945706 -5.70 -2.83 6.38ms\n", + " 252 +7.592476655597 -5.48 -2.61 8.41ms\n", + " 253 +7.592475882718 -6.11 -2.79 6.43ms\n", + " 254 +7.592474042538 -5.74 -3.01 6.43ms\n", + " 255 +7.592473527673 -6.29 -3.02 6.41ms\n", + " 256 +7.592472623243 -6.04 -2.85 6.44ms\n", + " 257 +7.592470904691 -5.76 -3.09 6.42ms\n", + " 258 +7.592468675565 -5.65 -3.13 6.40ms\n", + " 259 +7.592466185369 -5.60 -3.04 6.50ms\n", + " 260 +7.592465194712 -6.00 -2.89 6.41ms\n", + " 261 +7.592462582080 -5.58 -3.08 6.41ms\n", + " 262 +7.592460512520 -5.68 -3.02 6.47ms\n", + " 263 +7.592459435997 -5.97 -3.20 6.56ms\n", + " 264 +7.592456335625 -5.51 -2.86 8.50ms\n", + " 265 +7.592455434737 -6.05 -3.03 6.44ms\n", + " 266 +7.592453293679 -5.67 -2.83 8.58ms\n", + " 267 +7.592450545798 -5.56 -2.68 8.57ms\n", + " 268 +7.592449983809 -6.25 -2.90 6.45ms\n", + " 269 +7.592448605331 -5.86 -2.95 6.59ms\n", + " 270 +7.592448494974 -6.96 -2.82 6.46ms\n", + " 271 +7.592447728723 -6.12 -2.57 6.50ms\n", + " 272 +7.592446424700 -5.88 -2.84 6.49ms\n", + " 273 +7.592444696110 -5.76 -2.80 6.39ms\n", + " 274 +7.592441988245 -5.57 -2.82 8.37ms\n", + " 275 +7.592439621610 -5.63 -3.08 6.44ms\n", + " 276 +7.592439546653 -7.13 -2.95 6.76ms\n", + " 277 +7.592436043878 -5.46 -3.00 7.32ms\n", + " 278 +7.592435496144 -6.26 -2.79 7.27ms\n", + " 279 +7.592433175290 -5.63 -2.94 17.8ms\n", + " 280 +7.592431628093 -5.81 -3.04 8.84ms\n", + " 281 +7.592430273783 -5.87 -3.18 8.56ms\n", + " 282 +7.592428314632 -5.71 -2.98 8.46ms\n", + " 283 +7.592428287215 -7.56 -2.97 6.44ms\n", + " 284 +7.592427877973 -6.39 -2.87 6.44ms\n", + " 285 +7.592426815666 -5.97 -3.33 6.48ms\n", + " 286 +7.592425325981 -5.83 -3.12 6.54ms\n", + " 287 +7.592423673478 -5.78 -2.88 8.54ms\n", + " 288 +7.592423131383 -6.27 -3.34 6.49ms\n", + " 289 +7.592422193123 -6.03 -3.13 6.50ms\n", + " 290 +7.592421152754 -5.98 -3.20 6.42ms\n", + " 291 +7.592420351488 -6.10 -3.45 6.42ms\n", + " 292 +7.592419111769 -5.91 -3.36 6.44ms\n", + " 293 +7.592418168906 -6.03 -3.26 8.65ms\n", + " 294 +7.592416830169 -5.87 -2.92 8.45ms\n", + " 295 +7.592415534628 -5.89 -2.61 6.43ms\n", + " 296 +7.592414873422 -6.18 -2.98 6.44ms\n", + " 297 +7.592414090169 -6.11 -2.92 6.40ms\n", + " 298 +7.592412563217 -5.82 -3.09 6.39ms\n", + " 299 +7.592411046992 -5.82 -3.04 6.36ms\n", + " 300 +7.592407719097 -5.48 -2.62 8.36ms\n", + " 301 +7.592406372739 -5.87 -2.94 6.39ms\n", + " 302 +7.592405560596 -6.09 -3.07 6.35ms\n", + " 303 +7.592403344250 -5.65 -3.14 6.45ms\n", + " 304 +7.592402693865 -6.19 -3.14 6.37ms\n", + " 305 +7.592399389616 -5.48 -3.21 6.36ms\n", + " 306 +7.592396142564 -5.49 -2.64 8.35ms\n", + " 307 +7.592394333533 -5.74 -2.79 6.37ms\n", + " 308 +7.592393639110 -6.16 -2.75 6.36ms\n", + " 309 +7.592393052711 -6.23 -2.59 6.37ms\n", + " 310 +7.592391868193 -5.93 -2.57 6.34ms\n", + " 311 +7.592388040309 -5.42 -2.89 6.32ms\n", + " 312 +7.592386911360 -5.95 -2.63 6.46ms\n", + " 313 +7.592384090594 -5.55 -2.59 8.40ms\n", + " 314 +7.592382633508 -5.84 -3.03 6.36ms\n", + " 315 +7.592380095534 -5.60 -2.80 8.34ms\n", + " 316 +7.592378480145 -5.79 -3.01 6.32ms\n", + " 317 +7.592375331676 -5.50 -2.94 6.35ms\n", + " 318 +7.592373214472 -5.67 -3.11 6.29ms\n", + " 319 +7.592371811828 -5.85 -2.94 9.45ms\n", + " 320 +7.592370794517 -5.99 -2.89 9.43ms\n", + " 321 +7.592369706761 -5.96 -2.71 17.3ms\n", + " 322 +7.592369030922 -6.17 -2.87 6.45ms\n", + " 323 +7.592368501384 -6.28 -2.62 6.40ms\n", + " 324 +7.592367070219 -5.84 -3.00 6.35ms\n", + " 325 +7.592366132697 -6.03 -2.85 6.37ms\n", + " 326 +7.592365642396 -6.31 -2.91 6.33ms\n", + " 327 +7.592365071358 -6.24 -3.16 6.42ms\n", + " 328 +7.592363575795 -5.83 -3.05 6.42ms\n", + " 329 +7.592362790594 -6.11 -3.12 6.34ms\n", + " 330 +7.592361627483 -5.93 -3.05 6.38ms\n", + " 331 +7.592360303805 -5.88 -3.27 6.41ms\n", + " 332 +7.592360105947 -6.70 -3.29 6.40ms\n", + " 333 +7.592359304177 -6.10 -3.16 8.34ms\n", + " 334 +7.592359292083 -7.92 -2.97 6.35ms\n", + " 335 +7.592358360822 -6.03 -3.26 6.36ms\n", + " 336 +7.592357312855 -5.98 -2.97 6.40ms\n", + " 337 +7.592356484880 -6.08 -2.96 8.38ms\n", + " 338 +7.592355623976 -6.07 -3.04 8.45ms\n", + " 339 +7.592355008916 -6.21 -3.11 6.47ms\n", + " 340 +7.592353790659 -5.91 -2.92 8.52ms\n", + " 341 +7.592353633997 -6.81 -3.15 6.43ms\n", + " 342 +7.592353091854 -6.27 -3.48 6.44ms\n", + " 343 +7.592352272349 -6.09 -2.86 8.44ms\n", + " 344 +7.592351802275 -6.33 -3.64 6.61ms\n", + " 345 +7.592350864506 -6.03 -2.84 8.53ms\n", + " 346 +7.592350604627 -6.59 -3.33 6.45ms\n", + " 347 +7.592349994203 -6.21 -3.28 6.48ms\n", + " 348 +7.592349734796 -6.59 -3.47 6.46ms\n", + " 349 +7.592349367313 -6.43 -3.47 6.41ms\n", + " 350 +7.592349068523 -6.52 -3.28 8.53ms\n", + " 351 +7.592348938648 -6.89 -3.48 6.56ms\n", + " 352 +7.592348840142 -7.01 -3.23 6.47ms\n", + " 353 +7.592348554347 -6.54 -3.20 6.44ms\n", + " 354 +7.592348276276 -6.56 -3.60 6.41ms\n", + " 355 +7.592348086586 -6.72 -3.40 6.46ms\n", + " 356 +7.592347798140 -6.54 -3.63 6.42ms\n", + " 357 +7.592347795369 -8.56 -3.47 6.51ms\n", + " 358 +7.592347775418 -7.70 -3.51 6.45ms\n", + " 359 +7.592347556701 -6.66 -3.51 6.41ms\n", + " 360 +7.592347333112 -6.65 -3.65 6.56ms\n", + " 361 +7.592347080300 -6.60 -3.64 6.68ms\n", + " 362 +7.592346847675 -6.63 -3.46 9.60ms\n", + " 363 +7.592346542592 -6.52 -3.29 9.71ms\n", + " 364 +7.592346421149 -6.92 -3.55 17.6ms\n", + " 365 +7.592346354369 -7.18 -3.94 6.59ms\n", + " 366 +7.592346326316 -7.55 -3.60 6.68ms\n", + " 367 +7.592346249482 -7.11 -3.67 8.81ms\n", + " 368 +7.592346229583 -7.70 -3.54 6.63ms\n", + " 369 +7.592346132350 -7.01 -3.44 6.61ms\n", + " 370 +7.592346046659 -7.07 -3.60 6.57ms\n", + " 371 +7.592345883093 -6.79 -3.71 6.54ms\n", + " 372 +7.592345709179 -6.76 -3.62 6.55ms\n", + " 373 +7.592345649140 -7.22 -3.68 6.69ms\n", + " 374 +7.592345635118 -7.85 -3.57 6.50ms\n", + " 375 +7.592345575188 -7.22 -3.65 6.45ms\n", + " 376 +7.592345572748 -8.61 -3.86 6.42ms\n", + " 377 +7.592345565299 -8.13 -3.50 6.40ms\n", + " 378 +7.592345442297 -6.91 -3.84 6.43ms\n", + " 379 +7.592345429814 -7.90 -3.37 6.63ms\n", + " 380 +7.592345317059 -6.95 -3.36 6.56ms\n", + " 381 +7.592345178262 -6.86 -3.51 8.62ms\n", + " 382 +7.592345045424 -6.88 -3.85 6.58ms\n", + " 383 +7.592345011148 -7.47 -3.68 6.50ms\n", + " 384 +7.592344911639 -7.00 -3.64 8.52ms\n", + " 385 +7.592344763729 -6.83 -3.43 8.43ms\n", + " 386 +7.592344662924 -7.00 -3.55 8.50ms\n", + " 387 +7.592344552619 -6.96 -3.42 8.44ms\n", + " 388 +7.592344394870 -6.80 -3.25 8.43ms\n", + " 389 +7.592344357087 -7.42 -3.85 6.40ms\n", + " 390 +7.592344236988 -6.92 -3.14 8.41ms\n", + " 391 +7.592344208999 -7.55 -3.21 6.46ms\n", + " 392 +7.592344139835 -7.16 -3.87 6.39ms\n", + " 393 +7.592343994208 -6.84 -3.87 6.39ms\n", + " 394 +7.592343893671 -7.00 -3.42 8.38ms\n", + " 395 +7.592343841531 -7.28 -3.99 6.40ms\n", + " 396 +7.592343809984 -7.50 -3.81 6.38ms\n", + " 397 +7.592343787133 -7.64 -3.96 6.39ms\n", + " 398 +7.592343698657 -7.05 -3.83 6.38ms\n", + " 399 +7.592343695710 -8.53 -3.86 6.42ms\n", + " 400 +7.592343682458 -7.88 -3.77 6.37ms\n", + " 401 +7.592343621747 -7.22 -3.91 6.35ms\n", + " 402 +7.592343555423 -7.18 -3.40 8.35ms\n", + " 403 +7.592343523712 -7.50 -3.57 7.07ms\n", + " 404 +7.592343468889 -7.26 -3.87 7.24ms\n", + " 405 +7.592343433062 -7.45 -3.72 7.20ms\n", + " 406 +7.592343398400 -7.46 -4.06 15.4ms\n", + " 407 +7.592343376884 -7.67 -3.90 6.49ms\n", + " 408 +7.592343327073 -7.30 -3.65 8.49ms\n", + " 409 +7.592343298512 -7.54 -3.91 6.37ms\n", + " 410 +7.592343237291 -7.21 -3.42 8.37ms\n", + " 411 +7.592343232993 -8.37 -3.32 6.38ms\n", + " 412 +7.592343185231 -7.32 -3.57 6.35ms\n", + " 413 +7.592343112390 -7.14 -3.84 6.37ms\n", + " 414 +7.592342977976 -6.87 -3.12 8.44ms\n", + " 415 +7.592342857187 -6.92 -3.35 6.35ms\n", + " 416 +7.592342729928 -6.90 -3.08 6.42ms\n", + " 417 +7.592342612838 -6.93 -3.41 6.34ms\n", + " 418 +7.592342418035 -6.71 -2.95 8.32ms\n", + " 419 +7.592342262645 -6.81 -3.50 6.35ms\n", + " 420 +7.592342097939 -6.78 -3.00 8.34ms\n", + " 421 +7.592341864311 -6.63 -3.26 6.40ms\n", + " 422 +7.592341298112 -6.25 -2.38 8.41ms\n", + " 423 +7.592341075291 -6.65 -2.70 6.46ms\n", + " 424 +7.592340769655 -6.51 -3.07 6.43ms\n", + " 425 +7.592340371030 -6.40 -2.88 6.46ms\n", + " 426 +7.592340274228 -7.01 -2.42 6.58ms\n", + " 427 +7.592339731632 -6.27 -2.35 8.48ms\n", + " 428 +7.592339647559 -7.08 -2.81 6.43ms\n", + " 429 +7.592338929226 -6.14 -3.39 6.42ms\n", + " 430 +7.592338025031 -6.04 -2.60 8.41ms\n", + " 431 +7.592337166521 -6.07 -3.07 6.46ms\n", + " 432 +7.592336796903 -6.43 -2.95 6.60ms\n", + " 433 +7.592336258430 -6.27 -3.31 6.55ms\n", + " 434 +7.592335392844 -6.06 -2.84 6.42ms\n", + " 435 +7.592334868802 -6.28 -2.85 8.46ms\n", + " 436 +7.592334680024 -6.72 -2.45 6.45ms\n", + " 437 +7.592333855966 -6.08 -2.30 8.43ms\n", + " 438 +7.592333004469 -6.07 -2.81 6.49ms\n", + " 439 +7.592332787741 -6.66 -2.24 6.41ms\n", + " 440 +7.592332298137 -6.31 -2.66 6.40ms\n", + " 441 +7.592331132135 -5.93 -2.99 6.47ms\n", + " 442 +7.592330455172 -6.17 -3.33 6.45ms\n", + " 443 +7.592329340697 -5.95 -2.73 6.44ms\n", + " 444 +7.592327785576 -5.81 -2.63 8.45ms\n", + " 445 +7.592327398653 -6.41 -2.88 6.76ms\n", + " 446 +7.592326535050 -6.06 -3.34 7.29ms\n", + " 447 +7.592325743744 -6.10 -3.31 9.52ms\n", + " 448 +7.592325467018 -6.56 -3.02 15.7ms\n", + " 449 +7.592324764758 -6.15 -2.85 8.88ms\n", + " 450 +7.592323992185 -6.11 -2.51 8.67ms\n", + " 451 +7.592323396770 -6.23 -2.49 6.49ms\n", + " 452 +7.592322357604 -5.98 -2.61 6.49ms\n", + " 453 +7.592321447544 -6.04 -2.32 8.47ms\n", + " 454 +7.592320398734 -5.98 -2.69 6.54ms\n", + " 455 +7.592319869427 -6.28 -2.96 6.56ms\n", + " 456 +7.592319618230 -6.60 -2.93 6.44ms\n", + " 457 +7.592319331313 -6.54 -3.07 6.43ms\n", + " 458 +7.592318984464 -6.46 -3.10 6.47ms\n", + " 459 +7.592318134740 -6.07 -2.30 8.43ms\n", + " 460 +7.592317631250 -6.30 -2.63 8.55ms\n", + " 461 +7.592317113471 -6.29 -3.15 6.45ms\n", + " 462 +7.592316325973 -6.10 -2.26 8.40ms\n", + " 463 +7.592316300140 -7.59 -3.23 6.38ms\n", + " 464 +7.592315757070 -6.27 -3.16 6.46ms\n", + " 465 +7.592315521920 -6.63 -2.77 6.51ms\n", + " 466 +7.592315440537 -7.09 -2.64 6.46ms\n", + " 467 +7.592314764229 -6.17 -2.83 6.42ms\n", + " 468 +7.592313893637 -6.06 -2.56 8.43ms\n", + " 469 +7.592313207144 -6.16 -2.43 8.39ms\n", + " 470 +7.592312695106 -6.29 -2.95 8.45ms\n", + " 471 +7.592312320904 -6.43 -3.25 6.40ms\n", + " 472 +7.592312052997 -6.57 -3.33 6.38ms\n", + " 473 +7.592311568288 -6.31 -3.25 8.41ms\n", + " 474 +7.592311436898 -6.88 -2.65 6.39ms\n", + " 475 +7.592311139631 -6.53 -3.12 6.46ms\n", + " 476 +7.592310556081 -6.23 -2.45 8.44ms\n", + " 477 +7.592310392800 -6.79 -2.46 6.35ms\n", + " 478 +7.592309572782 -6.09 -3.30 6.37ms\n", + " 479 +7.592309064946 -6.29 -3.43 6.37ms\n", + " 480 +7.592308682036 -6.42 -3.28 6.42ms\n", + " 481 +7.592308536518 -6.84 -3.27 6.40ms\n", + " 482 +7.592308216703 -6.50 -3.46 8.38ms\n", + " 483 +7.592307942302 -6.56 -2.88 8.35ms\n", + " 484 +7.592307742398 -6.70 -3.59 6.36ms\n", + " 485 +7.592307246526 -6.30 -2.66 8.42ms\n", + " 486 +7.592307080096 -6.78 -3.00 8.89ms\n", + " 487 +7.592306910227 -6.77 -3.34 7.18ms\n", + " 488 +7.592306666588 -6.61 -2.75 9.44ms\n", + " 489 +7.592306538096 -6.89 -2.83 17.3ms\n", + " 490 +7.592306395779 -6.85 -3.22 6.46ms\n", + " 491 +7.592306314557 -7.09 -3.12 6.42ms\n", + " 492 +7.592306212712 -6.99 -2.78 6.35ms\n", + " 493 +7.592306057955 -6.81 -3.42 6.37ms\n", + " 494 +7.592305870862 -6.73 -3.48 6.39ms\n", + " 495 +7.592305787470 -7.08 -3.03 6.36ms\n", + " 496 +7.592305625128 -6.79 -3.22 6.45ms\n", + " 497 +7.592305494388 -6.88 -3.74 6.37ms\n", + " 498 +7.592305316275 -6.75 -3.63 6.44ms\n", + " 499 +7.592305145671 -6.77 -3.74 6.43ms\n", + " 500 +7.592305051043 -7.02 -3.61 6.41ms\n", + " 501 +7.592304954051 -7.01 -3.26 6.35ms\n", + " 502 +7.592304869528 -7.07 -2.88 6.36ms\n", + " 503 +7.592304825763 -7.36 -2.81 6.42ms\n", + " 504 +7.592304738379 -7.06 -3.16 6.38ms\n", + " 505 +7.592304644541 -7.03 -3.37 6.42ms\n", + " 506 +7.592304492533 -6.82 -2.86 8.53ms\n", + " 507 +7.592304419796 -7.14 -3.13 6.51ms\n", + " 508 +7.592304306114 -6.94 -3.13 8.45ms\n", + " 509 +7.592304216011 -7.05 -3.74 6.43ms\n", + " 510 +7.592304177292 -7.41 -3.78 6.51ms\n", + " 511 +7.592304156755 -7.69 -3.51 6.44ms\n", + " 512 +7.592304121443 -7.45 -3.53 6.51ms\n", + " 513 +7.592304093683 -7.56 -3.31 6.41ms\n", + " 514 +7.592304088832 -8.31 -3.07 6.42ms\n", + " 515 +7.592304032491 -7.25 -3.55 6.44ms\n", + " 516 +7.592303951675 -7.09 -3.76 6.45ms\n", + " 517 +7.592303844834 -6.97 -3.58 6.41ms\n", + " 518 +7.592303676702 -6.77 -3.47 8.66ms\n", + " 519 +7.592303579151 -7.01 -3.70 6.55ms\n", + " 520 +7.592303483740 -7.02 -3.62 6.48ms\n", + " 521 +7.592303413519 -7.15 -3.72 9.25ms\n", + " 522 +7.592303360315 -7.27 -3.83 12.9ms\n", + " 523 +7.592303320432 -7.40 -3.69 12.8ms\n", + " 524 +7.592303261291 -7.23 -3.34 12.6ms\n", + " 525 +7.592303244772 -7.78 -3.12 9.62ms\n", + " 526 +7.592303166849 -7.11 -3.25 8.62ms\n", + " 527 +7.592303137512 -7.53 -3.28 6.62ms\n", + " 528 +7.592303123956 -7.87 -3.57 6.49ms\n", + " 529 +7.592303056666 -7.17 -3.94 7.03ms\n", + " 530 +7.592302946820 -6.96 -3.87 7.26ms\n", + " 531 +7.592302927538 -7.71 -3.69 7.24ms\n", + " 532 +7.592302885900 -7.38 -3.79 15.4ms\n", + " 533 +7.592302794463 -7.04 -3.82 6.66ms\n", + " 534 +7.592302717622 -7.11 -3.69 6.54ms\n", + " 535 +7.592302702295 -7.81 -3.69 6.46ms\n", + " 536 +7.592302631595 -7.15 -3.69 8.45ms\n", + " 537 +7.592302567094 -7.19 -3.94 6.46ms\n", + " 538 +7.592302529951 -7.43 -3.47 6.55ms\n", + " 539 +7.592302449822 -7.10 -3.32 8.50ms\n", + " 540 +7.592302418451 -7.50 -3.51 6.45ms\n", + " 541 +7.592302358086 -7.22 -3.61 6.48ms\n", + " 542 +7.592302278279 -7.10 -3.31 8.49ms\n", + " 543 +7.592302221941 -7.25 -3.50 8.50ms\n", + " 544 +7.592302199458 -7.65 -4.10 6.39ms\n", + " 545 +7.592302199366 -10.04 -3.75 6.39ms\n", + " 546 +7.592302108378 -7.04 -3.25 8.39ms\n", + " 547 +7.592302082713 -7.59 -4.15 6.36ms\n", + " 548 +7.592302007220 -7.12 -4.14 6.49ms\n", + " 549 +7.592301955850 -7.29 -3.56 6.45ms\n", + " 550 +7.592301896665 -7.23 -4.04 6.39ms\n", + " 551 +7.592301841717 -7.26 -3.67 8.40ms\n", + " 552 +7.592301802839 -7.41 -3.85 8.39ms\n", + " 553 +7.592301765006 -7.42 -3.87 6.41ms\n", + " 554 +7.592301720320 -7.35 -4.00 6.41ms\n", + " 555 +7.592301673460 -7.33 -3.59 8.34ms\n", + " 556 +7.592301585267 -7.05 -3.12 8.38ms\n", + " 557 +7.592301570131 -7.82 -3.76 8.42ms\n", + " 558 +7.592301559638 -7.98 -3.82 6.41ms\n", + " 559 +7.592301524702 -7.46 -4.19 6.38ms\n", + " 560 +7.592301516642 -8.09 -3.59 6.39ms\n", + " 561 +7.592301488693 -7.55 -4.05 6.36ms\n", + " 562 +7.592301470551 -7.74 -3.95 6.37ms\n", + " 563 +7.592301452615 -7.75 -4.16 6.35ms\n", + " 564 +7.592301429502 -7.64 -3.92 6.39ms\n", + " 565 +7.592301419802 -8.01 -4.09 6.37ms\n", + " 566 +7.592301376057 -7.36 -3.97 6.34ms\n", + " 567 +7.592301340905 -7.45 -3.87 6.36ms\n", + " 568 +7.592301331616 -8.03 -4.10 6.34ms\n", + " 569 +7.592301306963 -7.61 -4.12 6.38ms\n", + " 570 +7.592301291321 -7.81 -3.92 6.35ms\n", + " 571 +7.592301253031 -7.42 -3.64 8.83ms\n", + " 572 +7.592301233935 -7.72 -3.67 7.21ms\n", + " 573 +7.592301231751 -8.66 -3.58 7.17ms\n", + " 574 +7.592301197536 -7.47 -3.52 17.7ms\n", + " 575 +7.592301153784 -7.36 -3.45 8.53ms\n", + " 576 +7.592301070229 -7.08 -3.17 8.47ms\n", + " 577 +7.592301034920 -7.45 -4.00 6.37ms\n", + " 578 +7.592300992073 -7.37 -3.88 6.38ms\n", + " 579 +7.592300940185 -7.28 -3.35 8.31ms\n", + " 580 +7.592300913938 -7.58 -3.81 6.33ms\n", + " 581 +7.592300877615 -7.44 -3.54 8.38ms\n", + " 582 +7.592300835455 -7.38 -3.79 6.36ms\n", + " 583 +7.592300793060 -7.37 -3.39 6.46ms\n", + " 584 +7.592300787898 -8.29 -2.94 6.49ms\n", + " 585 +7.592300727596 -7.22 -3.74 6.45ms\n", + " 586 +7.592300665649 -7.21 -3.96 6.45ms\n", + " 587 +7.592300565106 -7.00 -3.72 6.49ms\n", + " 588 +7.592300563828 -8.89 -3.45 6.37ms\n", + " 589 +7.592300559476 -8.36 -3.67 6.41ms\n", + " 590 +7.592300491661 -7.17 -3.70 6.44ms\n", + " 591 +7.592300436390 -7.26 -3.97 6.55ms\n", + " 592 +7.592300369875 -7.18 -3.72 6.56ms\n", + " 593 +7.592300359935 -8.00 -3.41 6.49ms\n", + " 594 +7.592300315251 -7.35 -3.25 8.44ms\n", + " 595 +7.592300245149 -7.15 -3.19 8.51ms\n", + " 596 +7.592300227185 -7.75 -3.46 6.53ms\n", + " 597 +7.592300224039 -8.50 -3.72 6.57ms\n", + " 598 +7.592300197176 -7.57 -4.04 6.46ms\n", + " 599 +7.592300153121 -7.36 -3.43 8.39ms\n", + " 600 +7.592300105275 -7.32 -3.45 8.49ms\n", + " 601 +7.592300103395 -8.73 -4.00 6.44ms\n", + " 602 +7.592300089969 -7.87 -4.16 6.54ms\n", + " 603 +7.592300069826 -7.70 -4.25 6.49ms\n", + " 604 +7.592300058543 -7.95 -3.63 6.40ms\n", + " 605 +7.592300033548 -7.60 -4.28 6.44ms\n", + " 606 +7.592300016015 -7.76 -3.97 8.40ms\n", + " 607 +7.592299994735 -7.67 -3.98 8.36ms\n", + " 608 +7.592299977168 -7.76 -3.92 8.44ms\n", + " 609 +7.592299968054 -8.04 -4.00 6.40ms\n", + " 610 +7.592299955132 -7.89 -4.11 6.40ms\n", + " 611 +7.592299943356 -7.93 -4.13 6.42ms\n", + " 612 +7.592299927753 -7.81 -3.86 8.36ms\n", + " 613 +7.592299915145 -7.90 -4.04 7.05ms\n", + " 614 +7.592299904003 -7.95 -4.04 7.31ms\n", + " 615 +7.592299885228 -7.73 -3.63 9.51ms\n", + " 616 +7.592299875803 -8.03 -4.30 15.4ms\n", + " 617 +7.592299862447 -7.87 -4.28 6.60ms\n", + " 618 +7.592299858977 -8.46 -4.24 6.49ms\n", + " 619 +7.592299855425 -8.45 -4.33 6.56ms\n", + " 620 +7.592299848619 -8.17 -4.20 8.46ms\n", + " 621 +7.592299837385 -7.95 -4.28 6.45ms\n", + " 622 +7.592299836096 -8.89 -4.16 6.48ms\n", + " 623 +7.592299827709 -8.08 -4.56 6.44ms\n", + " 624 +7.592299821237 -8.19 -4.41 6.44ms\n", + " 625 +7.592299815761 -8.26 -4.14 8.42ms\n", + " 626 +7.592299812897 -8.54 -4.70 6.43ms\n", + " 627 +7.592299811355 -8.81 -4.68 6.39ms\n", + " 628 +7.592299810248 -8.96 -4.65 6.35ms\n", + " 629 +7.592299807587 -8.57 -4.50 8.38ms\n", + " 630 +7.592299805665 -8.72 -4.47 8.36ms\n", + " 631 +7.592299804772 -9.05 -4.71 6.38ms\n", + " 632 +7.592299803725 -8.98 -4.85 6.42ms\n", + " 633 +7.592299802256 -8.83 -4.62 8.64ms\n", + " 634 +7.592299801355 -9.05 -4.77 6.44ms\n", + " 635 +7.592299800538 -9.09 -4.71 6.41ms\n", + " 636 +7.592299799786 -9.12 -4.88 6.41ms\n", + " 637 +7.592299799579 -9.68 -4.95 6.37ms\n", + " 638 +7.592299799502 -10.11 -4.90 6.41ms\n", + " 639 +7.592299799487 -10.83 -4.70 6.41ms\n", + " 640 +7.592299798958 -9.28 -5.18 6.39ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using StaticArrays\n", + "using Plots\n", + "\n", + "# Unit cell. Having one of the lattice vectors as zero means a 2D system\n", + "a = 15\n", + "lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n", + "\n", + "# Confining scalar potential, and magnetic vector potential\n", + "pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2\n", + "ω = .6\n", + "Apot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]\n", + "Apot(X) = Apot(X...);\n", + "\n", + "\n", + "# Parameters\n", + "Ecut = 20 # Increase this for production\n", + "η = 500\n", + "C = η/2\n", + "α = 2\n", + "n_electrons = 1; # Increase this for fun\n", + "\n", + "# Collect all the terms, build and run the model\n", + "terms = [Kinetic(),\n", + " ExternalFromReal(X -> pot(X...)),\n", + " LocalNonlinearity(ρ -> C * ρ^α),\n", + " Magnetic(Apot),\n", + "]\n", + "model = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # spinless electrons\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\n", + "scfres = direct_minimization(basis, tol=1e-5) # Reduce tol for production\n", + "heatmap(scfres.ρ[:, :, 1, 1], c=:blues)" + ], + "metadata": {}, + "execution_count": 1 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/gross_pitaevskii_2D/18f264fe.svg b/v0.6.17/examples/gross_pitaevskii_2D/18f264fe.svg new file mode 100644 index 0000000000..859fea4cf1 --- /dev/null +++ b/v0.6.17/examples/gross_pitaevskii_2D/18f264fe.svg @@ -0,0 +1,508 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/gross_pitaevskii_2D/index.html b/v0.6.17/examples/gross_pitaevskii_2D/index.html new file mode 100644 index 0000000000..456095c4c9 --- /dev/null +++ b/v0.6.17/examples/gross_pitaevskii_2D/index.html @@ -0,0 +1,33 @@ + +Gross-Pitaevskii equation with external magnetic field · DFTK.jl

    Gross-Pitaevskii equation with external magnetic field

    We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10

    using DFTK
    +using StaticArrays
    +using Plots
    +
    +# Unit cell. Having one of the lattice vectors as zero means a 2D system
    +a = 15
    +lattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];
    +
    +# Confining scalar potential, and magnetic vector potential
    +pot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2
    +ω = .6
    +Apot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]
    +Apot(X) = Apot(X...);
    +
    +
    +# Parameters
    +Ecut = 20  # Increase this for production
    +η = 500
    +C = η/2
    +α = 2
    +n_electrons = 1;  # Increase this for fun
    +
    +# Collect all the terms, build and run the model
    +terms = [Kinetic(),
    +         ExternalFromReal(X -> pot(X...)),
    +         LocalNonlinearity(ρ -> C * ρ^α),
    +         Magnetic(Apot),
    +]
    +model = Model(lattice; n_electrons, terms, spin_polarization=:spinless)  # spinless electrons
    +basis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))
    +scfres = direct_minimization(basis, tol=1e-5)  # Reduce tol for production
    +heatmap(scfres.ρ[:, :, 1, 1], c=:blues)
    Example block output
    diff --git a/v0.6.17/examples/input_output.ipynb b/v0.6.17/examples/input_output.ipynb new file mode 100644 index 0000000000..2155c472a8 --- /dev/null +++ b/v0.6.17/examples/input_output.ipynb @@ -0,0 +1,407 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Input and output formats" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "This section provides an overview of the input and output formats\n", + "supported by DFTK, usually via integration with a third-party library.\n", + "\n", + "## Reading / writing files supported by AtomsIO\n", + "[AtomsIO](https://github.com/mfherbst/AtomsIO.jl) is a Julia package which supports\n", + "reading / writing atomistic structures from / to a large range of file formats.\n", + "Supported formats include Crystallographic Information Framework (CIF),\n", + "XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files\n", + "or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …).\n", + "The full list of formats is is available in the\n", + "[AtomsIO documentation](https://mfherbst.github.io/AtomsIO.jl/stable).\n", + "\n", + "The AtomsIO functionality is split into two packages. The main package, `AtomsIO` itself,\n", + "only depends on packages, which are registered in the Julia General package registry.\n", + "In contrast `AtomsIOPython` extends `AtomsIO` by parsers depending on python packages,\n", + "which are automatically managed via `PythonCall`. While it thus provides the full set of\n", + "supported IO formats, this also adds additional practical complications, so some users\n", + "may choose not to use `AtomsIOPython`.\n", + "\n", + "As an example we start the calculation of a simple antiferromagnetic iron crystal\n", + "using a Quantum-Espresso input file, [Fe_afm.pwi](Fe_afm.pwi).\n", + "For more details about calculations on magnetic systems\n", + "using collinear spin, see Collinear spin and magnetic systems.\n", + "\n", + "First we parse the Quantum Espresso input file using AtomsIO,\n", + "which reads the lattice, atomic positions and initial magnetisation\n", + "from the input file and returns it as an\n", + "[AtomsBase](https://github.com/JuliaMolSim/AtomsBase.jl) `AbstractSystem`,\n", + "the JuliaMolSim community standard for representing atomic systems." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Fe₂, periodic = TTT):\n bounding_box : [ 2.86814 0 0;\n 0 2.86814 0;\n 0 0 2.86814]u\"Å\"\n\n Atom(Fe, [ 0, 0, 0]u\"Å\")\n Atom(Fe, [ 1.43407, 1.43407, 0]u\"Å\")\n\n .------. \n /| | \n * | | \n | | | \n | .------. \n |/ Fe / \n Fe-----* \n" + }, + "metadata": {}, + "execution_count": 1 + } + ], + "cell_type": "code", + "source": [ + "using AtomsIO # Use Julia-only IO parsers\n", + "using AtomsIOPython # Use python-based IO parsers (e.g. ASE)\n", + "system = load_system(\"Fe_afm.pwi\")" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Next we attach pseudopotential information, since currently the parser is not\n", + "yet capable to read this information from the file." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "FlexibleSystem(Fe₂, periodic = TTT):\n bounding_box : [ 2.86814 0 0;\n 0 2.86814 0;\n 0 0 2.86814]u\"Å\"\n\n Atom(Fe, [ 0, 0, 0]u\"Å\")\n Atom(Fe, [ 1.43407, 1.43407, 0]u\"Å\")\n\n .------. \n /| | \n * | | \n | | | \n | .------. \n |/ Fe / \n Fe-----* \n" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "system = attach_psp(system, Fe=\"hgh/pbe/fe-q16.hgh\")" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Finally we make use of DFTK's AtomsBase integration to run the calculation." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Magnet Diag Δtime\n", + "--- --------------- --------- --------- ------ ---- ------\n", + " 1 -223.7490688019 0.22 -6.321 5.6 283ms\n", + " 2 -224.1614697912 -0.38 -0.21 -3.326 1.6 149ms\n", + " 3 -224.2176658640 -1.25 -1.06 -1.612 2.9 197ms\n", + " 4 -224.2198803682 -2.65 -1.46 -1.193 1.1 160ms\n", + " 5 -224.2207974947 -3.04 -1.73 -0.822 1.0 139ms\n", + " 6 -224.2212139739 -3.38 -2.00 -0.484 1.0 138ms\n", + " 7 -224.2213721751 -3.80 -2.35 -0.233 1.2 156ms\n", + " 8 -224.2214145019 -4.37 -2.85 -0.084 1.6 151ms\n", + " 9 -224.2214205150 -5.22 -3.52 -0.007 3.0 172ms\n", + " 10 -224.2214206834 -6.77 -3.77 0.001 2.8 171ms\n", + " 11 -224.2214207057 -7.65 -3.96 -0.002 1.2 133ms\n", + " 12 -224.2214207169 -7.95 -4.31 -0.000 1.0 133ms\n", + " 13 -224.2214207186 -8.78 -4.79 -0.000 1.7 145ms\n", + " 14 -224.2214207187 -9.94 -5.24 0.000 2.5 157ms\n", + " 15 -224.2214207187 -10.53 -5.67 0.000 1.8 145ms\n", + " 16 -224.2214207187 -11.57 -6.15 -0.000 2.1 152ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "model = model_LDA(system; temperature=0.01)\n", + "basis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))\n", + "ρ0 = guess_density(basis, system)\n", + "scfres = self_consistent_field(basis, ρ=ρ0);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "!!! warning \"DFTK data formats are not yet fully matured\"\n", + " The data format in which DFTK saves data as well as the general interface\n", + " of the `load_scfres` and `save_scfres` pair of functions\n", + " are not yet fully matured. If you use the functions or the produced files\n", + " expect that you need to adapt your routines in the future even with patch\n", + " version bumps." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Writing VTK files for visualization\n", + "For visualizing the density or the Kohn-Sham orbitals DFTK supports storing\n", + "the result of an SCF calculations in the form of VTK files.\n", + "These can afterwards be visualized using tools such\n", + "as [paraview](https://www.paraview.org/).\n", + "Using this feature requires\n", + "the [WriteVTK.jl](https://github.com/jipolanco/WriteVTK.jl/) Julia package." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using WriteVTK\n", + "save_scfres(\"iron_afm.vts\", scfres; save_ψ=true);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "This will save the iron calculation above into the file `iron_afm.vts`,\n", + "using `save_ψ=true` to also include the KS orbitals." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Parsable data-export using json\n", + "Many structures in DFTK support the (unexported) `todict` function,\n", + "which returns a simplified dictionary representation of the data." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Dict{String, Float64} with 9 entries:\n \"AtomicNonlocal\" => -4.34593\n \"PspCorrection\" => 7.03001\n \"Ewald\" => -161.527\n \"total\" => -224.221\n \"Entropy\" => -0.0306478\n \"Kinetic\" => 75.6631\n \"AtomicLocal\" => -161.128\n \"Hartree\" => 41.397\n \"Xc\" => -21.2803" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "DFTK.todict(scfres.energies)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "This in turn can be easily written to disk using a JSON library.\n", + "Currently we integrate most closely with `JSON3`,\n", + "which is thus recommended." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{\n", + " \"AtomicNonlocal\": -4.345930984885066,\n", + " \"PspCorrection\": 7.03000636467455,\n", + " \"Ewald\": -161.52650757200072,\n", + " \"total\": -224.22142071873404,\n", + " \"Entropy\": -0.03064781913846741,\n", + " \"Kinetic\": 75.66305006707721,\n", + " \"AtomicLocal\": -161.1281094005947,\n", + " \"Hartree\": 41.397007161505165,\n", + " \"Xc\": -21.280288535372026\n", + "}\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using JSON3\n", + "open(\"iron_afm_energies.json\", \"w\") do io\n", + " JSON3.pretty(io, DFTK.todict(scfres.energies))\n", + "end\n", + "println(read(\"iron_afm_energies.json\", String))" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Once JSON3 is loaded, additionally a convenience function for saving\n", + "a summary of `scfres` objects using `save_scfres` is available:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using JSON3\n", + "save_scfres(\"iron_afm.json\", scfres)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Similarly a summary of the band data (occupations, eigenvalues, εF, etc.)\n", + "for post-processing can be dumped using `save_bands`:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "save_bands(\"iron_afm_scfres.json\", scfres)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "Notably this function works both for the results obtained\n", + "by `self_consistent_field` as well as `compute_bands`:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: The provided cell is a supercell: the returned k-path is the standard k-path of the associated primitive cell in the basis of the supercell reciprocal lattice.\n", + "│ cell =\n", + "│ Spglib.SpglibCell{Float64, Float64, Int64, Float64}\n", + "│ lattice:\n", + "│ 5.41999997388764 0.0 0.0\n", + "│ 0.0 5.41999997388764 0.0\n", + "│ 0.0 0.0 5.41999997388764\n", + "│ 2 atomic positions:\n", + "│ 0.0 0.0 0.0\n", + "│ 0.5 0.5 0.0\n", + "│ 2 atoms:\n", + "│ 1 1\n", + "│ 2 magmoms:\n", + "│ 0.0 0.0\n", + "│ \n", + "└ @ BrillouinSpglibExt ~/.julia/packages/Brillouin/ESWPN/ext/BrillouinSpglibExt.jl:28\n" + ] + } + ], + "cell_type": "code", + "source": [ + "bands = compute_bands(scfres, kline_density=10)\n", + "save_bands(\"iron_afm_bands.json\", bands)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "## Writing and reading JLD2 files\n", + "The full state of a DFTK self-consistent field calculation can be\n", + "stored on disk in form of an [JLD2.jl](https://github.com/JuliaIO/JLD2.jl) file.\n", + "This file can be read from other Julia scripts\n", + "as well as other external codes supporting the HDF5 file format\n", + "(since the JLD2 format is based on HDF5). This includes notably `h5py`\n", + "to read DFTK output from python." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using JLD2\n", + "save_scfres(\"iron_afm.jld2\", scfres)" + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "Saving such JLD2 files supports some options, such as `save_ψ=false`, which avoids saving\n", + "the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used\n", + "with `save_bands`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Since such JLD2 can also be read by DFTK to start or continue a calculation,\n", + "these can also be used for checkpointing or for transferring results\n", + "to a different computer.\n", + "See Saving SCF results on disk and SCF checkpoints for details." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "(Cleanup files generated by this notebook.)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "6-element Vector{Nothing}:\n nothing\n nothing\n nothing\n nothing\n nothing\n nothing" + }, + "metadata": {}, + "execution_count": 11 + } + ], + "cell_type": "code", + "source": [ + "rm.([\"iron_afm.vts\", \"iron_afm.jld2\",\n", + " \"iron_afm.json\", \"iron_afm_energies.json\", \"iron_afm_scfres.json\",\n", + " \"iron_afm_bands.json\"])" + ], + "metadata": {}, + "execution_count": 11 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/input_output/index.html b/v0.6.17/examples/input_output/index.html new file mode 100644 index 0000000000..806e3b593d --- /dev/null +++ b/v0.6.17/examples/input_output/index.html @@ -0,0 +1,105 @@ + +Input and output formats · DFTK.jl

    Input and output formats

    This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.

    Reading / writing files supported by AtomsIO

    AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.

    The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.

    As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.

    First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.

    using AtomsIO        # Use Julia-only IO parsers
    +using AtomsIOPython  # Use python-based IO parsers (e.g. ASE)
    +system = load_system("Fe_afm.pwi")
    FlexibleSystem(Fe₂, periodic = TTT):
    +    bounding_box      : [ 2.86814        0        0;
    +                                0  2.86814        0;
    +                                0        0  2.86814]u"Å"
    +
    +    Atom(Fe, [       0,        0,        0]u"Å")
    +    Atom(Fe, [ 1.43407,  1.43407,        0]u"Å")
    +
    +      .------.  
    +     /|      |  
    +    * |      |  
    +    | |      |  
    +    | .------.  
    +    |/  Fe  /   
    +    Fe-----*    
    +

    Next we attach pseudopotential information, since currently the parser is not yet capable to read this information from the file.

    using DFTK
    +system = attach_psp(system, Fe="hgh/pbe/fe-q16.hgh")
    FlexibleSystem(Fe₂, periodic = TTT):
    +    bounding_box      : [ 2.86814        0        0;
    +                                0  2.86814        0;
    +                                0        0  2.86814]u"Å"
    +
    +    Atom(Fe, [       0,        0,        0]u"Å")
    +    Atom(Fe, [ 1.43407,  1.43407,        0]u"Å")
    +
    +      .------.  
    +     /|      |  
    +    * |      |  
    +    | |      |  
    +    | .------.  
    +    |/  Fe  /   
    +    Fe-----*    
    +

    Finally we make use of DFTK's AtomsBase integration to run the calculation.

    model = model_LDA(system; temperature=0.01)
    +basis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))
    +ρ0 = guess_density(basis, system)
    +scfres = self_consistent_field(basis, ρ=ρ0);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -223.7485758885                    0.22   -6.321    5.4    249ms
    +  2   -224.1612491539       -0.38       -0.21   -3.326    1.7    147ms
    +  3   -224.2176564371       -1.25       -1.06   -1.612    3.2    198ms
    +  4   -224.2198800034       -2.65       -1.46   -1.193    1.1    137ms
    +  5   -224.2207972451       -3.04       -1.73   -0.822    1.0    133ms
    +  6   -224.2212130641       -3.38       -2.00   -0.485    1.0    150ms
    +  7   -224.2213724533       -3.80       -2.35   -0.232    1.3    141ms
    +  8   -224.2214145689       -4.38       -2.85   -0.083    1.5    140ms
    +  9   -224.2214205155       -5.23       -3.52   -0.008    2.5    166ms
    + 10   -224.2214206843       -6.77       -3.77    0.001    2.2    162ms
    + 11   -224.2214207062       -7.66       -3.96   -0.002    1.1    180ms
    + 12   -224.2214207170       -7.97       -4.31   -0.000    1.1    131ms
    + 13   -224.2214207186       -8.81       -4.80    0.000    1.8    158ms
    + 14   -224.2214207187       -9.91       -5.25    0.000    2.3    147ms
    + 15   -224.2214207187      -10.62       -5.71   -0.000    2.1    145ms
    + 16   -224.2214207187      -11.77       -6.05    0.000    2.2    149ms
    DFTK data formats are not yet fully matured

    The data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.

    Writing VTK files for visualization

    For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.

    using WriteVTK
    +save_scfres("iron_afm.vts", scfres; save_ψ=true);

    This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.

    Parsable data-export using json

    Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.

    DFTK.todict(scfres.energies)
    Dict{String, Float64} with 9 entries:
    +  "AtomicNonlocal" => -4.34593
    +  "PspCorrection"  => 7.03001
    +  "Ewald"          => -161.527
    +  "total"          => -224.221
    +  "Entropy"        => -0.0306478
    +  "Kinetic"        => 75.6631
    +  "AtomicLocal"    => -161.128
    +  "Hartree"        => 41.397
    +  "Xc"             => -21.2803

    This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.

    using JSON3
    +open("iron_afm_energies.json", "w") do io
    +    JSON3.pretty(io, DFTK.todict(scfres.energies))
    +end
    +println(read("iron_afm_energies.json", String))
    {
    +    "AtomicNonlocal": -4.3459309794975,
    +    "PspCorrection": 7.03000636467455,
    +    "Ewald": -161.52650757200072,
    +    "total": -224.22142071873412,
    +    "Entropy": -0.030647819665953816,
    +    "Kinetic": 75.66305102715334,
    +    "AtomicLocal": -161.1281112828459,
    +    "Hartree": 41.397008198983954,
    +    "Xc": -21.280288655535912
    +}

    Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:

    using JSON3
    +save_scfres("iron_afm.json", scfres)

    Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:

    save_bands("iron_afm_scfres.json", scfres)

    Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:

    bands = compute_bands(scfres, kline_density=10)
    +save_bands("iron_afm_bands.json", bands)
    ┌ Warning: The provided cell is a supercell: the returned k-path is the standard k-path of the associated primitive cell in the basis of the supercell reciprocal lattice.
    +  cell =
    +   Spglib.SpglibCell{Float64, Float64, Int64, Float64}
    +    lattice:
    +      5.41999997388764  0.0  0.0
    +      0.0  5.41999997388764  0.0
    +      0.0  0.0  5.41999997388764
    +    2 atomic positions:
    +      0.0  0.0  0.0
    +      0.5  0.5  0.0
    +    2 atoms:
    +      1  1
    +    2 magmoms:
    +      0.0  0.0
    +
    +@ BrillouinSpglibExt ~/.julia/packages/Brillouin/ESWPN/ext/BrillouinSpglibExt.jl:28

    Writing and reading JLD2 files

    The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5). This includes notably h5py to read DFTK output from python.

    using JLD2
    +save_scfres("iron_afm.jld2", scfres)

    Saving such JLD2 files supports some options, such as save_ψ=false, which avoids saving the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used with save_bands.

    Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.

    (Cleanup files generated by this notebook.)

    rm.(["iron_afm.vts", "iron_afm.jld2",
    +     "iron_afm.json", "iron_afm_energies.json", "iron_afm_scfres.json",
    +     "iron_afm_bands.json"])
    6-element Vector{Nothing}:
    + nothing
    + nothing
    + nothing
    + nothing
    + nothing
    + nothing
    diff --git a/v0.6.17/examples/metallic_systems.ipynb b/v0.6.17/examples/metallic_systems.ipynb new file mode 100644 index 0000000000..3d9b71c4ae --- /dev/null +++ b/v0.6.17/examples/metallic_systems.ipynb @@ -0,0 +1,310 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Temperature and metallic systems\n", + "\n", + "In this example we consider the modeling of a magnesium lattice\n", + "as a simple example for a metallic system.\n", + "For our treatment we will use the PBE exchange-correlation functional.\n", + "First we import required packages and setup the lattice.\n", + "Again notice that DFTK uses the convention that lattice vectors are\n", + "specified column by column." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "a = 3.01794 # bohr\n", + "b = 5.22722 # bohr\n", + "c = 9.77362 # bohr\n", + "lattice = [[-a -a 0]; [-b b 0]; [0 0 -c]]\n", + "Mg = ElementPsp(:Mg; psp=load_psp(\"hgh/pbe/Mg-q2\"))\n", + "atoms = [Mg, Mg]\n", + "positions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Next we build the PBE model and discretize it.\n", + "Since magnesium is a metal we apply a small smearing\n", + "temperature to ease convergence using the Fermi-Dirac\n", + "smearing scheme. Note that both the `Ecut` is too small\n", + "as well as the minimal $k$-point spacing\n", + "`kspacing` far too large to give a converged result.\n", + "These have been selected to obtain a fast execution time.\n", + "By default `PlaneWaveBasis` chooses a `kspacing`\n", + "of `2π * 0.022` inverse Bohrs, which is much more reasonable." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "kspacing = 0.945 / u\"angstrom\" # Minimal spacing of k-points,\n", + "# in units of wavevectors (inverse Bohrs)\n", + "Ecut = 5 # Kinetic energy cutoff in Hartree\n", + "temperature = 0.01 # Smearing temperature in Hartree\n", + "smearing = DFTK.Smearing.FermiDirac() # Smearing method\n", + "# also supported: Gaussian,\n", + "# MarzariVanderbilt,\n", + "# and MethfesselPaxton(order)\n", + "\n", + "model = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];\n", + " temperature, smearing)\n", + "kgrid = kgrid_from_maximal_spacing(lattice, kspacing)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Finally we run the SCF. Two magnesium atoms in\n", + "our pseudopotential model result in four valence electrons being explicitly\n", + "treated. Nevertheless this SCF will solve for eight bands by default\n", + "in order to capture partial occupations beyond the Fermi level due to\n", + "the employed smearing scheme. In this example we use a damping of `0.8`.\n", + "The default `LdosMixing` should be suitable to converge metallic systems\n", + "like the one we model here. For the sake of demonstration we still switch to\n", + "Kerker mixing here." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -1.743042435325 -1.28 5.7 8.08s\n", + " 2 -1.743501930158 -3.34 -1.70 1.2 6.66s\n", + " 3 -1.743612930339 -3.95 -2.84 2.8 28.7ms\n", + " 4 -1.743616691190 -5.42 -3.54 3.7 46.1ms\n", + " 5 -1.743616747615 -7.25 -4.58 3.0 29.4ms\n", + " 6 -1.743616749874 -8.65 -5.53 3.8 34.9ms\n", + " 7 -1.743616749884 -11.00 -6.48 3.0 40.0ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "9-element Vector{Float64}:\n 1.9999999999941416\n 1.9985518369319466\n 1.9905514418743304\n 1.2449660880879262e-17\n 1.2448808635442614e-17\n 1.0289498219265754e-17\n 1.0288622331627576e-17\n 2.988422844757853e-19\n 1.6623177069215618e-21" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "scfres.occupation[1]" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 0.7450614 \n AtomicLocal 0.3193179 \n AtomicNonlocal 0.3192776 \n Ewald -2.1544222\n PspCorrection -0.1026056\n Hartree 0.0061603 \n Xc -0.8615676\n Entropy -0.0148387\n\n total -1.743616749884" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "The fact that magnesium is a metal is confirmed\n", + "by plotting the density of states around the Fermi level.\n", + "To get better plots, we decrease the k spacing a bit for this step" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "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9Oun78kTJyIs7K/F2MREeEF46hQ+/JDTHt9+G82irRUODg5WVlZ1dXXV1dVOTk4tFtR3dnaura0F8PLLLw8bNuz333/fsGHDk08++fbbbz///POsVk4IIe3LysK8eQac/+GHGDgQixahSxfWauKc8IJw/HiMH893EfcqLCxsaGjw8fFRKBQ3b97UbsfR9Gp+fv6Yv+fUhwwZMmTIEADbtm2bO3fuY4891qFDB36KJoQQICsLBm2R3qMHFizA6tX47DPWauIcfUZoKrVa/eGHH4aHh/v7+/fu3dvb2/vLL79sejUjI+P48eMzZsxocVV0dHRjY2NNTQ23xRJCyD8UChQXw9/fsKteeAE//SSqtWaENyI0E9u3b09NTS0qKoqPj79z505cXBwAKyurb7/9durUqRUVFaNHj87Ly3vjjTdeeuml0NBQAGPHjh0zZky/fv0UCsXatWuHDh3q5eXF9/sghFiu3Fz4+bVca1unzp0xdy6++AJvvslOWZyjEaExnn/+eZVKdeXKFXt7+zfffDM7OzsoKEj70qhRo06dOlVfX//ZZ5+lpaVt3rz5zb9/WF588cXy8vIvv/xy69atkyZN2r17N3/vgBBCcOkSevc25sKnnsL69aivZ7ogntCI0BirV69u59XAwMB/71cFYPTo0aNHj2atKEIIMUx2tpFB2KsXgoOxcyceeIDpmvhAI0JCCLFQubkw+nnmBQuwZQuj1fCHgpAQQixUfr7xQThjBo4exe3bjBbEE5oaZYZKpSopKWn60sbGpouYnrIhhIhRbi569jTyWkdHjBqFnTuxYAGjNfGBgpAZFy5c6Nevn//ftyH369fvt99+47ckQghpR1UVampMei5+2jTs2EFBaMEaGhpKS0s7dOjg+Pfya1KpNC8vj9+qCCFET5cvo0cP3LsQlmEmTcLTT0OlglzOXFl8oM8IjbFz586uXbtOmDCBdlMihAhUQQH+3gXASB07olcvpKYyVBB/hDciTChIOFhwkMsepwVOi+p2z7aVH3300QcffDB//nwASqVSe1Cj0SxZskT733Pnzh02bBiXRRJCiEEKC+Hra2oj48Zh/34I/bed8IJwf/7+jekbuezR3d69RRDOmzdvy5YtNTU1oaGhMTExTccHDBig/Y9OnTpxWSEhhBhKOzVqopEj8corDBTDL+EF4QdjP/hg7Af81qBQ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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u\"Å\")\n", + "bands = compute_bands(scfres, kgrid_dos)\n", + "plot_dos(bands)" + ], + "metadata": {}, + "execution_count": 6 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/metallic_systems/ab7c6680.svg b/v0.6.17/examples/metallic_systems/cb0c430c.svg similarity index 58% rename from dev/examples/metallic_systems/ab7c6680.svg rename to v0.6.17/examples/metallic_systems/cb0c430c.svg index 1eb0b4cbad..11cb3e6013 100644 --- a/dev/examples/metallic_systems/ab7c6680.svg +++ b/v0.6.17/examples/metallic_systems/cb0c430c.svg @@ -1,56 +1,56 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/metallic_systems/index.html b/v0.6.17/examples/metallic_systems/index.html new file mode 100644 index 0000000000..5acd4bed34 --- /dev/null +++ b/v0.6.17/examples/metallic_systems/index.html @@ -0,0 +1,54 @@ + +Temperature and metallic systems · DFTK.jl

    Temperature and metallic systems

    In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.

    using DFTK
    +using Plots
    +using Unitful
    +using UnitfulAtomic
    +
    +a = 3.01794  # bohr
    +b = 5.22722  # bohr
    +c = 9.77362  # bohr
    +lattice = [[-a -a  0]; [-b  b  0]; [0   0 -c]]
    +Mg = ElementPsp(:Mg; psp=load_psp("hgh/pbe/Mg-q2"))
    +atoms     = [Mg, Mg]
    +positions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];

    Next we build the PBE model and discretize it. Since magnesium is a metal we apply a small smearing temperature to ease convergence using the Fermi-Dirac smearing scheme. Note that both the Ecut is too small as well as the minimal $k$-point spacing kspacing far too large to give a converged result. These have been selected to obtain a fast execution time. By default PlaneWaveBasis chooses a kspacing of 2π * 0.022 inverse Bohrs, which is much more reasonable.

    kspacing = 0.945 / u"angstrom"        # Minimal spacing of k-points,
    +#                                      in units of wavevectors (inverse Bohrs)
    +Ecut = 5                              # Kinetic energy cutoff in Hartree
    +temperature = 0.01                    # Smearing temperature in Hartree
    +smearing = DFTK.Smearing.FermiDirac() # Smearing method
    +#                                      also supported: Gaussian,
    +#                                      MarzariVanderbilt,
    +#                                      and MethfesselPaxton(order)
    +
    +model = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];
    +                  temperature, smearing)
    +kgrid = kgrid_from_maximal_spacing(lattice, kspacing)
    +basis = PlaneWaveBasis(model; Ecut, kgrid);

    Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.

    scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -1.743057912136                   -1.28    5.0   31.7ms
    +  2   -1.743506838773       -3.35       -1.70    2.0   24.6ms
    +  3   -1.743614279904       -3.97       -2.84    3.5   31.1ms
    +  4   -1.743616709773       -5.61       -3.53    3.8   33.7ms
    +  5   -1.743616748293       -7.41       -4.50    2.7   28.1ms
    +  6   -1.743616749850       -8.81       -5.34    3.8   33.9ms
    +  7   -1.743616749884      -10.47       -6.40    2.8   30.5ms
    scfres.occupation[1]
    9-element Vector{Float64}:
    + 1.9999999999941416
    + 1.998551836729947
    + 1.9905514397885455
    + 1.2449658724116431e-17
    + 1.2448806478546225e-17
    + 1.0289485362094132e-17
    + 1.0288609476157183e-17
    + 2.988418230007168e-19
    + 1.6622422348826237e-21
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             0.7450614 
    +    AtomicLocal         0.3193180 
    +    AtomicNonlocal      0.3192776 
    +    Ewald               -2.1544222
    +    PspCorrection       -0.1026056
    +    Hartree             0.0061603 
    +    Xc                  -0.8615676
    +    Entropy             -0.0148387
    +
    +    total               -1.743616749884

    The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step

    kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u"Å")
    +bands = compute_bands(scfres, kgrid_dos)
    +plot_dos(bands)
    Example block output
    diff --git a/v0.6.17/examples/polarizability.ipynb b/v0.6.17/examples/polarizability.ipynb new file mode 100644 index 0000000000..c49ce570c5 --- /dev/null +++ b/v0.6.17/examples/polarizability.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Polarizability by linear response\n", + "\n", + "We compute the polarizability of a Helium atom. The polarizability\n", + "is defined as the change in dipole moment\n", + "$$\n", + "μ = ∫ r ρ(r) dr\n", + "$$\n", + "with respect to a small uniform electric field $E = -x$.\n", + "\n", + "We compute this in two ways: first by finite differences (applying a\n", + "finite electric field), then by linear response. Note that DFTK is\n", + "not really adapted to isolated atoms because it uses periodic\n", + "boundary conditions. Nevertheless we can simply embed the Helium\n", + "atom in a large enough box (although this is computationally wasteful).\n", + "\n", + "As in other tests, this is not fully converged, convergence\n", + "parameters were simply selected for fast execution on CI," + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "\n", + "a = 10.\n", + "lattice = a * I(3) # cube of $a$ bohrs\n", + "# Helium at the center of the box\n", + "atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n", + "positions = [[1/2, 1/2, 1/2]]\n", + "\n", + "\n", + "kgrid = [1, 1, 1] # no k-point sampling for an isolated system\n", + "Ecut = 30\n", + "tol = 1e-8\n", + "\n", + "# dipole moment of a given density (assuming the current geometry)\n", + "function dipole(basis, ρ)\n", + " rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]\n", + " sum(rr .* ρ) * basis.dvol\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "## Using finite differences\n", + "We first compute the polarizability by finite differences.\n", + "First compute the dipole moment at rest:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770352397690 -0.53 8.0 167ms\n", + " 2 -2.771684875513 -2.88 -1.31 1.0 91.7ms\n", + " 3 -2.771714209873 -4.53 -2.53 1.0 91.4ms\n", + " 4 -2.771714664700 -6.34 -3.43 1.0 94.6ms\n", + " 5 -2.771714713982 -7.31 -3.98 2.0 113ms\n", + " 6 -2.771714715214 -8.91 -5.29 1.0 96.4ms\n", + " 7 -2.771714715249 -10.47 -5.42 2.0 116ms\n", + " 8 -2.771714715250 -11.98 -5.94 1.0 102ms\n", + " 9 -2.771714715250 -13.20 -7.23 1.0 112ms\n", + " 10 -2.771714715250 -14.01 -7.37 2.0 130ms\n", + " 11 -2.771714715250 -14.15 -7.91 1.0 104ms\n", + " 12 -2.771714715250 -13.86 -7.61 1.0 115ms\n", + " 13 -2.771714715250 + -13.64 -8.15 1.0 114ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "-0.00013457335850779328" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "model = model_LDA(lattice, atoms, positions; symmetries=false)\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "res = self_consistent_field(basis; tol)\n", + "μref = dipole(basis, res.ρ)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Then in a small uniform field:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -2.770367268371 -0.53 9.0 2.02s\n", + " 2 -2.771771964393 -2.85 -1.30 1.0 148ms\n", + " 3 -2.771801517436 -4.53 -2.68 1.0 92.7ms\n", + " 4 -2.771802073186 -6.26 -4.07 2.0 117ms\n", + " 5 -2.771802074425 -8.91 -4.95 1.0 102ms\n", + " 6 -2.771802074475 -10.30 -5.57 2.0 120ms\n", + " 7 -2.771802074476 -12.05 -6.06 1.0 102ms\n", + " 8 -2.771802074476 -13.15 -6.87 1.0 102ms\n", + " 9 -2.771802074476 -14.65 -6.96 2.0 136ms\n", + " 10 -2.771802074476 -13.81 -7.84 1.0 112ms\n", + " 11 -2.771802074476 + -14.21 -8.54 2.0 117ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "0.017612221445125142" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "ε = .01\n", + "model_ε = model_LDA(lattice, atoms, positions;\n", + " extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n", + " symmetries=false)\n", + "basis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)\n", + "res_ε = self_consistent_field(basis_ε; tol)\n", + "με = dipole(basis_ε, res_ε.ρ)" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Reference dipole: -0.00013457335850779328\n", + "Displaced dipole: 0.017612221445125142\n", + "Polarizability : 1.7746794803632935\n" + ] + } + ], + "cell_type": "code", + "source": [ + "polarizability = (με - μref) / ε\n", + "\n", + "println(\"Reference dipole: $μref\")\n", + "println(\"Displaced dipole: $με\")\n", + "println(\"Polarizability : $polarizability\")" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "The result on more converged grids is very close to published results.\n", + "For example [DOI 10.1039/C8CP03569E](https://doi.org/10.1039/C8CP03569E)\n", + "quotes **1.65** with LSDA and **1.38** with CCSD(T)." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Using linear response\n", + "Now we use linear response to compute this analytically; we refer to standard\n", + "textbooks for the formalism. In the following, $χ_0$ is the\n", + "independent-particle polarizability, and $K$ the\n", + "Hartree-exchange-correlation kernel. We denote with $δV_{\\rm ext}$ an external\n", + "perturbing potential (like in this case the uniform electric field). Then:\n", + "$$\n", + "δρ = χ_0 δV = χ_0 (δV_{\\rm ext} + K δρ),\n", + "$$\n", + "which implies\n", + "$$\n", + "δρ = (1-χ_0 K)^{-1} χ_0 δV_{\\rm ext}.\n", + "$$\n", + "From this we identify the polarizability operator to be $χ = (1-χ_0 K)^{-1} χ_0$.\n", + "Numerically, we apply $χ$ to $δV = -x$ by solving a linear equation\n", + "(the Dyson equation) iteratively." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "WARNING: using KrylovKit.basis in module ##316 conflicts with an existing identifier.\n", + "[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920789756e-01\n", + "[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766551483364e-03\n", + "[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852767052900e-04\n", + "[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694603653596e-06\n", + "[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088789167237e-08\n", + "[ Info: GMRES linsolve in iter 1; step 6: normres = 6.295265061800e-11\n", + "[ Info: GMRES linsolve in iter 1; step 7: normres = 1.296181081485e-12\n", + "[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 1.296181081485e-12\n", + "[ Info: GMRES linsolve in iter 2; step 1: normres = 1.080060911685e-10\n", + "[ Info: GMRES linsolve in iter 2; step 2: normres = 1.609719286048e-11\n", + "[ Info: GMRES linsolve in iter 2; step 3: normres = 3.448581793603e-13\n", + "[ Info: GMRES linsolve in iter 2; finished at step 3: normres = 3.448581793603e-13\n", + "┌ Info: GMRES linsolve converged at iteration 2, step 3:\n", + "│ * norm of residual = 3.4484678873994404e-13\n", + "└ * number of operations = 12\n", + "Non-interacting polarizability: 1.9257125525535703\n", + "Interacting polarizability: 1.773654876333089\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using KrylovKit\n", + "\n", + "# Apply $(1- χ_0 K)$\n", + "function dielectric_operator(δρ)\n", + " δV = apply_kernel(basis, δρ; res.ρ)\n", + " χ0δV = apply_χ0(res, δV)\n", + " δρ - χ0δV\n", + "end\n", + "\n", + "# `δVext` is the potential from a uniform field interacting with the dielectric dipole\n", + "# of the density.\n", + "δVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]\n", + "δVext = cat(δVext; dims=4)\n", + "\n", + "# Apply $χ_0$ once to get non-interacting dipole\n", + "δρ_nointeract = apply_χ0(res, δVext)\n", + "\n", + "# Solve Dyson equation to get interacting dipole\n", + "δρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]\n", + "\n", + "println(\"Non-interacting polarizability: $(dipole(basis, δρ_nointeract))\")\n", + "println(\"Interacting polarizability: $(dipole(basis, δρ))\")" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "As expected, the interacting polarizability matches the finite difference\n", + "result. The non-interacting polarizability is higher." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/polarizability/index.html b/v0.6.17/examples/polarizability/index.html new file mode 100644 index 0000000000..da0faaf121 --- /dev/null +++ b/v0.6.17/examples/polarizability/index.html @@ -0,0 +1,74 @@ + +Polarizability by linear response · DFTK.jl

    Polarizability by linear response

    We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment

    \[μ = ∫ r ρ(r) dr\]

    with respect to a small uniform electric field $E = -x$.

    We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).

    As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,

    using DFTK
    +using LinearAlgebra
    +
    +a = 10.
    +lattice = a * I(3)  # cube of ``a`` bohrs
    +# Helium at the center of the box
    +atoms     = [ElementPsp(:He; psp=load_psp("hgh/lda/He-q2"))]
    +positions = [[1/2, 1/2, 1/2]]
    +
    +
    +kgrid = [1, 1, 1]  # no k-point sampling for an isolated system
    +Ecut = 30
    +tol = 1e-8
    +
    +# dipole moment of a given density (assuming the current geometry)
    +function dipole(basis, ρ)
    +    rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]
    +    sum(rr .* ρ) * basis.dvol
    +end;

    Using finite differences

    We first compute the polarizability by finite differences. First compute the dipole moment at rest:

    model = model_LDA(lattice, atoms, positions; symmetries=false)
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +res   = self_consistent_field(basis; tol)
    +μref  = dipole(basis, res.ρ)
    -0.00013457287291860357

    Then in a small uniform field:

    ε = .01
    +model_ε = model_LDA(lattice, atoms, positions;
    +                    extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],
    +                    symmetries=false)
    +basis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)
    +res_ε   = self_consistent_field(basis_ε; tol)
    +με = dipole(basis_ε, res_ε.ρ)
    0.017612218583496497
    polarizability = (με - μref) / ε
    +
    +println("Reference dipole:  $μref")
    +println("Displaced dipole:  $με")
    +println("Polarizability :   $polarizability")
    Reference dipole:  -0.00013457287291860357
    +Displaced dipole:  0.017612218583496497
    +Polarizability :   1.77467914564151

    The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).

    Using linear response

    Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, $χ_0$ is the independent-particle polarizability, and $K$ the Hartree-exchange-correlation kernel. We denote with $δV_{\rm ext}$ an external perturbing potential (like in this case the uniform electric field). Then:

    \[δρ = χ_0 δV = χ_0 (δV_{\rm ext} + K δρ),\]

    which implies

    \[δρ = (1-χ_0 K)^{-1} χ_0 δV_{\rm ext}.\]

    From this we identify the polarizability operator to be $χ = (1-χ_0 K)^{-1} χ_0$. Numerically, we apply $χ$ to $δV = -x$ by solving a linear equation (the Dyson equation) iteratively.

    using KrylovKit
    +
    +# Apply ``(1- χ_0 K)``
    +function dielectric_operator(δρ)
    +    δV = apply_kernel(basis, δρ; res.ρ)
    +    χ0δV = apply_χ0(res, δV)
    +    δρ - χ0δV
    +end
    +
    +# `δVext` is the potential from a uniform field interacting with the dielectric dipole
    +# of the density.
    +δVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]
    +δVext = cat(δVext; dims=4)
    +
    +# Apply ``χ_0`` once to get non-interacting dipole
    +δρ_nointeract = apply_χ0(res, δVext)
    +
    +# Solve Dyson equation to get interacting dipole
    +δρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]
    +
    +println("Non-interacting polarizability: $(dipole(basis, δρ_nointeract))")
    +println("Interacting polarizability:     $(dipole(basis, δρ))")
    WARNING: using KrylovKit.basis in module Main conflicts with an existing identifier.
    +[ Info: GMRES linsolve in iter 1; step 1: normres = 2.493920656061e-01
    +[ Info: GMRES linsolve in iter 1; step 2: normres = 3.766551052404e-03
    +[ Info: GMRES linsolve in iter 1; step 3: normres = 2.852762290963e-04
    +[ Info: GMRES linsolve in iter 1; step 4: normres = 4.694593916760e-06
    +[ Info: GMRES linsolve in iter 1; step 5: normres = 1.088787547057e-08
    +[ Info: GMRES linsolve in iter 1; step 6: normres = 6.274178725168e-11
    +[ Info: GMRES linsolve in iter 1; step 7: normres = 6.825216047620e-13
    +[ Info: GMRES linsolve in iter 1; finished at step 7: normres = 6.825216047620e-13
    +[ Info: GMRES linsolve in iter 2; step 1: normres = 1.558776224525e-09
    +[ Info: GMRES linsolve in iter 2; step 2: normres = 3.336908270974e-11
    +[ Info: GMRES linsolve in iter 2; step 3: normres = 4.823592036690e-12
    +[ Info: GMRES linsolve in iter 2; step 4: normres = 6.152712841239e-14
    +[ Info: GMRES linsolve in iter 2; finished at step 4: normres = 6.152712841239e-14
    +┌ Info: GMRES linsolve converged at iteration 2, step 4:
    +*  norm of residual = 6.134854267042583e-14
    +*  number of operations = 13
    +Non-interacting polarizability: 1.9257125529355015
    +Interacting polarizability:     1.7736548732611497

    As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.

    diff --git a/v0.6.17/examples/pseudopotentials.ipynb b/v0.6.17/examples/pseudopotentials.ipynb new file mode 100644 index 0000000000..4ff541dd85 --- /dev/null +++ b/v0.6.17/examples/pseudopotentials.ipynb @@ -0,0 +1,685 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Pseudopotentials\n", + "\n", + "In this example, we'll look at how to use various pseudopotential (PSP)\n", + "formats in DFTK and discuss briefly the utility and importance of\n", + "pseudopotentials.\n", + "\n", + "Currently, DFTK supports norm-conserving (NC) PSPs in\n", + "separable (Kleinman-Bylander) form. Two file formats can currently\n", + "be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs\n", + "and numeric Unified Pseudopotential Format (UPF) PSPs.\n", + "\n", + "In brief, the pseudopotential approach replaces the all-electron\n", + "atomic potential with an effective atomic potential. In this pseudopotential,\n", + "tightly-bound core electrons are completely eliminated (\"frozen\") and\n", + "chemically-active valence electron wavefunctions are replaced with\n", + "smooth pseudo-wavefunctions whose Fourier representations decay quickly.\n", + "Both these transformations aim at reducing the number of Fourier modes required\n", + "to accurately represent the wavefunction of the system, greatly increasing\n", + "computational efficiency.\n", + "\n", + "Different PSP generation codes produce various file formats which contain the\n", + "same general quantities required for pesudopotential evaluation. HGH PSPs\n", + "are constructed from a fixed functional form based on Gaussians, and the files\n", + "simply tablulate various coefficients fitted for a given element. UPF PSPs\n", + "take a more flexible approach where the functional form used to generate the\n", + "PSP is arbitrary, and the resulting functions are tabulated on a radial grid\n", + "in the file. The UPF file format is documented\n", + "[on the Quantum Espresso Website](http://pseudopotentials.quantum-espresso.org/home/unified-pseudopotential-format).\n", + "\n", + "In this example, we will compare the convergence of an analytical HGH PSP with\n", + "a modern numeric norm-conserving PSP in UPF format from\n", + "[PseudoDojo](http://www.pseudo-dojo.org/).\n", + "Then, we will compare the bandstructure at the converged parameters calculated\n", + "using the two PSPs." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Unitful\n", + "using Plots\n", + "using LazyArtifacts\n", + "import Main: @artifact_str # hide" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Here, we will use a Perdew-Wang LDA PSP from [PseudoDojo](http://www.pseudo-dojo.org/),\n", + "which is available in the\n", + "[JuliaMolSim PseudoLibrary](https://github.com/JuliaMolSim/PseudoLibrary).\n", + "Directories in PseudoLibrary correspond to artifacts that you can load using `artifact`\n", + "strings which evaluate to a filepath on your local machine where the artifact has been\n", + "downloaded.\n", + "\n", + "!!! note \"Using the PseudoLibrary in your own calculations\"\n", + " Instructions for using the [PseudoLibrary](https://github.com/JuliaMolSim/PseudoLibrary)\n", + " in your own calculations can be found in its documentation." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We load the HGH and UPF PSPs using `load_psp`, which determines the\n", + "file format using the file extension. The `artifact` string literal resolves to the\n", + "directory where the file is stored by the Artifacts system. So, if you have your own\n", + "pseudopotential files, you can just provide the path to them as well." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: using Pkg instead of using LazyArtifacts is deprecated\n", + "│ caller = eval at boot.jl:385 [inlined]\n", + "└ @ Core ./boot.jl:385\n", + " Downloading artifact: pd_nc_sr_lda_standard_0.4.1_upf\n" + ] + } + ], + "cell_type": "code", + "source": [ + "psp_hgh = load_psp(\"hgh/lda/si-q4.hgh\");\n", + "psp_upf = load_psp(artifact\"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf\");" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "First, we'll take a look at the energy cutoff convergence of these two pseudopotentials.\n", + "For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and\n", + "SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "The converged cutoffs are 26 Ha and 18 Ha for the HGH\n", + "and UPF pseudos respectively. We see that the HGH pseudopotential\n", + "is much *harder*, i.e. it requires a higher energy cutoff, than the UPF PSP. In general,\n", + "numeric pseudopotentials tend to be softer than analytical pseudos because of the\n", + "flexibility of sampling arbitrary functions on a grid." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Next, to see that the different pseudopotentials give reasonbly similar results,\n", + "we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though\n", + "the convered cutoffs are higher, we perform these calculations with a cutoff of\n", + "12 Ha for both PSPs." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "function run_bands(psp)\n", + " a = 10.26 # Silicon lattice constant in Bohr\n", + " lattice = a / 2 * [[0 1 1.];\n", + " [1 0 1.];\n", + " [1 1 0.]]\n", + " Si = ElementPsp(:Si; psp)\n", + " atoms = [Si, Si]\n", + " positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + " # These are (as you saw above) completely unconverged parameters\n", + " model = model_LDA(lattice, atoms, positions; temperature=1e-2)\n", + " basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))\n", + "\n", + " scfres = self_consistent_field(basis; tol=1e-4)\n", + " bandplot = plot_bandstructure(compute_bands(scfres))\n", + " (; scfres, bandplot)\n", + "end;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "The SCF and bandstructure calculations can then be performed using the two PSPs,\n", + "where we notice in particular the difference in total energies." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.921030847996 -0.69 5.6 387ms\n", + " 2 -7.925548097082 -2.35 -1.22 1.8 220ms\n", + " 3 -7.926171536732 -3.21 -2.42 3.0 270ms\n", + " 4 -7.926189229170 -4.75 -3.03 3.2 291ms\n", + " 5 -7.926189820561 -6.23 -4.07 2.6 283ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1590085 \n AtomicLocal -2.1424216\n AtomicNonlocal 1.6042744 \n Ewald -8.4004648\n PspCorrection -0.2948928\n Hartree 0.5515592 \n Xc -2.4000904\n Entropy -0.0031624\n\n total -7.926189820561" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "result_hgh = run_bands(psp_hgh)\n", + "result_hgh.scfres.energies" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -8.515420387789 -0.93 6.0 1.13s\n", + " 2 -8.518508874263 -2.51 -1.44 2.1 1.03s\n", + " 3 -8.518865557068 -3.45 -2.81 2.4 260ms\n", + " 4 -8.518884583707 -4.72 -3.20 4.8 388ms\n", + " 5 -8.518884691215 -6.97 -3.55 2.0 228ms\n", + " 6 -8.518884733042 -7.38 -4.68 1.8 223ms\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.0954158 \n AtomicLocal -2.3650733\n AtomicNonlocal 1.3082446 \n Ewald -8.4004648\n PspCorrection 0.3951970 \n Hartree 0.5521778 \n Xc -3.1011624\n Entropy -0.0032194\n\n total -8.518884733042" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "result_upf = run_bands(psp_upf)\n", + "result_upf.scfres.energies" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "But while total energies are not physical and thus allowed to differ,\n", + "the bands (as an example for a physical quantity) are very similar for both pseudos:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=116}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "plot(result_hgh.bandplot, result_upf.bandplot, titles=[\"HGH\" \"UPF\"], size=(800, 400))" + ], + "metadata": {}, + "execution_count": 6 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/pseudopotentials/b6149c15.svg b/v0.6.17/examples/pseudopotentials/b6149c15.svg new file mode 100644 index 0000000000..808d36ca68 --- /dev/null +++ b/v0.6.17/examples/pseudopotentials/b6149c15.svg @@ -0,0 +1,200 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/pseudopotentials/index.html b/v0.6.17/examples/pseudopotentials/index.html new file mode 100644 index 0000000000..9ed78f1545 --- /dev/null +++ b/v0.6.17/examples/pseudopotentials/index.html @@ -0,0 +1,44 @@ + +Pseudopotentials · DFTK.jl

    Pseudopotentials

    In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.

    Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.

    In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated ("frozen") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.

    Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.

    In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.

    using DFTK
    +using Unitful
    +using Plots
    +using LazyArtifacts

    Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.

    Using the PseudoLibrary in your own calculations

    Instructions for using the PseudoLibrary in your own calculations can be found in its documentation.

    We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.

    psp_hgh  = load_psp("hgh/lda/si-q4.hgh");
    +psp_upf  = load_psp(artifact"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf");

    First, we'll take a look at the energy cutoff convergence of these two pseudopotentials. For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached.

    The converged cutoffs are 26 Ha and 18 Ha for the HGH and UPF pseudos respectively. We see that the HGH pseudopotential is much harder, i.e. it requires a higher energy cutoff, than the UPF PSP. In general, numeric pseudopotentials tend to be softer than analytical pseudos because of the flexibility of sampling arbitrary functions on a grid.

    Next, to see that the different pseudopotentials give reasonbly similar results, we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though the convered cutoffs are higher, we perform these calculations with a cutoff of 12 Ha for both PSPs.

    function run_bands(psp)
    +    a = 10.26  # Silicon lattice constant in Bohr
    +    lattice = a / 2 * [[0 1 1.];
    +                       [1 0 1.];
    +                       [1 1 0.]]
    +    Si = ElementPsp(:Si; psp)
    +    atoms     = [Si, Si]
    +    positions = [ones(3)/8, -ones(3)/8]
    +
    +    # These are (as you saw above) completely unconverged parameters
    +    model = model_LDA(lattice, atoms, positions; temperature=1e-2)
    +    basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))
    +
    +    scfres   = self_consistent_field(basis; tol=1e-4)
    +    bandplot = plot_bandstructure(compute_bands(scfres))
    +    (; scfres, bandplot)
    +end;

    The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.

    result_hgh = run_bands(psp_hgh)
    +result_hgh.scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1589917 
    +    AtomicLocal         -2.1423819
    +    AtomicNonlocal      1.6042615 
    +    Ewald               -8.4004648
    +    PspCorrection       -0.2948928
    +    Hartree             0.5515435 
    +    Xc                  -2.4000844
    +    Entropy             -0.0031627
    +
    +    total               -7.926189822632
    result_upf = run_bands(psp_upf)
    +result_upf.scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.0954127 
    +    AtomicLocal         -2.3650655
    +    AtomicNonlocal      1.3082417 
    +    Ewald               -8.4004648
    +    PspCorrection       0.3951970 
    +    Hartree             0.5521746 
    +    Xc                  -3.1011610
    +    Entropy             -0.0032195
    +
    +    total               -8.518884733385

    But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:

    plot(result_hgh.bandplot, result_upf.bandplot, titles=["HGH" "UPF"], size=(800, 400))
    Example block output
    diff --git a/v0.6.17/examples/scf_callbacks.ipynb b/v0.6.17/examples/scf_callbacks.ipynb new file mode 100644 index 0000000000..eb1d7c672a --- /dev/null +++ b/v0.6.17/examples/scf_callbacks.ipynb @@ -0,0 +1,379 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Monitoring self-consistent field calculations\n", + "\n", + "The `self_consistent_field` function takes as the `callback`\n", + "keyword argument one function to be called after each iteration.\n", + "This function gets passed the complete internal state of the SCF\n", + "solver and can thus be used both to monitor and debug the iterations\n", + "as well as to quickly patch it with additional functionality.\n", + "\n", + "This example discusses a few aspects of the `callback` function\n", + "taking again our favourite silicon example." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "We setup silicon in an LDA model using the ASE interface\n", + "to build a bulk silicon lattice,\n", + "see Input and output formats for more details." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using ASEconvert\n", + "\n", + "system = pyconvert(AbstractSystem, ase.build.bulk(\"Si\"))\n", + "model = model_LDA(attach_psp(system; Si=\"hgh/pbe/si-q4.hgh\"))\n", + "basis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "DFTK already defines a few callback functions for standard\n", + "tasks. One example is the usual convergence table,\n", + "which is defined in the callback `ScfDefaultCallback`.\n", + "Another example is `ScfSaveCheckpoints`, which stores the state\n", + "of an SCF at each iterations to allow resuming from a failed\n", + "calculation at a later point.\n", + "See Saving SCF results on disk and SCF checkpoints for details\n", + "how to use checkpointing with DFTK." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this example we define a custom callback, which plots\n", + "the change in density at each SCF iteration after the SCF\n", + "has finished. This example is a bit artificial, since the norms\n", + "of all density differences is available as `scfres.history_Δρ`\n", + "after the SCF has finished and could be directly plotted, but\n", + "the following nicely illustrates the use of callbacks in DFTK." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "To enable plotting we first define the empty canvas\n", + "and an empty container for all the density differences:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Plots\n", + "p = plot(; yaxis=:log)\n", + "density_differences = Float64[];" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "The callback function itself gets passed a named tuple\n", + "similar to the one returned by `self_consistent_field`,\n", + "which contains the input and output density of the SCF step\n", + "as `ρin` and `ρout`. Since the callback gets called\n", + "both during the SCF iterations as well as after convergence\n", + "just before `self_consistent_field` finishes we can both\n", + "collect the data and initiate the plotting in one function." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using LinearAlgebra\n", + "\n", + "function plot_callback(info)\n", + " if info.stage == :finalize\n", + " plot!(p, density_differences, label=\"|ρout - ρin|\", markershape=:x)\n", + " else\n", + " push!(density_differences, norm(info.ρout - info.ρin))\n", + " end\n", + " info\n", + "end\n", + "callback = ScfDefaultCallback() ∘ plot_callback;" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Notice that for constructing the `callback` function we chained the `plot_callback`\n", + "(which does the plotting) with the `ScfDefaultCallback`. The latter is the function\n", + "responsible for printing the usual convergence table. Therefore if we simply did\n", + "`callback=plot_callback` the SCF would go silent. The chaining of both callbacks\n", + "(`plot_callback` for plotting and `ScfDefaultCallback()` for the convergence table)\n", + "makes sure both features are enabled. We run the SCF with the chained callback …" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) α Diag Δtime\n", + "--- --------------- --------- --------- ---- ---- ------\n", + " 1 -7.775299332452 -0.70 0.80 4.2 91.7ms\n", + " 2 -7.779122919940 -2.42 -1.51 0.80 1.0 72.7ms\n", + " 3 -7.779315911977 -3.71 -2.60 0.80 1.2 17.5ms\n", + " 4 -7.779349876610 -4.47 -2.81 0.80 2.5 20.7ms\n", + " 5 -7.779350302775 -6.37 -2.86 0.80 1.0 17.1ms\n", + " 6 -7.779350840312 -6.27 -4.22 0.80 1.0 17.3ms\n", + " 7 -7.779350856030 -7.80 -4.54 0.80 2.5 21.6ms\n", + " 8 -7.779350856119 -10.05 -5.14 0.80 1.0 17.7ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "scfres = self_consistent_field(basis; tol=1e-5, callback);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "… and show the plot" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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rgLqoaysbP78+UpXAfVz7Nix9evXK10F1K1tM/p651tptW7duuPHjxNCbBn5III5GGLrA4LQFH3yySfl5eVKVwH1cPHixYULFypdBdTP/v37N27cqHQVUD8bN27cv3+/Yc+JIAQAAKuGIAQAAKuGIAQAAKtGZVmBxwHf1+nTpzt16uTn56d0IcorKCjw9/fnOPwzxWxotdrLly/j/17zUlFRUVlZ6eHhoXQhUA9FRUW2traOjo56vn/MmDHvvffew99jQkFICDl79qzSJZiEqqoqtVqtdBVQP/jUzI4kSaIo2tgY4vkFYCxarZYxpv84wcfHx87O7uHvMa0gBAAAMDJMvgEAgFVDEAIAgFVDEAIAgFVDEAIAgFXDE+pNiCzLBw4cSE1NLS4u7tSp05gxY1QqldJFgb5Onz6dnp4eHx/v6+urdC1QN0EQfv7556ysLDc3t5EjR4aEhChdEdRBluV169bt2rXL1tZ26NCh4eHhhjozRoQmpLCwcNSoUdevX/f3958/f35sbKwoikoXBXoRBGHcuHHJycm5ublK1wJ1EwQhLi7uq6++8vPzEwRhz549SlcEdZs5c+a0adOCgoLs7e1jYmJSU1MNdWaMCE2Ir69vXl4ez/OEkAkTJnh6eh47dqxz585K1wV1++CDDwYNGnTu3DmlCwG9LFq06NKlS4cOHdL9dQOzsHLlyvfff/+JJ54ghBQWFq5atSo2NtYgZ8aI0ITwPF/z11IQBFEU9b97Aijo5MmTK1aseOONN5QuBPS1cePGcePGbdq0ad68eRgOmouQkJDDhw8TQrRa7bFjxzp27GioMyMITVRycvKIESOCgoKULgTqIEnSM8888+WXX9ra2ipdC+grPz9/wYIFq1atKi8vHzly5Oeff650RVC3b775Ji0tLTAw0NfXNyAg4PnnnzfUmTEtYIrefvvtP/74Y/v27UoXAnWbO3duaGhoZGSk0oVAPXAc1759+++//54QEhER8eSTT77wwgtKFwV1eOmll/z9/b///vuysrLJkycvXLhw0qRJBjkzbrFmcmbNmrV8+fL09HQvLy+la4G6hYWFaTQaBwcHQsjRo0cDAgJee+01Q/39hCaSkJAQEhIyZ84cQsj58+dbtWpVVlbm5OSkdF3wQJWVlfb29idPnmzXrh0hZNGiRfPnzzfUE3oxIjQtc+fOXbp06fbt25GC5uLHH3+8efOm7vXAgQOnTZs2ZMgQZUuCOiUmJi5btkyWZUrp3r17/f39kYImTq1WOzo6njlzRheEZ86ccXd3N9TJMSI0Ibm5ucHBwQEBAW5ubrojH3/8cd++fZWtCvTn7e39008/xcTEKF0I1EGj0fTv31+tVgcFBa1du3bBggXDhg1Tuiiow+effz5jxowRI0aUlJSkp6evXbu2T58+BjkzgtCEaDSanJycO48EBQW5uLgoVQ/Ul25qFGMLs6DVatPT0ysqKnr27Il7IJiL/Pz8Q4cO2dra9u7d29XV1VCnRRACAIBVw/YJAACwaghCAACwaghCAACwaghCAACwaghCAACwaghCAACwaghCAACwaghCAACwaghCAACwaghCAACwaghCAACwav8P7kElgaStLqQAAAAASUVORK5CYII=", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "p" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "The `info` object passed to the callback contains not just the densities\n", + "but also the complete Bloch wave (in `ψ`), the `occupation`, band `eigenvalues`\n", + "and so on.\n", + "See [`src/scf/self_consistent_field.jl`](https://dftk.org/blob/master/src/scf/self_consistent_field.jl#L101)\n", + "for all currently available keys.\n", + "\n", + "!!! tip \"Debugging with callbacks\"\n", + " Very handy for debugging SCF algorithms is to employ callbacks\n", + " with an `@infiltrate` from [Infiltrator.jl](https://github.com/JuliaDebug/Infiltrator.jl)\n", + " to interactively monitor what is happening each SCF step." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/scf_callbacks/bbbf538b.svg b/v0.6.17/examples/scf_callbacks/bbbf538b.svg new file mode 100644 index 0000000000..1527ae2dec --- /dev/null +++ b/v0.6.17/examples/scf_callbacks/bbbf538b.svg @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/scf_callbacks/index.html b/v0.6.17/examples/scf_callbacks/index.html new file mode 100644 index 0000000000..5c17c828af --- /dev/null +++ b/v0.6.17/examples/scf_callbacks/index.html @@ -0,0 +1,28 @@ + +Monitoring self-consistent field calculations · DFTK.jl

    Monitoring self-consistent field calculations

    The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.

    This example discusses a few aspects of the callback function taking again our favourite silicon example.

    We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.

    using DFTK
    +using ASEconvert
    +
    +system = pyconvert(AbstractSystem, ase.build.bulk("Si"))
    +model  = model_LDA(attach_psp(system; Si="hgh/pbe/si-q4.hgh"))
    +basis  = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);

    DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfSaveCheckpoints, which stores the state of an SCF at each iterations to allow resuming from a failed calculation at a later point. See Saving SCF results on disk and SCF checkpoints for details how to use checkpointing with DFTK.

    In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. This example is a bit artificial, since the norms of all density differences is available as scfres.history_Δρ after the SCF has finished and could be directly plotted, but the following nicely illustrates the use of callbacks in DFTK.

    To enable plotting we first define the empty canvas and an empty container for all the density differences:

    using Plots
    +p = plot(; yaxis=:log)
    +density_differences = Float64[];

    The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.

    using LinearAlgebra
    +
    +function plot_callback(info)
    +    if info.stage == :finalize
    +        plot!(p, density_differences, label="|ρout - ρin|", markershape=:x)
    +    else
    +        push!(density_differences, norm(info.ρout - info.ρin))
    +    end
    +    info
    +end
    +callback = ScfDefaultCallback() ∘ plot_callback;

    Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback. The latter is the function responsible for printing the usual convergence table. Therefore if we simply did callback=plot_callback the SCF would go silent. The chaining of both callbacks (plot_callback for plotting and ScfDefaultCallback() for the convergence table) makes sure both features are enabled. We run the SCF with the chained callback …

    scfres = self_consistent_field(basis; tol=1e-5, callback);
    n     Energy            log10(ΔE)   log10(Δρ)   α      Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ----   ------
    +  1   -7.775321059097                   -0.70   0.80    4.8    105ms
    +  2   -7.779130779010       -2.42       -1.51   0.80    1.0   72.7ms
    +  3   -7.779317164180       -3.73       -2.60   0.80    1.2   17.3ms
    +  4   -7.779349821340       -4.49       -2.81   0.80    2.2   20.0ms
    +  5   -7.779350284739       -6.33       -2.86   0.80    1.0   17.1ms
    +  6   -7.779350838015       -6.26       -4.17   0.80    1.0   17.2ms
    +  7   -7.779350855914       -7.75       -4.42   0.80    2.2   20.5ms
    +  8   -7.779350856111       -9.71       -5.18   0.80    1.0   17.2ms

    … and show the plot

    p
    Example block output

    The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.

    Debugging with callbacks

    Very handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.

    diff --git a/v0.6.17/examples/supercells.ipynb b/v0.6.17/examples/supercells.ipynb new file mode 100644 index 0000000000..ae7e260ce6 --- /dev/null +++ b/v0.6.17/examples/supercells.ipynb @@ -0,0 +1,343 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Creating and modelling metallic supercells\n", + "\n", + "In this section we will be concerned with modelling supercells of aluminium.\n", + "When dealing with periodic problems there is no unique definition of the\n", + "lattice: Clearly any duplication of the lattice along an axis is also a valid\n", + "repetitive unit to describe exactly the same system.\n", + "This is exactly what a **supercell** is: An $n$-fold repetition along one of the\n", + "axes of the original lattice.\n", + "\n", + "The following code achieves this for aluminium:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[32m\u001b[1m CondaPkg \u001b[22m\u001b[39m\u001b[0mFound dependencies: /home/runner/.julia/packages/ASEconvert/CNQ1A/CondaPkg.toml\n", + "\u001b[32m\u001b[1m CondaPkg \u001b[22m\u001b[39m\u001b[0mFound dependencies: /home/runner/.julia/packages/PythonCall/wXfah/CondaPkg.toml\n", + "\u001b[32m\u001b[1m CondaPkg \u001b[22m\u001b[39m\u001b[0mDependencies already up to date\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using LinearAlgebra\n", + "using ASEconvert\n", + "\n", + "function aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])\n", + " a = 7.65339\n", + " lattice = a * Matrix(I, 3, 3)\n", + " Al = ElementPsp(:Al; psp=load_psp(\"hgh/lda/al-q3\"))\n", + " atoms = [Al, Al, Al, Al]\n", + " positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]\n", + " unit_cell = periodic_system(lattice, atoms, positions)\n", + "\n", + " # Make supercell in ASE:\n", + " # We convert our lattice to the conventions used in ASE, make the supercell\n", + " # and then convert back ...\n", + " supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))\n", + " supercell = pyconvert(AbstractSystem, supercell_ase)\n", + "\n", + " # Unfortunately right now the conversion to ASE drops the pseudopotential information,\n", + " # so we need to reattach it:\n", + " supercell = attach_psp(supercell; Al=\"hgh/lda/al-q3\")\n", + "\n", + " # Construct an LDA model and discretise\n", + " # Note: We disable symmetries explicitly here. Otherwise the problem sizes\n", + " # we are able to run on the CI are too simple to observe the numerical\n", + " # instabilities we want to trigger here.\n", + " model = model_LDA(supercell; temperature=1e-3, symmetries=false)\n", + " PlaneWaveBasis(model; Ecut, kgrid)\n", + "end;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "As part of the code we are using a routine inside the ASE,\n", + "the [atomistic simulation environment](https://wiki.fysik.dtu.dk/ase/index.html)\n", + "for creating the supercell and make use of the two-way interoperability of\n", + "DFTK and ASE. For more details on this aspect see the documentation\n", + "on Input and output formats." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "Write an example supercell structure to a file to plot it:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Python: None" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "setup = aluminium_setup(5)\n", + "convert_ase(periodic_system(setup.model)).write(\"al_supercell.png\")" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "As we will see in this notebook the modelling of a system generally becomes\n", + "harder if the system becomes larger.\n", + "\n", + "- This sounds like a trivial statement as *per se* the cost per SCF step increases\n", + " as the system (and thus $N$) gets larger.\n", + "- But there is more to it:\n", + " If one is not careful also the *number of SCF iterations* increases\n", + " as the system gets larger.\n", + "- The aim of a proper computational treatment of such supercells is therefore\n", + " to ensure that the **number of SCF iterations remains constant** when the\n", + " system size increases." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "For achieving the latter DFTK by default employs the `LdosMixing`\n", + "preconditioner [^HL2021] during the SCF iterations. This mixing approach is\n", + "completely parameter free, but still automatically adapts to the treated\n", + "system in order to efficiently prevent charge sloshing. As a result,\n", + "modelling aluminium slabs indeed takes roughly the same number of SCF iterations\n", + "irrespective of the supercell size:\n", + "\n", + "[^HL2021]:\n", + " M. F. Herbst and A. Levitt.\n", + " *Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory.*\n", + " J. Phys. Cond. Matt *33* 085503 (2021). [ArXiv:2009.01665](https://arxiv.org/abs/2009.01665)" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -8.298635879753 -0.85 5.9 239ms\n", + " 2 -8.300221202907 -2.80 -1.25 2.0 100ms\n", + " 3 -8.300437489216 -3.66 -1.85 1.9 100ms\n", + " 4 -8.300459388301 -4.66 -2.62 1.0 88.6ms\n", + " 5 -8.300464233595 -5.31 -2.99 2.5 125ms\n", + " 6 -8.300464585732 -6.45 -3.21 1.5 100ms\n", + " 7 -8.300464620833 -7.45 -3.47 1.1 87.4ms\n", + " 8 -8.300464632499 -7.93 -3.66 1.6 96.9ms\n", + " 9 -8.300464637741 -8.28 -3.79 1.0 92.2ms\n", + " 10 -8.300464641814 -8.39 -4.02 1.0 84.8ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(1); tol=1e-4);" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -16.67559237249 -0.70 6.1 495ms\n", + " 2 -16.67878774751 -2.50 -1.14 1.0 209ms\n", + " 3 -16.67921713692 -3.37 -1.87 3.0 262ms\n", + " 4 -16.67927180789 -4.26 -2.74 3.4 269ms\n", + " 5 -16.67928547177 -4.86 -3.20 3.5 323ms\n", + " 6 -16.67928614692 -6.17 -3.49 3.2 283ms\n", + " 7 -16.67928620672 -7.22 -3.89 1.2 199ms\n", + " 8 -16.67928621938 -7.90 -4.45 2.5 258ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(2); tol=1e-4);" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -33.32798303824 -0.56 7.1 1.44s\n", + " 2 -33.33469394614 -2.17 -1.00 1.2 699ms\n", + " 3 -33.33600461690 -2.88 -1.73 6.4 1.09s\n", + " 4 -33.33615300035 -3.83 -2.65 2.5 738ms\n", + " 5 -33.33687631450 -3.14 -2.43 9.5 1.34s\n", + " 6 -33.33690531016 -4.54 -2.56 1.1 673ms\n", + " 7 -33.33694323614 -4.42 -3.70 1.0 650ms\n", + " 8 -33.33694373997 -6.30 -3.90 5.5 1.22s\n", + " 9 -33.33694376984 -7.52 -4.15 1.9 978ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(4); tol=1e-4);" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "When switching off explicitly the `LdosMixing`, by selecting `mixing=SimpleMixing()`,\n", + "the performance of number of required SCF steps starts to increase as we increase\n", + "the size of the modelled problem:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -8.298808530402 -0.85 5.4 264ms\n", + " 2 -8.300299561836 -2.83 -1.59 1.1 85.3ms\n", + " 3 -8.300442106491 -3.85 -2.71 2.1 100ms\n", + " 4 -8.300446694866 -5.34 -2.62 3.5 143ms\n", + " 5 -8.300464292998 -4.75 -3.34 1.0 77.8ms\n", + " 6 -8.300464595073 -6.52 -3.79 1.5 94.2ms\n", + " 7 -8.300464641323 -7.33 -4.45 1.8 100ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.\n", + "└ @ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123\n", + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -33.32824424178 -0.56 6.6 1.41s\n", + " 2 -33.26659191305 + -1.21 -1.24 1.2 596ms\n", + " 3 +18.26064631609 + 1.71 -0.21 10.5 1.99s\n", + " 4 -33.29194476632 1.71 -1.59 6.1 1.58s\n", + " 5 -33.23859692795 + -1.27 -1.34 3.1 925ms\n", + " 6 -33.01930309210 + -0.66 -1.31 3.4 921ms\n", + " 7 -33.15939335195 -0.85 -1.43 4.1 987ms\n", + " 8 -33.33362189285 -0.76 -2.24 2.8 772ms\n", + " 9 -33.33641249508 -2.55 -2.63 4.2 1.03s\n", + " 10 -33.33683529150 -3.37 -2.79 2.9 816ms\n", + " 11 -33.33687939395 -4.36 -2.95 2.2 761ms\n", + " 12 -33.33692854441 -4.31 -3.22 1.2 602ms\n", + " 13 -33.33693737645 -5.05 -3.39 2.9 821ms\n", + " 14 -33.33694276773 -5.27 -3.83 1.9 685ms\n", + " 15 -33.33694370527 -6.03 -4.32 3.5 862ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "For completion let us note that the more traditional `mixing=KerkerMixing()`\n", + "approach would also help in this particular setting to obtain a constant\n", + "number of SCF iterations for an increasing system size (try it!). In contrast\n", + "to `LdosMixing`, however, `KerkerMixing` is only suitable to model bulk metallic\n", + "system (like the case we are considering here). When modelling metallic surfaces\n", + "or mixtures of metals and insulators, `KerkerMixing` fails, while `LdosMixing`\n", + "still works well. See the Modelling a gallium arsenide surface example\n", + "or [^HL2021] for details. Due to the general applicability of `LdosMixing` this\n", + "method is the default mixing approach in DFTK." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/examples/supercells/index.html b/v0.6.17/examples/supercells/index.html new file mode 100644 index 0000000000..1c29de1275 --- /dev/null +++ b/v0.6.17/examples/supercells/index.html @@ -0,0 +1,96 @@ + +Creating and modelling metallic supercells · DFTK.jl

    Creating and modelling metallic supercells

    In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An $n$-fold repetition along one of the axes of the original lattice.

    The following code achieves this for aluminium:

    using DFTK
    +using LinearAlgebra
    +using ASEconvert
    +
    +function aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])
    +    a = 7.65339
    +    lattice = a * Matrix(I, 3, 3)
    +    Al = ElementPsp(:Al; psp=load_psp("hgh/lda/al-q3"))
    +    atoms     = [Al, Al, Al, Al]
    +    positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]
    +    unit_cell = periodic_system(lattice, atoms, positions)
    +
    +    # Make supercell in ASE:
    +    # We convert our lattice to the conventions used in ASE, make the supercell
    +    # and then convert back ...
    +    supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))
    +    supercell     = pyconvert(AbstractSystem, supercell_ase)
    +
    +    # Unfortunately right now the conversion to ASE drops the pseudopotential information,
    +    # so we need to reattach it:
    +    supercell = attach_psp(supercell; Al="hgh/lda/al-q3")
    +
    +    # Construct an LDA model and discretise
    +    # Note: We disable symmetries explicitly here. Otherwise the problem sizes
    +    #       we are able to run on the CI are too simple to observe the numerical
    +    #       instabilities we want to trigger here.
    +    model = model_LDA(supercell; temperature=1e-3, symmetries=false)
    +    PlaneWaveBasis(model; Ecut, kgrid)
    +end;

    As part of the code we are using a routine inside the ASE, the atomistic simulation environment for creating the supercell and make use of the two-way interoperability of DFTK and ASE. For more details on this aspect see the documentation on Input and output formats.

    Write an example supercell structure to a file to plot it:

    setup = aluminium_setup(5)
    +convert_ase(periodic_system(setup.model)).write("al_supercell.png")
    Python: None

    As we will see in this notebook the modelling of a system generally becomes harder if the system becomes larger.

    • This sounds like a trivial statement as per se the cost per SCF step increases as the system (and thus $N$) gets larger.
    • But there is more to it: If one is not careful also the number of SCF iterations increases as the system gets larger.
    • The aim of a proper computational treatment of such supercells is therefore to ensure that the number of SCF iterations remains constant when the system size increases.

    For achieving the latter DFTK by default employs the LdosMixing preconditioner [HL2021] during the SCF iterations. This mixing approach is completely parameter free, but still automatically adapts to the treated system in order to efficiently prevent charge sloshing. As a result, modelling aluminium slabs indeed takes roughly the same number of SCF iterations irrespective of the supercell size:

    M. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. J. Phys. Cond. Matt 33 085503 (2021). ArXiv:2009.01665

    self_consistent_field(aluminium_setup(1); tol=1e-4);
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -8.298520330428                   -0.85    5.1    130ms
    +  2   -8.300206557259       -2.77       -1.25    1.1   72.7ms
    +  3   -8.300437103971       -3.64       -1.89    3.1    100ms
    +  4   -8.300459574450       -4.65       -2.77    1.2   74.8ms
    +  5   -8.300464296823       -5.33       -3.09    2.6   97.1ms
    +  6   -8.300464464065       -6.78       -3.25    1.2   70.7ms
    +  7   -8.300464546921       -7.08       -3.40    1.2   69.8ms
    +  8   -8.300464593966       -7.33       -3.55    1.0   64.2ms
    +  9   -8.300464626700       -7.48       -3.73    1.2   67.4ms
    + 10   -8.300464632949       -8.20       -3.81    1.0   88.6ms
    + 11   -8.300464641411       -8.07       -4.05    1.0   84.2ms
    self_consistent_field(aluminium_setup(2); tol=1e-4);
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -16.67607276237                   -0.70    7.0    352ms
    +  2   -16.67881157831       -2.56       -1.14    1.9    196ms
    +  3   -16.67922478921       -3.38       -1.86    4.1    237ms
    +  4   -16.67927441787       -4.30       -2.73    1.2    186ms
    +  5   -16.67928547455       -4.96       -3.19    5.0    286ms
    +  6   -16.67928612583       -6.19       -3.48    1.9    202ms
    +  7   -16.67928620398       -7.11       -3.87    1.4    172ms
    +  8   -16.67928621823       -7.85       -4.44    2.1    199ms
    self_consistent_field(aluminium_setup(4); tol=1e-4);
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -33.32640748190                   -0.56    7.0    1.23s
    +  2   -33.33283208593       -2.19       -1.00    1.0    643ms
    +  3   -33.33414842428       -2.88       -1.74    3.5    858ms
    +  4   -33.33501661167       -3.06       -2.38    1.2    641ms
    +  5   -33.33691856237       -2.72       -2.58   12.5    1.21s
    +  6   -33.33693716661       -4.73       -2.91    4.1    779ms
    +  7   -33.33694349159       -5.20       -3.72    2.6    744ms
    +  8   -33.33694367501       -6.74       -3.81    5.8    1.00s
    +  9   -33.33694376224       -7.06       -4.18    1.0    603ms

    When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:

    self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -8.298644044150                   -0.85    5.2    130ms
    +  2   -8.300290549863       -2.78       -1.59    1.5   62.8ms
    +  3   -8.300441837931       -3.82       -2.72    1.6   65.0ms
    +  4   -8.300451600569       -5.01       -2.68    4.2    118ms
    +  5   -8.300464343209       -4.89       -3.34    1.0   57.0ms
    +  6   -8.300464609299       -6.57       -3.89    1.2   59.2ms
    +  7   -8.300464642363       -7.48       -4.53    1.9   71.9ms
    self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());
    ┌ Warning: Skipping atomic property pseudopotential, which is not supported in ASE.
    +@ ASEconvert ~/.julia/packages/ASEconvert/CNQ1A/src/ASEconvert.jl:123
    +n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -33.32667408592                   -0.56    7.6    1.29s
    +  2   -33.32296742796   +   -2.43       -1.27    1.0    533ms
    +  3   -20.57354266594   +    1.11       -0.51    6.0    1.12s
    +  4   -33.30225523362        1.10       -1.66    6.9    1.22s
    +  5   -33.25343878817   +   -1.31       -1.33    2.5    769ms
    +  6   -33.02534354295   +   -0.64       -1.32    3.4    856ms
    +  7   -33.30513470445       -0.55       -1.80    3.9    806ms
    +  8   -33.33629404082       -1.51       -2.50    1.9    623ms
    +  9   -33.33666684888       -3.43       -2.59    3.9    966ms
    + 10   -33.33639916535   +   -3.57       -2.61    2.1    742ms
    + 11   -33.33692370117       -3.28       -3.20    1.8    629ms
    + 12   -33.33692593825       -5.65       -3.33    4.1    912ms
    + 13   -33.33694147948       -4.81       -3.63    1.8    660ms
    + 14   -33.33694354311       -5.69       -3.99    2.9    769ms
    + 15   -33.33694347687   +   -7.18       -4.23    3.5    864ms

    For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.

    diff --git a/v0.6.17/examples/surface.png b/v0.6.17/examples/surface.png new file mode 100644 index 0000000000000000000000000000000000000000..9aee441d4f61920aee314ce648294fd37987a637 GIT binary patch literal 42687 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 literal 0 HcmV?d00001 diff --git a/v0.6.17/examples/wannier.ipynb b/v0.6.17/examples/wannier.ipynb new file mode 100644 index 0000000000..42d6671a3c --- /dev/null +++ b/v0.6.17/examples/wannier.ipynb @@ -0,0 +1,1531 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Wannierization using Wannier.jl or Wannier90\n", + "\n", + "DFTK features an interface with the programs\n", + "[Wannier.jl](https://wannierjl.org) and [Wannier90](http://www.wannier.org/),\n", + "in order to compute maximally-localized Wannier functions (MLWFs)\n", + "from an initial self consistent field calculation.\n", + "All processes are handled by calling the routine `wannier_model` (for Wannier.jl) or `run_wannier90` (for Wannier90).\n", + "\n", + "!!! warning \"No guarantees on Wannier interface\"\n", + " This code is at an early stage and has so far not been fully tested.\n", + " Bugs are likely and we welcome issues in case you find any!\n", + "\n", + "This example shows how to obtain the MLWFs corresponding\n", + "to the first five bands of graphene. Since the bands 2 to 11 are entangled,\n", + "15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -11.14943952007 -0.67 9.0 495ms\n", + " 2 -11.15007306151 -3.20 -1.40 1.2 209ms\n", + " 3 -11.15010740519 -4.46 -2.77 3.4 298ms\n", + " 4 -11.15010937920 -5.70 -3.32 4.6 377ms\n", + " 5 -11.15010942928 -7.30 -4.31 3.0 273ms\n", + " 6 -11.15010943371 -8.35 -4.89 4.4 355ms\n", + " 7 -11.15010943375 -10.39 -5.37 3.8 309ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "d = 10u\"Å\"\n", + "a = 2.641u\"Å\" # Graphene Lattice constant\n", + "lattice = [a -a/2 0;\n", + " 0 √3*a/2 0;\n", + " 0 0 d]\n", + "\n", + "C = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\n", + "atoms = [C, C]\n", + "positions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]\n", + "model = model_PBE(lattice, atoms, positions)\n", + "basis = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])\n", + "nbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)\n", + "scfres = self_consistent_field(basis; nbandsalg, tol=1e-5);" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Plot bandstructure of the system" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=123}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "bands = compute_bands(scfres; kline_density=10)\n", + "plot_bandstructure(bands)" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "## Wannierization with Wannier.jl\n", + "\n", + "Now we use the `wannier_model` routine to generate a Wannier.jl model\n", + "that can be used to perform the wannierization procedure.\n", + "For now, this model generation produces file in the Wannier90 convention,\n", + "where all files are named with the same prefix and only differ by\n", + "their extensions. By default all generated input and output files are stored\n", + "in the subfolder \"wannierjl\" under the prefix \"wannier\" (i.e. \"wannierjl/wannier.win\",\n", + "\"wannierjl/wannier.wout\", etc.). A different file prefix can be given with the\n", + "keyword argument `fileprefix` as shown below.\n", + "\n", + "We now produce a simple Wannier model for 5 MLFWs.\n", + "\n", + "For a good MLWF, we need to provide initial projections that resemble the expected shape\n", + "of the Wannier functions.\n", + "Here we will use:\n", + "- 3 bond-centered 2s hydrogenic orbitals for the expected σ bonds\n", + "- 2 atom-centered 2pz hydrogenic orbitals for the expected π bands" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using Wannier # Needed to make Wannier.Model available" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "From chemical intuition, we know that the bonds with the lowest energy are:\n", + "- the 3 σ bonds,\n", + "- the π and π* bonds.\n", + "We provide relevant initial projections to help Wannierization\n", + "converge to functions with a similar shape." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "5-element Vector{DFTK.HydrogenicWannierProjection}:\n DFTK.HydrogenicWannierProjection([0.16666666666666666, 0.3333333333333333, 0.0], 2, 0, 0, 6)\n DFTK.HydrogenicWannierProjection([0.16666666666666666, -0.16666666666666669, 0.0], 2, 0, 0, 6)\n DFTK.HydrogenicWannierProjection([-0.33333333333333337, -0.16666666666666669, 0.0], 2, 0, 0, 6)\n DFTK.HydrogenicWannierProjection([0.0, 0.0, 0.0], 2, 1, 0, 6)\n DFTK.HydrogenicWannierProjection([0.3333333333333333, 0.6666666666666666, 0.0], 2, 1, 0, 6)" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)\n", + "pz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)\n", + "projections = [\n", + " # Note: fractional coordinates for the centers!\n", + " # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds\n", + " s_guess((positions[1] + positions[2]) / 2),\n", + " s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),\n", + " s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),\n", + " # 2 atom-centered 2pz hydrogenic orbitals\n", + " pz_guess(positions[1]),\n", + " pz_guess(positions[2]),\n", + "]" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "Wannierize:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Reading win file: wannier/graphene.win\n", + " num_wann = 5\n", + " num_bands = 15\n", + " mp_grid = 5 5 1\n", + "\n", + "b-vector shell 1 weight = 1.10422\n", + " 1 -0.47582 -0.27471 0.00000\n", + " 2 0.47582 0.27471 0.00000\n", + " 3 0.00000 -0.54943 0.00000\n", + " 4 0.00000 0.54943 0.00000\n", + " 5 0.47582 -0.27471 0.00000\n", + " 6 -0.47582 0.27471 0.00000\n", + "b-vector shell 2 weight = 1.26651\n", + " 1 0.00000 0.00000 -0.62832\n", + " 2 0.00000 0.00000 0.62832\n", + "\n", + "Finite difference condition satisfied\n", + "\n", + "[ Info: Reading win file: wannier/graphene.win\n", + " num_wann = 5\n", + " num_bands = 15\n", + " mp_grid = 5 5 1\n", + "\n", + "b-vector shell 1 weight = 1.10422\n", + " 1 -0.47582 -0.27471 0.00000\n", + " 2 0.47582 0.27471 0.00000\n", + " 3 0.00000 -0.54943 0.00000\n", + " 4 0.00000 0.54943 0.00000\n", + " 5 0.47582 -0.27471 0.00000\n", + " 6 -0.47582 0.27471 0.00000\n", + "b-vector shell 2 weight = 1.26651\n", + " 1 0.00000 0.00000 -0.62832\n", + " 2 0.00000 0.00000 0.62832\n", + "\n", + "Finite difference condition satisfied\n", + "\n", + "[ Info: Reading mmn file: wannier/graphene.mmn\n", + " header = Generated by DFTK at 2024-01-15T13:14:06.424\n", + " n_bands = 15\n", + " n_bvecs = 8\n", + " n_kpts = 25\n", + "\n", + "[ Info: Reading wannier/graphene.amn\n", + " header = Generated by DFTK at 2024-01-15T13:14:02.902\n", + " n_bands = 15\n", + " n_wann = 5\n", + " n_kpts = 25\n", + "\n", + "[ Info: Reading wannier/graphene.eig\n", + " n_bands = 15\n", + " n_kpts = 25\n", + "\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "lattice: Å\n a1: 2.64100 0.00000 0.00000\n a2: -1.32050 2.28717 0.00000\n a3: 0.00000 0.00000 10.00000\n\natoms: fractional\n C: 0.00000 0.00000 0.00000\n C: 0.33333 0.66667 0.00000\n\nn_bands: 15\nn_wann : 5\nkgrid : 5 5 1\nn_kpts : 25\nn_bvecs: 8\n\nb-vectors:\n [bx, by, bz] / Å⁻¹ weight\n 1 -0.47582 -0.27471 0.00000 1.10422\n 2 0.47582 0.27471 0.00000 1.10422\n 3 0.00000 -0.54943 0.00000 1.10422\n 4 0.00000 0.54943 0.00000 1.10422\n 5 0.47582 -0.27471 0.00000 1.10422\n 6 -0.47582 0.27471 0.00000 1.10422\n 7 0.00000 0.00000 -0.62832 1.26651\n 8 0.00000 0.00000 0.62832 1.26651" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "wannier_model = Wannier.Model(scfres;\n", + " fileprefix=\"wannier/graphene\",\n", + " n_bands=scfres.n_bands_converge,\n", + " n_wannier=5,\n", + " projections,\n", + " dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "Once we have the `wannier_model`, we can use the functions in the Wannier.jl package:\n", + "\n", + "Compute MLWF:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[ Info: Initial spread\n", + " WF center [rx, ry, rz]/Å spread/Ų\n", + " 1 0.00000 0.76239 0.00000 0.62113\n", + " 2 0.66025 -0.38120 0.00000 0.62113\n", + " 3 -0.66025 -0.38120 -0.00000 0.62113\n", + " 4 0.00000 -0.00000 -0.00000 1.19369\n", + " 5 -0.00000 1.52478 -0.00000 1.19369\n", + "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", + " ΩI = 3.81157\n", + " Ω̃ = 0.43920\n", + " ΩOD = 0.43823\n", + " ΩD = 0.00097\n", + " Ω = 4.25077\n", + "\n", + "\n", + "[ Info: Initial spread (with states freezed)\n", + " WF center [rx, ry, rz]/Å spread/Ų\n", + " 1 -0.00000 0.76239 0.00000 0.64218\n", + " 2 0.66025 -0.38120 0.00000 0.64218\n", + " 3 -0.66025 -0.38120 -0.00000 0.64218\n", + " 4 0.00000 -0.00000 0.00000 1.13078\n", + " 5 0.00000 1.52478 -0.00000 1.13078\n", + "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", + " ΩI = 3.46548\n", + " Ω̃ = 0.72262\n", + " ΩOD = 0.71487\n", + " ΩD = 0.00775\n", + " Ω = 4.18810\n", + "\n", + "\n", + "Iter Function value Gradient norm \n", + " 0 4.188101e+00 1.401803e+00\n", + " * time: 0.0012009143829345703\n", + " 1 3.807537e+00 8.825704e-02\n", + " * time: 0.5911149978637695\n", + " 2 3.768223e+00 2.015970e-02\n", + " * time: 0.595695972442627\n", + " 3 3.765770e+00 2.446948e-03\n", + " * time: 0.6002929210662842\n", + " 4 3.765731e+00 2.711481e-04\n", + " * time: 0.6048629283905029\n", + " 5 3.765731e+00 3.155846e-05\n", + " * time: 0.6113488674163818\n", + " 6 3.765731e+00 1.434276e-05\n", + " * time: 0.6178948879241943\n", + " 7 3.765731e+00 1.359816e-06\n", + " * time: 0.6224298477172852\n", + "[ Info: Final spread\n", + " WF center [rx, ry, rz]/Å spread/Ų\n", + " 1 -0.00000 0.76239 0.00000 0.64174\n", + " 2 0.66025 -0.38120 0.00000 0.64174\n", + " 3 -0.66025 -0.38120 -0.00000 0.64174\n", + " 4 0.00000 -0.00000 0.00000 0.92025\n", + " 5 -0.00000 1.52478 -0.00000 0.92025\n", + "Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n", + " ΩI = 3.02222\n", + " Ω̃ = 0.74351\n", + " ΩOD = 0.73886\n", + " ΩD = 0.00465\n", + " Ω = 3.76573\n", + "\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": " * Status: success\n\n * Candidate solution\n Final objective value: 3.765731e+00\n\n * Found with\n Algorithm: L-BFGS\n\n * Convergence measures\n |x - x'| = 1.07e-05 ≰ 0.0e+00\n |x - x'|/|x'| = 1.07e-05 ≰ 0.0e+00\n |f(x) - f(x')| = 2.58e-09 ≰ 0.0e+00\n |f(x) - f(x')|/|f(x')| = 6.86e-10 ≤ 1.0e-07\n |g(x)| = 1.36e-06 ≤ 1.0e-05\n\n * Work counters\n Seconds run: 1 (vs limit Inf)\n Iterations: 7\n f(x) calls: 17\n ∇f(x) calls: 18\n" + }, + "metadata": {} + } + ], + "cell_type": "code", + "source": [ + "U = disentangle(wannier_model, max_iter=200);" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "Inspect localization before and after Wannierization:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": " WF center [rx, ry, rz]/Å spread/Ų\n 1 -0.00000 0.76239 0.00000 0.64174\n 2 0.66025 -0.38120 0.00000 0.64174\n 3 -0.66025 -0.38120 -0.00000 0.64174\n 4 0.00000 -0.00000 0.00000 0.92025\n 5 -0.00000 1.52478 -0.00000 0.92025\nSum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD\n ΩI = 3.02222\n Ω̃ = 0.74351\n ΩOD = 0.73886\n ΩD = 0.00465\n Ω = 3.76573\n" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "omega(wannier_model)\n", + "omega(wannier_model, U)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "Build a Wannier interpolation model:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "\nrecip_lattice: Å⁻¹\n a1: 2.37909 1.37357 -0.00000\n a2: 0.00000 2.74714 0.00000\n a3: 0.00000 -0.00000 0.62832\nkgrid : 5 5 1\nn_kpts : 25\n\nlattice: Å\n a1: 2.64100 0.00000 0.00000\n a2: -1.32050 2.28717 0.00000\n a3: 0.00000 0.00000 10.00000\ngrid = 5 5 1\nn_rvecs = 31\nusing MDRS interpolation\n\nKPath{3} (6 points, 3 paths, 12 points in paths):\n points: :M => [0.5, 0.0, 0.0]\n :A => [0.0, 0.0, 0.5]\n :H => [0.333333, 0.333333, 0.5]\n :K => [0.333333, 0.333333, 0.0]\n :Γ => [0.0, 0.0, 0.0]\n :L => [0.5, 0.0, 0.5]\n paths: [:Γ, :M, :K, :Γ, :A, :L, :H, :A]\n [:L, :M]\n [:H, :K]\n basis: [1.258962, 0.726862, -0.0]\n [0.0, 1.453724, 0.0]\n [0.0, -0.0, 0.332492]" + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "kpath = irrfbz_path(model)\n", + "interp_model = Wannier.InterpModel(wannier_model; kpath=kpath)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "And so on...\n", + "Refer to the Wannier.jl documentation for further examples." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "(Delete temporary files when done.)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "rm(\"wannier\", recursive=true)" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "### Custom initial guesses\n", + "\n", + "We can also provide custom initial guesses for Wannierization,\n", + "by passing a callable function in the `projections` array.\n", + "The function receives the basis and a list of points (fractional coordinates in reciprocal space),\n", + "and returns the Fourier transform of the initial guess function evaluated at each point.\n", + "\n", + "For example, we could use Gaussians for the σ and pz guesses with the following code:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "pz_guess (generic function with 1 method)" + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "s_guess(center) = DFTK.GaussianWannierProjection(center)\n", + "function pz_guess(center)\n", + " # Approximate with two Gaussians offset by 0.5 Å from the center of the atom\n", + " offset = model.inv_lattice * [0, 0, austrip(0.5u\"Å\")]\n", + " center1 = center + offset\n", + " center2 = center - offset\n", + " # Build the custom projector\n", + " (basis, ps) -> DFTK.GaussianWannierProjection(center1)(basis, ps) - DFTK.GaussianWannierProjection(center2)(basis, ps)\n", + "end\n", + "# Feed to Wannier via the `projections` as before..." + ], + "metadata": {}, + "execution_count": 10 + }, + { + "cell_type": "markdown", + "source": [ + "This example assumes that Wannier.jl version 0.3.2 is used,\n", + "and may need to be updated to accomodate for changes in Wannier.jl.\n", + "\n", + "Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently,\n", + "for example the max number of iterations is passed to `disentangle` in Wannier.jl,\n", + "but as `num_iter` to `run_wannier90`." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Wannierization with Wannier90\n", + "\n", + "We can use the `run_wannier90` routine to generate all required files and perform the wannierization procedure:" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using wannier90_jll # Needed to make run_wannier90 available\n", + "run_wannier90(scfres;\n", + " fileprefix=\"wannier/graphene\",\n", + " n_wannier=5,\n", + " projections,\n", + " num_print_cycles=25,\n", + " num_iter=200,\n", + " #\n", + " dis_win_max=19.0,\n", + " dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1, # 1 eV above Fermi level\n", + " dis_num_iter=300,\n", + " dis_mix_ratio=1.0,\n", + " #\n", + " wannier_plot=true,\n", + " wannier_plot_format=\"cube\",\n", + " wannier_plot_supercell=5,\n", + " write_xyz=true,\n", + " translate_home_cell=true,\n", + " );" + ], + "metadata": {}, + "execution_count": 11 + }, + { + "cell_type": "markdown", + "source": [ + "As can be observed standard optional arguments for the disentanglement\n", + "can be passed directly to `run_wannier90` as keyword arguments." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "(Delete temporary files.)" + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "rm(\"wannier\", recursive=true)" + ], + "metadata": {}, + "execution_count": 12 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/dev/examples/wannier/f0190eb2.svg b/v0.6.17/examples/wannier/a1d210d0.svg similarity index 64% rename from dev/examples/wannier/f0190eb2.svg rename to v0.6.17/examples/wannier/a1d210d0.svg index cba9e05196..da1ff36378 100644 --- a/dev/examples/wannier/f0190eb2.svg +++ b/v0.6.17/examples/wannier/a1d210d0.svg @@ -1,487 +1,487 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/examples/wannier/index.html b/v0.6.17/examples/wannier/index.html new file mode 100644 index 0000000000..3b5be0d3cc --- /dev/null +++ b/v0.6.17/examples/wannier/index.html @@ -0,0 +1,200 @@ + +Wannierization using Wannier.jl or Wannier90 · DFTK.jl

    Wannierization using Wannier.jl or Wannier90

    DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).

    No guarantees on Wannier interface

    This code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!

    This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.

    using DFTK
    +using Plots
    +using Unitful
    +using UnitfulAtomic
    +
    +d = 10u"Å"
    +a = 2.641u"Å"  # Graphene Lattice constant
    +lattice = [a  -a/2    0;
    +           0  √3*a/2  0;
    +           0     0    d]
    +
    +C = ElementPsp(:C; psp=load_psp("hgh/pbe/c-q4"))
    +atoms     = [C, C]
    +positions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]
    +model  = model_PBE(lattice, atoms, positions)
    +basis  = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])
    +nbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)
    +scfres = self_consistent_field(basis; nbandsalg, tol=1e-5);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -11.14942470341                   -0.67    8.6    493ms
    +  2   -11.15007205471       -3.19       -1.40    1.0    206ms
    +  3   -11.15010723547       -4.45       -2.77    3.6    261ms
    +  4   -11.15010940340       -5.66       -3.31    4.6    345ms
    +  5   -11.15010943202       -7.54       -4.19    2.4    255ms
    +  6   -11.15010943369       -8.78       -5.05    3.8    341ms

    Plot bandstructure of the system

    bands = compute_bands(scfres; kline_density=10)
    +plot_bandstructure(bands)
    Example block output

    Wannierization with Wannier.jl

    Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder "wannierjl" under the prefix "wannier" (i.e. "wannierjl/wannier.win", "wannierjl/wannier.wout", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.

    We now produce a simple Wannier model for 5 MLFWs.

    For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:

    • 3 bond-centered 2s hydrogenic orbitals for the expected σ bonds
    • 2 atom-centered 2pz hydrogenic orbitals for the expected π bands
    using Wannier # Needed to make Wannier.Model available

    From chemical intuition, we know that the bonds with the lowest energy are:

    • the 3 σ bonds,
    • the π and π* bonds.

    We provide relevant initial projections to help Wannierization converge to functions with a similar shape.

    s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)
    +pz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)
    +projections = [
    +    # Note: fractional coordinates for the centers!
    +    # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds
    +    s_guess((positions[1] + positions[2]) / 2),
    +    s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),
    +    s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),
    +    # 2 atom-centered 2pz hydrogenic orbitals
    +    pz_guess(positions[1]),
    +    pz_guess(positions[2]),
    +]
    5-element Vector{DFTK.HydrogenicWannierProjection}:
    + DFTK.HydrogenicWannierProjection([0.16666666666666666, 0.3333333333333333, 0.0], 2, 0, 0, 6)
    + DFTK.HydrogenicWannierProjection([0.16666666666666666, -0.16666666666666669, 0.0], 2, 0, 0, 6)
    + DFTK.HydrogenicWannierProjection([-0.33333333333333337, -0.16666666666666669, 0.0], 2, 0, 0, 6)
    + DFTK.HydrogenicWannierProjection([0.0, 0.0, 0.0], 2, 1, 0, 6)
    + DFTK.HydrogenicWannierProjection([0.3333333333333333, 0.6666666666666666, 0.0], 2, 1, 0, 6)

    Wannierize:

    wannier_model = Wannier.Model(scfres;
    +    fileprefix="wannier/graphene",
    +    n_bands=scfres.n_bands_converge,
    +    n_wannier=5,
    +    projections,
    +    dis_froz_max=ustrip(auconvert(u"eV", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level
    lattice: Å
    +  a1:  2.64100  0.00000  0.00000
    +  a2: -1.32050  2.28717  0.00000
    +  a3:  0.00000  0.00000 10.00000
    +
    +atoms: fractional
    +   C:  0.00000  0.00000  0.00000
    +   C:  0.33333  0.66667  0.00000
    +
    +n_bands: 15
    +n_wann : 5
    +kgrid  : 5 5 1
    +n_kpts : 25
    +n_bvecs: 8
    +
    +b-vectors:
    +         [bx, by, bz] / Å⁻¹                weight
    +  1      -0.47582   -0.27471    0.00000    1.10422
    +  2       0.47582    0.27471    0.00000    1.10422
    +  3       0.00000   -0.54943    0.00000    1.10422
    +  4       0.00000    0.54943    0.00000    1.10422
    +  5       0.47582   -0.27471    0.00000    1.10422
    +  6      -0.47582    0.27471    0.00000    1.10422
    +  7       0.00000    0.00000   -0.62832    1.26651
    +  8       0.00000    0.00000    0.62832    1.26651

    Once we have the wannier_model, we can use the functions in the Wannier.jl package:

    Compute MLWF:

    U = disentangle(wannier_model, max_iter=200);
    [ Info: Initial spread
    +  WF     center [rx, ry, rz]/Š             spread/Ų
    +   1     0.00000     0.76239    -0.00000     0.62113
    +   2     0.66025    -0.38120     0.00000     0.62113
    +   3    -0.66025    -0.38120     0.00000     0.62113
    +   4     0.00000     0.00000     0.00000     1.19369
    +   5     0.00000     1.52478    -0.00000     1.19369
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.81156
    +   Ω̃   =     0.43920
    +   ΩOD =     0.43823
    +   ΩD  =     0.00097
    +   Ω   =     4.25077
    +
    +
    +[ Info: Initial spread (with states freezed)
    +  WF     center [rx, ry, rz]/Š             spread/Ų
    +   1     0.00000     0.76239    -0.00000     0.64218
    +   2     0.66025    -0.38120     0.00000     0.64218
    +   3    -0.66025    -0.38120    -0.00000     0.64218
    +   4     0.00000     0.00000     0.00000     1.13077
    +   5    -0.00000     1.52478    -0.00000     1.13077
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.46547
    +   Ω̃   =     0.72262
    +   ΩOD =     0.71487
    +   ΩD  =     0.00775
    +   Ω   =     4.18810
    +
    +
    +Iter     Function value   Gradient norm
    +     0     4.188095e+00     1.401803e+00
    + * time: 0.0014390945434570312
    +     1     3.807531e+00     8.825708e-02
    + * time: 0.008032083511352539
    +     2     3.768217e+00     2.015970e-02
    + * time: 0.01450490951538086
    +     3     3.765764e+00     2.446942e-03
    + * time: 0.021034955978393555
    +     4     3.765725e+00     2.711470e-04
    + * time: 0.11743307113647461
    +     5     3.765725e+00     3.155853e-05
    + * time: 0.12403297424316406
    +     6     3.765725e+00     1.434302e-05
    + * time: 0.13048696517944336
    +     7     3.765725e+00     1.360191e-06
    + * time: 0.13498997688293457
    +[ Info: Final spread
    +  WF     center [rx, ry, rz]/Š             spread/Ų
    +   1    -0.00000     0.76239    -0.00000     0.64174
    +   2     0.66025    -0.38120     0.00000     0.64174
    +   3    -0.66025    -0.38120    -0.00000     0.64174
    +   4     0.00000     0.00000     0.00000     0.92025
    +   5    -0.00000     1.52478    -0.00000     0.92025
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.02222
    +   Ω̃   =     0.74351
    +   ΩOD =     0.73886
    +   ΩD  =     0.00465
    +   Ω   =     3.76572

    Inspect localization before and after Wannierization:

    omega(wannier_model)
    +omega(wannier_model, U)
      WF     center [rx, ry, rz]/Š             spread/Ų
    +   1    -0.00000     0.76239    -0.00000     0.64174
    +   2     0.66025    -0.38120     0.00000     0.64174
    +   3    -0.66025    -0.38120    -0.00000     0.64174
    +   4     0.00000     0.00000     0.00000     0.92025
    +   5    -0.00000     1.52478    -0.00000     0.92025
    +Sum spread: Ω = ΩI + Ω̃, Ω̃ = ΩOD + ΩD
    +   ΩI  =     3.02222
    +   Ω̃   =     0.74351
    +   ΩOD =     0.73886
    +   ΩD  =     0.00465
    +   Ω   =     3.76572
    +

    Build a Wannier interpolation model:

    kpath = irrfbz_path(model)
    +interp_model = Wannier.InterpModel(wannier_model; kpath=kpath)
    
    +recip_lattice: Å⁻¹
    +  a1:  2.37909  1.37357 -0.00000
    +  a2:  0.00000  2.74714  0.00000
    +  a3:  0.00000 -0.00000  0.62832
    +kgrid  : 5 5 1
    +n_kpts : 25
    +
    +lattice: Å
    +  a1:  2.64100  0.00000  0.00000
    +  a2: -1.32050  2.28717  0.00000
    +  a3:  0.00000  0.00000 10.00000
    +grid    = 5 5 1
    +n_rvecs = 31
    +using MDRS interpolation
    +
    +KPath{3} (6 points, 3 paths, 12 points in paths):
    + points: :M => [0.5, 0.0, 0.0]
    +         :A => [0.0, 0.0, 0.5]
    +         :H => [0.333333, 0.333333, 0.5]
    +         :K => [0.333333, 0.333333, 0.0]
    +         :Γ => [0.0, 0.0, 0.0]
    +         :L => [0.5, 0.0, 0.5]
    +  paths: [:Γ, :M, :K, :Γ, :A, :L, :H, :A]
    +         [:L, :M]
    +         [:H, :K]
    +  basis: [1.258962, 0.726862, -0.0]
    +         [0.0, 1.453724, 0.0]
    +         [0.0, -0.0, 0.332492]

    And so on... Refer to the Wannier.jl documentation for further examples.

    (Delete temporary files when done.)

    rm("wannier", recursive=true)

    Custom initial guesses

    We can also provide custom initial guesses for Wannierization, by passing a callable function in the projections array. The function receives the basis and a list of points (fractional coordinates in reciprocal space), and returns the Fourier transform of the initial guess function evaluated at each point.

    For example, we could use Gaussians for the σ and pz guesses with the following code:

    s_guess(center) = DFTK.GaussianWannierProjection(center)
    +function pz_guess(center)
    +    # Approximate with two Gaussians offset by 0.5 Å from the center of the atom
    +    offset = model.inv_lattice * [0, 0, austrip(0.5u"Å")]
    +    center1 = center + offset
    +    center2 = center - offset
    +    # Build the custom projector
    +    (basis, ps) -> DFTK.GaussianWannierProjection(center1)(basis, ps) - DFTK.GaussianWannierProjection(center2)(basis, ps)
    +end
    +# Feed to Wannier via the `projections` as before...
    pz_guess (generic function with 1 method)

    This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.

    Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.

    Wannierization with Wannier90

    We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:

    using wannier90_jll  # Needed to make run_wannier90 available
    +run_wannier90(scfres;
    +              fileprefix="wannier/graphene",
    +              n_wannier=5,
    +              projections,
    +              num_print_cycles=25,
    +              num_iter=200,
    +              #
    +              dis_win_max=19.0,
    +              dis_froz_max=ustrip(auconvert(u"eV", scfres.εF))+1, # 1 eV above Fermi level
    +              dis_num_iter=300,
    +              dis_mix_ratio=1.0,
    +              #
    +              wannier_plot=true,
    +              wannier_plot_format="cube",
    +              wannier_plot_supercell=5,
    +              write_xyz=true,
    +              translate_home_cell=true,
    +             );

    As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.

    (Delete temporary files.)

    rm("wannier", recursive=true)
    diff --git a/v0.6.17/features/index.html b/v0.6.17/features/index.html new file mode 100644 index 0000000000..f1ac1aeb5e --- /dev/null +++ b/v0.6.17/features/index.html @@ -0,0 +1,2 @@ + +DFTK features · DFTK.jl

    DFTK features

    • Runs out of the box on Linux, macOS and Windows

    Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

    diff --git a/v0.6.17/guide/installation/index.html b/v0.6.17/guide/installation/index.html new file mode 100644 index 0000000000..b6cde46044 --- /dev/null +++ b/v0.6.17/guide/installation/index.html @@ -0,0 +1,4 @@ + +Installation · DFTK.jl

    Installation

    In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.9 is required for DFTK.

    Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:

    import Pkg
    +Pkg.add("DFTK")

    which will install the latest DFTK release. DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box. With this you are all set to run the code in the Tutorial or the examples directory.

    For obtaining a good user experience as well as peak performance some optional steps see the next sections on Recommended packages and Selecting the employed linear algebra and FFT backend. See also the details on Using DFTK on compute clusters if you are not installing DFTK on a laptop or workstation.

    DFTK version compatibility

    We follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.

    While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are

    You can install these packages using

    import Pkg
    +Pkg.add(["AtomsIO", "AtomsIOPython", "ASEconvert"])
    Python dependencies in Julia

    There are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.

    Optional: Selecting the employed linear algebra and FFT backend

    The default Julia setup uses the BLAS, LAPACK, MPI and FFT libraries shipped as part of the Julia package ecosystem. The default setup works, but to obtain peak performance for your hardware additional steps may be necessary, e.g. to employ the vendor-specific BLAS or FFT libraries. See the documentation of the MKL, FFTW, MPI and libblastrampoline packages for details on switching the underlying backend library. If you want to obtain a summary of the backend libraries currently employed by DFTK run the DFTK.versioninfo() command. See also Using DFTK on compute clusters, where some of this is explained in more details.

    Installation for DFTK development

    If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.

    diff --git a/v0.6.17/guide/introductory_resources/index.html b/v0.6.17/guide/introductory_resources/index.html new file mode 100644 index 0000000000..18192f338d --- /dev/null +++ b/v0.6.17/guide/introductory_resources/index.html @@ -0,0 +1,2 @@ + +Introductory resources · DFTK.jl

    Introductory resources

    This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.

    Workshop material and tutorials

    Textbooks

    Recordings

    diff --git a/v0.6.17/guide/periodic_problems.ipynb b/v0.6.17/guide/periodic_problems.ipynb new file mode 100644 index 0000000000..780782e30f --- /dev/null +++ b/v0.6.17/guide/periodic_problems.ipynb @@ -0,0 +1,1252 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Problems and plane-wave discretisations" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "In this example we want to show how DFTK can be used to solve simple one-dimensional\n", + "periodic problems. Along the lines this notebook serves as a concise introduction into\n", + "the underlying theory and jargon for solving periodic problems using plane-wave\n", + "discretizations." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Periodicity and lattices\n", + "A periodic problem is characterized by being invariant to certain translations.\n", + "For example the $\\sin$ function is periodic with periodicity $2π$, i.e.\n", + "$$\n", + " \\sin(x) = \\sin(x + 2πm) \\quad ∀ m ∈ \\mathbb{Z},\n", + "$$\n", + "This is nothing else than saying that any translation by an integer multiple of $2π$\n", + "keeps the $\\sin$ function invariant. More formally, one can use the\n", + "translation operator $T_{2πm}$ to write this as:\n", + "$$\n", + " T_{2πm} \\, \\sin(x) = \\sin(x - 2πm) = \\sin(x).\n", + "$$\n", + "\n", + "Whenever such periodicity exists one can exploit it to save computational work.\n", + "Consider a problem in which we want to find a function $f : \\mathbb{R} → \\mathbb{R}$,\n", + "but *a priori* the solution is known to be periodic with periodicity $a$. As a consequence\n", + "of said periodicity it is sufficient to determine the values of $f$ for all $x$ from the\n", + "interval $[-a/2, a/2)$ to uniquely define $f$ on the full real axis. Naturally exploiting\n", + "periodicity in a computational procedure thus greatly reduces the required amount of work.\n", + "\n", + "Let us introduce some jargon: The periodicity of our problem implies that we may define\n", + "a **lattice**\n", + "```\n", + " -3a/2 -a/2 +a/2 +3a/2\n", + " ... |---------|---------|---------| ...\n", + " a a a\n", + "```\n", + "with lattice constant $a$. Each cell of the lattice is an identical periodic image of\n", + "any of its neighbors. For finding $f$ it is thus sufficient to consider only the\n", + "problem inside a **unit cell** $[-a/2, a/2)$ (this is the convention used by DFTK, but this is arbitrary, and for instance $[0,a)$ would have worked just as well).\n", + "\n", + "## Periodic operators and the Bloch transform\n", + "Not only functions, but also operators can feature periodicity.\n", + "Consider for example the **free-electron Hamiltonian**\n", + "$$\n", + " H = -\\frac12 Δ.\n", + "$$\n", + "In free-electron model (which gives rise to this Hamiltonian) electron motion is only\n", + "by their own kinetic energy. As this model features no potential which could make one point\n", + "in space more preferred than another, we would expect this model to be periodic.\n", + "If an operator is periodic with respect to a lattice such as the one defined above,\n", + "then it commutes with all lattice translations. For the free-electron case $H$\n", + "one can easily show exactly that, i.e.\n", + "$$\n", + " T_{ma} H = H T_{ma} \\quad ∀ m ∈ \\mathbb{Z}.\n", + "$$\n", + "We note in passing that the free-electron model is actually very special in the sense that\n", + "the choice of $a$ is completely arbitrary here. In other words $H$ is periodic\n", + "with respect to any translation. In general, however, periodicity is only\n", + "attained with respect to a finite number of translations $a$ and we will take this\n", + "viewpoint here.\n", + "\n", + "**Bloch's theorem** now tells us that for periodic operators,\n", + "the solutions to the eigenproblem\n", + "$$\n", + " H ψ_{kn} = ε_{kn} ψ_{kn}\n", + "$$\n", + "satisfy a factorization\n", + "$$\n", + " ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x)\n", + "$$\n", + "into a plane wave $e^{i k⋅x}$ and a lattice-periodic function\n", + "$$\n", + " T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \\quad ∀ m ∈ \\mathbb{Z}.\n", + "$$\n", + "In this $n$ is a labeling integer index and $k$ is a real number,\n", + "whose details will be clarified in the next section.\n", + "The index $n$ is sometimes also called the **band index** and\n", + "functions $ψ_{kn}$ satisfying this factorization are also known as\n", + "**Bloch functions** or **Bloch states**.\n", + "\n", + "Consider the application of $2H = -Δ = - \\frac{d^2}{d x^2}$\n", + "to such a Bloch wave. First we notice for any function $f$\n", + "$$\n", + " -i∇ \\left( e^{i k⋅x} f \\right)\n", + " = -i\\frac{d}{dx} \\left( e^{i k⋅x} f \\right)\n", + " = k e^{i k⋅x} f + e^{i k⋅x} (-i∇) f = e^{i k⋅x} (-i∇ + k) f.\n", + "$$\n", + "Using this result twice one shows that applying $-Δ$ yields\n", + "$$\n", + "\\begin{aligned}\n", + " -\\Delta \\left(e^{i k⋅x} u_{kn}(x)\\right)\n", + " &= -i∇ ⋅ \\left[-i∇ \\left(u_{kn}(x) e^{i k⋅x} \\right) \\right] \\\\\n", + " &= -i∇ ⋅ \\left[e^{i k⋅x} (-i∇ + k) u_{kn}(x) \\right] \\\\\n", + " &= e^{i k⋅x} (-i∇ + k)^2 u_{kn}(x) \\\\\n", + " &= e^{i k⋅x} 2H_k u_{kn}(x),\n", + "\\end{aligned}\n", + "$$\n", + "where we defined\n", + "$$\n", + " H_k = \\frac12 (-i∇ + k)^2.\n", + "$$\n", + "The action of this operator on a function $u_{kn}$ is given by\n", + "$$\n", + " H_k u_{kn} = e^{-i k⋅x} H e^{i k⋅x} u_{kn},\n", + "$$\n", + "which in particular implies that\n", + "$$\n", + " H_k u_{kn} = ε_{kn} u_{kn} \\quad ⇔ \\quad H (e^{i k⋅x} u_{kn}) = ε_{kn} (e^{i k⋅x} u_{kn}).\n", + "$$\n", + "To seek the eigenpairs of $H$ we may thus equivalently\n", + "find the eigenpairs of *all* $H_k$.\n", + "The point of this is that the eigenfunctions $u_{kn}$ of $H_k$\n", + "are periodic (unlike the eigenfunctions $ψ_{kn}$ of $H$).\n", + "In contrast to $ψ_{kn}$ the functions $u_{kn}$ can thus be fully\n", + "represented considering the eigenproblem only on the unit cell.\n", + "\n", + "A detailed mathematical analysis shows that the transformation from $H$\n", + "to the set of all $H_k$ for a suitable set of values for $k$ (details below)\n", + "is actually a unitary transformation, the so-called **Bloch transform**.\n", + "This transform brings the Hamiltonian into the symmetry-adapted basis for\n", + "translational symmetry, which are exactly the Bloch functions.\n", + "Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries\n", + "(like the point group symmetry in molecules), the Bloch transform also makes\n", + "the Hamiltonian $H$ block-diagonal[^1]:\n", + "$$\n", + " T_B H T_B^{-1} ⟶ \\left( \\begin{array}{cccc} H_1&&&0 \\\\ &H_2\\\\&&H_3\\\\0&&&\\ddots \\end{array} \\right)\n", + "$$\n", + "with each block $H_k$ taking care of one value $k$.\n", + "This block-diagonal structure under the basis of Bloch functions lets us\n", + "completely describe the spectrum of $H$ by looking only at the spectrum\n", + "of all $H_k$ blocks.\n", + "\n", + "[^1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian\n", + " is not a matrix but an operator and the number of blocks is infinite.\n", + " The mathematically precise term is that the Bloch transform reveals the fibers\n", + " of the Hamiltonian.\n", + "\n", + "## The Brillouin zone\n", + "\n", + "We now consider the parameter $k$ of the Hamiltonian blocks in detail.\n", + "\n", + "- As discussed $k$ is a real number. It turns out, however, that some of\n", + " these $k∈\\mathbb{R}$ give rise to operators related by unitary transformations\n", + " (again due to translational symmetry).\n", + "- Since such operators have the same eigenspectrum, only one version needs to be considered.\n", + "- The smallest subset from which $k$ is chosen is the **Brillouin zone** (BZ).\n", + "\n", + "- The BZ is the unit cell of the **reciprocal lattice**, which may be constructed from\n", + " the **real-space lattice** by a Fourier transform.\n", + "- In our simple 1D case the reciprocal lattice is just\n", + " ```\n", + " ... |--------|--------|--------| ...\n", + " 2π/a 2π/a 2π/a\n", + " ```\n", + " i.e. like the real-space lattice, but just with a different lattice constant\n", + " $b = 2π / a$.\n", + "- The BZ in our example is thus $B = [-π/a, π/a)$. The members of $B$\n", + " are typically called $k$-points.\n", + "\n", + "## Discretization and plane-wave basis sets\n", + "\n", + "With what we discussed so far the strategy to find all eigenpairs of a periodic\n", + "Hamiltonian $H$ thus reduces to finding the eigenpairs of all $H_k$ with $k ∈ B$.\n", + "This requires *two* discretisations:\n", + "\n", + " - $B$ is infinite (and not countable). To discretize we first only pick a finite number\n", + " of $k$-points. Usually this **$k$-point sampling** is done by picking $k$-points\n", + " along a regular grid inside the BZ, the **$k$-grid**.\n", + " - Each $H_k$ is still an infinite-dimensional operator.\n", + " Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis\n", + " and diagonalize the resulting matrix.\n", + "\n", + "For the second step multiple types of bases are used in practice (finite differences,\n", + "finite elements, Gaussians, ...). In DFTK we currently support only plane-wave\n", + "discretizations.\n", + "\n", + "For our 1D example normalized plane waves are defined as the functions\n", + "$$\n", + "e_{G}(x) = \\frac{e^{i G x}}{\\sqrt{a}} \\qquad G \\in b\\mathbb{Z}\n", + "$$\n", + "and typically one forms basis sets from these by specifying a\n", + "**kinetic energy cutoff** $E_\\text{cut}$:\n", + "$$\n", + "\\left\\{ e_{G} \\, \\big| \\, (G + k)^2 \\leq 2E_\\text{cut} \\right\\}\n", + "$$\n", + "\n", + "## Correspondence of theory to DFTK code\n", + "\n", + "Before solving a few example problems numerically in DFTK, a short overview\n", + "of the correspondence of the introduced quantities to data structures inside DFTK.\n", + "\n", + "- $H$ is represented by a `Hamiltonian` object and variables for hamiltonians are usually called `ham`.\n", + "- $H_k$ by a `HamiltonianBlock` and variables are `hamk`.\n", + "- $ψ_{kn}$ is usually just called `ψ`.\n", + " $u_{kn}$ is not stored (in favor of $ψ_{kn}$).\n", + "- $ε_{kn}$ is called `eigenvalues`.\n", + "- $k$-points are represented by `Kpoint` and respective variables called `kpt`.\n", + "- The basis of plane waves is managed by `PlaneWaveBasis` and variables usually just called `basis`.\n", + "\n", + "## Solving the free-electron Hamiltonian\n", + "\n", + "One typical approach to get physical insight into a Hamiltonian $H$ is to plot\n", + "a so-called **band structure**, that is the eigenvalues of $H_k$ versus $k$.\n", + "In DFTK we achieve this using the following steps:\n", + "\n", + "Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems.\n", + "Therefore quantities related to the problem space are have a fixed\n", + "dimension 3. The convention is that for 1D / 2D problems the\n", + "trailing entries are always zero and ignored in the computation.\n", + "For the lattice we therefore construct a 3x3 matrix with only one entry." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "\n", + "lattice = zeros(3, 3)\n", + "lattice[1, 1] = 20.;" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "Step 2: Select a model. In this case we choose a free-electron model,\n", + "which is the same as saying that there is only a Kinetic term\n", + "(and no potential) in the model." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Model(custom, 1D):\n lattice (in Bohr) : [20 , 0 , 0 ]\n [0 , 0 , 0 ]\n [0 , 0 , 0 ]\n unit cell volume : 20 Bohr\n\n num. electrons : 0\n spin polarization : none\n temperature : 0 Ha\n\n terms : Kinetic()" + }, + "metadata": {}, + "execution_count": 2 + } + ], + "cell_type": "code", + "source": [ + "model = Model(lattice; terms=[Kinetic()])" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "Step 3: Define a plane-wave basis using this model and a cutoff $E_\\text{cut}$\n", + "of 300 Hartree. The $k$-point grid is given as a regular grid in the BZ\n", + "(a so-called **Monkhorst-Pack** grid). Here we select only one $k$-point (1x1x1),\n", + "see the note below for some details on this choice." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "PlaneWaveBasis discretization:\n architecture : DFTK.CPU()\n num. mpi processes : 1\n num. julia threads : 1\n num. blas threads : 2\n num. fft threads : 1\n\n Ecut : 300.0 Ha\n fft_size : (320, 1, 1), 320 total points\n kgrid : MonkhorstPack([1, 1, 1])\n num. red. kpoints : 1\n num. irred. kpoints : 1\n\n Discretized Model(custom, 1D):\n lattice (in Bohr) : [20 , 0 , 0 ]\n [0 , 0 , 0 ]\n [0 , 0 , 0 ]\n unit cell volume : 20 Bohr\n \n num. electrons : 0\n spin polarization : none\n temperature : 0 Ha\n \n terms : Kinetic()" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Step 4: Plot the bands! Select a density of $k$-points for the $k$-grid to use\n", + "for the bandstructure calculation, discretize the problem and diagonalize it.\n", + "Afterwards plot the bands." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:14\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=6}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "using Unitful\n", + "using UnitfulAtomic\n", + "using Plots\n", + "\n", + "plot_bandstructure(basis; n_bands=6, kline_density=100)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "!!! note \"Selection of k-point grids in `PlaneWaveBasis` construction\"\n", + " You might wonder why we only selected a single $k$-point (clearly a very crude\n", + " and inaccurate approximation). In this example the `kgrid` parameter specified\n", + " in the construction of the `PlaneWaveBasis`\n", + " is not actually used for plotting the bands. It is only used when solving more\n", + " involved models like density-functional theory (DFT) where the Hamiltonian is\n", + " non-linear. In these cases before plotting the bands the self-consistent field\n", + " equations (SCF) need to be solved first. This is typically done on\n", + " a different $k$-point grid than the grid used for the bands later on.\n", + " In our case we don't need this extra step and therefore the `kgrid` value passed\n", + " to `PlaneWaveBasis` is actually arbitrary." + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "## Adding potentials\n", + "So far so good. But free electrons are actually a little boring,\n", + "so let's add a potential interacting with the electrons.\n", + "\n", + "- The modified problem we will look at consists of diagonalizing\n", + " $$\n", + " H_k = \\frac12 (-i \\nabla + k)^2 + V\n", + " $$\n", + " for all $k \\in B$ with a periodic potential $V$ interacting with the electrons.\n", + "\n", + "- A number of \"standard\" potentials are readily implemented in DFTK and\n", + " can be assembled using the `terms` kwarg of the model.\n", + " This allows to seamlessly construct\n", + "\n", + " * density-functial theory (DFT) models for treating electronic structures\n", + " (see the Tutorial).\n", + " * Gross-Pitaevskii models for bosonic systems\n", + " (see Gross-Pitaevskii equation in one dimension)\n", + " * even some more unusual cases like anyonic models.\n", + "\n", + "We will use `ElementGaussian`, which is an analytic potential describing a Gaussian\n", + "interaction with the electrons to DFTK. See Custom potential for\n", + "how to create a custom potential.\n", + "\n", + "A single potential looks like:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "using Plots\n", + "using LinearAlgebra\n", + "nucleus = ElementGaussian(0.3, 10.0)\n", + "plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "With this element at hand we can easily construct a setting\n", + "where two potentials of this form are located at positions\n", + "$20$ and $80$ inside the lattice $[0, 100]$:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "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wYKJEyfW1NQ899xzM2fONOW81NTUjz/+ODMzMz8/Pzs7+9NPPwWAhoaGoUOHHj169Pr16/Hx8VOmTGltbQWAxsZGNze35N8NHTrUyh8TyQcF+PoSt6g3NgfNaagn6aaC/aWYCZHF8RC63333XVxc3OjRo+3s7F599dUNGzbo9X8aCsjOzr5w4cLf/vY3pVL5+OOP29nZ7d27FwDWrFnzyCOPhISEuLi4vPDCC2vWrAGA4ODg5cuX+/v729raLl++vLy8vLi42PR37Ozsev7OwcHB+p8UyURqKXVSwTBPHB80s6fCma8vYe8osjgeEuGVK1f69+9v+rlPnz4tLS0lJSU3FejVq5e9vb3p1/79+1+5cgUALl++3PbCfv36Xb16leP+FCT79u3TaDQBAQGmX7Ozs4OCgiIjI1etWmU0Gi36oZCcfXMZ11SziId6MSmlXGUz3/VAUqe0xB+tqqravHnzrccfeOABtVp9/fr1tnzGMIyjo2NVVVWvXr3ail2/ft3Jyant127dulVVVZmOOzs7tx00Go11dXWurq6mI7m5uUuXLv3f//6nVCoBoF+/frt37+7Zs+fFixefeuqp1tbW1157rd3anj59+t///ndiYqLpVycnp4sXL7q4uNxa0mg0GgwGzKkW1dDQwHcVOud6K9lTZLNqQGt9vTg68UR0hgnAfT6qb84bl4aKKehMozM2NjhibEEdv4zt7OxUqruseWiRRNjc3HzhwoVbj0+YMAEA3N3d6+vrTUdYlm1oaPDw8Lix2I0FAKCmpmbQoEGm43V1daaDtbW1KpWqW7dupl+Liori4uJWrlw5bdo00xFTjygA+Pj4vPXWW++9997tEmFERMTcuXOXLVt2189lSoRtTVVkIW23O6Kw7gJ3nz/1d3e6e1HBENEZXtSXLjnEvhQppqDDRGgdZryMLZIIfX19P//889v9a2ho6PHjx00/nzt3zsHBwdfX96YCOTk5TU1NpoG9s2fPLlq0CADCwsKys7NNZbKzs0NDQxmGAYCysrKEhITFixcvXry43XdUKpU3daIiZC7fXuFWDVXwXQvJGqMmLSwcr6A4BIssh4eBjUceeeTAgQPJycn19fVvvvnm/Pnz7ezsAOD999//4YcfAKBfv34DBgx455139Hr9F198wbKsqSn5xBNPrFu37ty5cxUVFR988METTzwBAJWV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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "using LinearAlgebra\n", + "\n", + "# Define the 1D lattice [0, 100]\n", + "lattice = diagm([100., 0, 0])\n", + "\n", + "# Place them at 20 and 80 in *fractional coordinates*,\n", + "# that is 0.2 and 0.8, since the lattice is 100 wide.\n", + "nucleus = ElementGaussian(0.3, 10.0)\n", + "atoms = [nucleus, nucleus]\n", + "positions = [[0.2, 0, 0], [0.8, 0, 0]]\n", + "\n", + "# Assemble the model, discretize and build the Hamiltonian\n", + "model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\n", + "basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));\n", + "ham = Hamiltonian(basis)\n", + "\n", + "# Extract the total potential term of the Hamiltonian and plot it\n", + "potential = DFTK.total_local_potential(ham)[:, 1, 1]\n", + "rvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis\n", + "x = [r[1] for r in rvecs] # only keep the x coordinate\n", + "plot(x, potential, label=\"\", xlabel=\"x\", ylabel=\"V(x)\")" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "This potential is the sum of two \"atomic\" potentials (the two \"Gaussian\" elements).\n", + "Due to the periodic setting we are considering interactions naturally also occur\n", + "across the unit cell boundary (i.e. wrapping from `100` over to `0`).\n", + "The required periodization of the atomic potential is automatically taken care,\n", + "such that the potential is smooth across the cell boundary at `100`/`0`.\n", + "\n", + "With this setup, let's look at the bands:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:14\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=6}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "plot_bandstructure(basis; n_bands=6, kline_density=500)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "The bands are noticeably different.\n", + " - The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous\n", + " but has gaps.\n", + "\n", + " - The two lowest bands are almost flat. This is because they represent\n", + " two tightly bound and localized electrons inside the two Gaussians.\n", + "\n", + " - The higher the bands are in energy, the more free-electron-like they are.\n", + " In other words the higher the kinetic energy of the electrons, the less they feel\n", + " the effect of the two Gaussian potentials. As it turns out the curvature of the bands,\n", + " (the degree to which they are free-electron-like) is highly related to the delocalization\n", + " of electrons in these bands: The more curved the more delocalized. In some sense\n", + " \"free electrons\" correspond to perfect delocalization." + ], + "metadata": {} + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/guide/periodic_problems.jl b/v0.6.17/guide/periodic_problems.jl new file mode 100644 index 0000000000..59cc7f81d3 --- /dev/null +++ b/v0.6.17/guide/periodic_problems.jl @@ -0,0 +1,330 @@ +# # [Problems and plane-wave discretisations](@id periodic-problems) + +# In this example we want to show how DFTK can be used to solve simple one-dimensional +# periodic problems. Along the lines this notebook serves as a concise introduction into +# the underlying theory and jargon for solving periodic problems using plane-wave +# discretizations. + +# ## Periodicity and lattices +# A periodic problem is characterized by being invariant to certain translations. +# For example the ``\sin`` function is periodic with periodicity ``2π``, i.e. +# ```math +# \sin(x) = \sin(x + 2πm) \quad ∀ m ∈ \mathbb{Z}, +# ``` +# This is nothing else than saying that any translation by an integer multiple of ``2π`` +# keeps the ``\sin`` function invariant. More formally, one can use the +# translation operator ``T_{2πm}`` to write this as: +# ```math +# T_{2πm} \, \sin(x) = \sin(x - 2πm) = \sin(x). +# ``` +# +# Whenever such periodicity exists one can exploit it to save computational work. +# Consider a problem in which we want to find a function ``f : \mathbb{R} → \mathbb{R}``, +# but *a priori* the solution is known to be periodic with periodicity ``a``. As a consequence +# of said periodicity it is sufficient to determine the values of ``f`` for all ``x`` from the +# interval ``[-a/2, a/2)`` to uniquely define ``f`` on the full real axis. Naturally exploiting +# periodicity in a computational procedure thus greatly reduces the required amount of work. +# +# Let us introduce some jargon: The periodicity of our problem implies that we may define +# a **lattice** +# ``` +# -3a/2 -a/2 +a/2 +3a/2 +# ... |---------|---------|---------| ... +# a a a +# ``` +# with lattice constant ``a``. Each cell of the lattice is an identical periodic image of +# any of its neighbors. For finding ``f`` it is thus sufficient to consider only the +# problem inside a **unit cell** ``[-a/2, a/2)`` (this is the convention used by DFTK, but this is arbitrary, and for instance ``[0,a)`` would have worked just as well). +# +# ## Periodic operators and the Bloch transform +# Not only functions, but also operators can feature periodicity. +# Consider for example the **free-electron Hamiltonian** +# ```math +# H = -\frac12 Δ. +# ``` +# In free-electron model (which gives rise to this Hamiltonian) electron motion is only +# by their own kinetic energy. As this model features no potential which could make one point +# in space more preferred than another, we would expect this model to be periodic. +# If an operator is periodic with respect to a lattice such as the one defined above, +# then it commutes with all lattice translations. For the free-electron case ``H`` +# one can easily show exactly that, i.e. +# ```math +# T_{ma} H = H T_{ma} \quad ∀ m ∈ \mathbb{Z}. +# ``` +# We note in passing that the free-electron model is actually very special in the sense that +# the choice of ``a`` is completely arbitrary here. In other words ``H`` is periodic +# with respect to any translation. In general, however, periodicity is only +# attained with respect to a finite number of translations ``a`` and we will take this +# viewpoint here. +# +# **Bloch's theorem** now tells us that for periodic operators, +# the solutions to the eigenproblem +# ```math +# H ψ_{kn} = ε_{kn} ψ_{kn} +# ``` +# satisfy a factorization +# ```math +# ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x) +# ``` +# into a plane wave ``e^{i k⋅x}`` and a lattice-periodic function +# ```math +# T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \quad ∀ m ∈ \mathbb{Z}. +# ``` +# In this ``n`` is a labeling integer index and ``k`` is a real number, +# whose details will be clarified in the next section. +# The index ``n`` is sometimes also called the **band index** and +# functions ``ψ_{kn}`` satisfying this factorization are also known as +# **Bloch functions** or **Bloch states**. +# +# Consider the application of ``2H = -Δ = - \frac{d^2}{d x^2}`` +# to such a Bloch wave. First we notice for any function ``f`` +# ```math +# -i∇ \left( e^{i k⋅x} f \right) +# = -i\frac{d}{dx} \left( e^{i k⋅x} f \right) +# = k e^{i k⋅x} f + e^{i k⋅x} (-i∇) f = e^{i k⋅x} (-i∇ + k) f. +# ``` +# Using this result twice one shows that applying ``-Δ`` yields +# ```math +# \begin{aligned} +# -\Delta \left(e^{i k⋅x} u_{kn}(x)\right) +# &= -i∇ ⋅ \left[-i∇ \left(u_{kn}(x) e^{i k⋅x} \right) \right] \\ +# &= -i∇ ⋅ \left[e^{i k⋅x} (-i∇ + k) u_{kn}(x) \right] \\ +# &= e^{i k⋅x} (-i∇ + k)^2 u_{kn}(x) \\ +# &= e^{i k⋅x} 2H_k u_{kn}(x), +# \end{aligned} +# ``` +# where we defined +# ```math +# H_k = \frac12 (-i∇ + k)^2. +# ``` +# The action of this operator on a function ``u_{kn}`` is given by +# ```math +# H_k u_{kn} = e^{-i k⋅x} H e^{i k⋅x} u_{kn}, +# ``` +# which in particular implies that +# ```math +# H_k u_{kn} = ε_{kn} u_{kn} \quad ⇔ \quad H (e^{i k⋅x} u_{kn}) = ε_{kn} (e^{i k⋅x} u_{kn}). +# ``` +# To seek the eigenpairs of ``H`` we may thus equivalently +# find the eigenpairs of *all* ``H_k``. +# The point of this is that the eigenfunctions ``u_{kn}`` of ``H_k`` +# are periodic (unlike the eigenfunctions ``ψ_{kn}`` of ``H``). +# In contrast to ``ψ_{kn}`` the functions ``u_{kn}`` can thus be fully +# represented considering the eigenproblem only on the unit cell. +# +# A detailed mathematical analysis shows that the transformation from ``H`` +# to the set of all ``H_k`` for a suitable set of values for ``k`` (details below) +# is actually a unitary transformation, the so-called **Bloch transform**. +# This transform brings the Hamiltonian into the symmetry-adapted basis for +# translational symmetry, which are exactly the Bloch functions. +# Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries +# (like the point group symmetry in molecules), the Bloch transform also makes +# the Hamiltonian ``H`` block-diagonal[^1]: +# ```math +# T_B H T_B^{-1} ⟶ \left( \begin{array}{cccc} H_1&&&0 \\ &H_2\\&&H_3\\0&&&\ddots \end{array} \right) +# ``` +# with each block ``H_k`` taking care of one value ``k``. +# This block-diagonal structure under the basis of Bloch functions lets us +# completely describe the spectrum of ``H`` by looking only at the spectrum +# of all ``H_k`` blocks. +# +# [^1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian +# is not a matrix but an operator and the number of blocks is infinite. +# The mathematically precise term is that the Bloch transform reveals the fibers +# of the Hamiltonian. +# +# ## The Brillouin zone +# +# We now consider the parameter ``k`` of the Hamiltonian blocks in detail. +# +# - As discussed ``k`` is a real number. It turns out, however, that some of +# these ``k∈\mathbb{R}`` give rise to operators related by unitary transformations +# (again due to translational symmetry). +# - Since such operators have the same eigenspectrum, only one version needs to be considered. +# - The smallest subset from which ``k`` is chosen is the **Brillouin zone** (BZ). +# +# - The BZ is the unit cell of the **reciprocal lattice**, which may be constructed from +# the **real-space lattice** by a Fourier transform. +# - In our simple 1D case the reciprocal lattice is just +# ``` +# ... |--------|--------|--------| ... +# 2π/a 2π/a 2π/a +# ``` +# i.e. like the real-space lattice, but just with a different lattice constant +# ``b = 2π / a``. +# - The BZ in our example is thus ``B = [-π/a, π/a)``. The members of ``B`` +# are typically called ``k``-points. +# +# ## Discretization and plane-wave basis sets +# +# With what we discussed so far the strategy to find all eigenpairs of a periodic +# Hamiltonian ``H`` thus reduces to finding the eigenpairs of all ``H_k`` with ``k ∈ B``. +# This requires *two* discretisations: +# +# - ``B`` is infinite (and not countable). To discretize we first only pick a finite number +# of ``k``-points. Usually this **``k``-point sampling** is done by picking ``k``-points +# along a regular grid inside the BZ, the **``k``-grid**. +# - Each ``H_k`` is still an infinite-dimensional operator. +# Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis +# and diagonalize the resulting matrix. +# +# For the second step multiple types of bases are used in practice (finite differences, +# finite elements, Gaussians, ...). In DFTK we currently support only plane-wave +# discretizations. +# +# For our 1D example normalized plane waves are defined as the functions +# ```math +# e_{G}(x) = \frac{e^{i G x}}{\sqrt{a}} \qquad G \in b\mathbb{Z} +# ``` +# and typically one forms basis sets from these by specifying a +# **kinetic energy cutoff** ``E_\text{cut}``: +# ```math +# \left\{ e_{G} \, \big| \, (G + k)^2 \leq 2E_\text{cut} \right\} +# ``` +# +# ## Correspondence of theory to DFTK code +# +# Before solving a few example problems numerically in DFTK, a short overview +# of the correspondence of the introduced quantities to data structures inside DFTK. +# +# - ``H`` is represented by a `Hamiltonian` object and variables for hamiltonians are usually called `ham`. +# - ``H_k`` by a `HamiltonianBlock` and variables are `hamk`. +# - ``ψ_{kn}`` is usually just called `ψ`. +# ``u_{kn}`` is not stored (in favor of ``ψ_{kn}``). +# - ``ε_{kn}`` is called `eigenvalues`. +# - ``k``-points are represented by `Kpoint` and respective variables called `kpt`. +# - The basis of plane waves is managed by `PlaneWaveBasis` and variables usually just called `basis`. +# +# ## Solving the free-electron Hamiltonian +# +# One typical approach to get physical insight into a Hamiltonian ``H`` is to plot +# a so-called **band structure**, that is the eigenvalues of ``H_k`` versus ``k``. +# In DFTK we achieve this using the following steps: +# +# Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. +# Therefore quantities related to the problem space are have a fixed +# dimension 3. The convention is that for 1D / 2D problems the +# trailing entries are always zero and ignored in the computation. +# For the lattice we therefore construct a 3x3 matrix with only one entry. +using DFTK + +lattice = zeros(3, 3) +lattice[1, 1] = 20.; + +# Step 2: Select a model. In this case we choose a free-electron model, +# which is the same as saying that there is only a Kinetic term +# (and no potential) in the model. +model = Model(lattice; terms=[Kinetic()]) + +# Step 3: Define a plane-wave basis using this model and a cutoff ``E_\text{cut}`` +# of 300 Hartree. The ``k``-point grid is given as a regular grid in the BZ +# (a so-called **Monkhorst-Pack** grid). Here we select only one ``k``-point (1x1x1), +# see the note below for some details on this choice. +basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1)) + +# Step 4: Plot the bands! Select a density of ``k``-points for the ``k``-grid to use +# for the bandstructure calculation, discretize the problem and diagonalize it. +# Afterwards plot the bands. + +using Unitful +using UnitfulAtomic +using Plots + +plot_bandstructure(basis; n_bands=6, kline_density=100) + +# !!! note "Selection of k-point grids in `PlaneWaveBasis` construction" +# You might wonder why we only selected a single ``k``-point (clearly a very crude +# and inaccurate approximation). In this example the `kgrid` parameter specified +# in the construction of the `PlaneWaveBasis` +# is not actually used for plotting the bands. It is only used when solving more +# involved models like density-functional theory (DFT) where the Hamiltonian is +# non-linear. In these cases before plotting the bands the self-consistent field +# equations (SCF) need to be solved first. This is typically done on +# a different ``k``-point grid than the grid used for the bands later on. +# In our case we don't need this extra step and therefore the `kgrid` value passed +# to `PlaneWaveBasis` is actually arbitrary. + + +# ## Adding potentials +# So far so good. But free electrons are actually a little boring, +# so let's add a potential interacting with the electrons. +# +# - The modified problem we will look at consists of diagonalizing +# ```math +# H_k = \frac12 (-i \nabla + k)^2 + V +# ``` +# for all ``k \in B`` with a periodic potential ``V`` interacting with the electrons. +# +# - A number of "standard" potentials are readily implemented in DFTK and +# can be assembled using the `terms` kwarg of the model. +# This allows to seamlessly construct +# +# * density-functial theory (DFT) models for treating electronic structures +# (see the [Tutorial](@ref)). +# * Gross-Pitaevskii models for bosonic systems +# (see [Gross-Pitaevskii equation in one dimension](@ref gross-pitaevskii)) +# * even some more unusual cases like anyonic models. +# +# We will use `ElementGaussian`, which is an analytic potential describing a Gaussian +# interaction with the electrons to DFTK. See [Custom potential](@ref custom-potential) for +# how to create a custom potential. +# +# A single potential looks like: + +using Plots +using LinearAlgebra +nucleus = ElementGaussian(0.3, 10.0) +plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50)) + +# With this element at hand we can easily construct a setting +# where two potentials of this form are located at positions +# ``20`` and ``80`` inside the lattice ``[0, 100]``: + +using LinearAlgebra + +## Define the 1D lattice [0, 100] +lattice = diagm([100., 0, 0]) + +## Place them at 20 and 80 in *fractional coordinates*, +## that is 0.2 and 0.8, since the lattice is 100 wide. +nucleus = ElementGaussian(0.3, 10.0) +atoms = [nucleus, nucleus] +positions = [[0.2, 0, 0], [0.8, 0, 0]] + +## Assemble the model, discretize and build the Hamiltonian +model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()]) +basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1)); +ham = Hamiltonian(basis) + +## Extract the total potential term of the Hamiltonian and plot it +potential = DFTK.total_local_potential(ham)[:, 1, 1] +rvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis +x = [r[1] for r in rvecs] # only keep the x coordinate +plot(x, potential, label="", xlabel="x", ylabel="V(x)") + +# This potential is the sum of two "atomic" potentials (the two "Gaussian" elements). +# Due to the periodic setting we are considering interactions naturally also occur +# across the unit cell boundary (i.e. wrapping from `100` over to `0`). +# The required periodization of the atomic potential is automatically taken care, +# such that the potential is smooth across the cell boundary at `100`/`0`. +# +# With this setup, let's look at the bands: + +using Unitful +using UnitfulAtomic + +plot_bandstructure(basis; n_bands=6, kline_density=500) + +# The bands are noticeably different. +# - The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous +# but has gaps. +# +# - The two lowest bands are almost flat. This is because they represent +# two tightly bound and localized electrons inside the two Gaussians. +# +# - The higher the bands are in energy, the more free-electron-like they are. +# In other words the higher the kinetic energy of the electrons, the less they feel +# the effect of the two Gaussian potentials. As it turns out the curvature of the bands, +# (the degree to which they are free-electron-like) is highly related to the delocalization +# of electrons in these bands: The more curved the more delocalized. In some sense +# "free electrons" correspond to perfect delocalization. diff --git a/v0.6.17/guide/periodic_problems/6e9199df.svg b/v0.6.17/guide/periodic_problems/6e9199df.svg new file mode 100644 index 0000000000..c59f82be84 --- /dev/null +++ b/v0.6.17/guide/periodic_problems/6e9199df.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/guide/periodic_problems/ad5bfdcb.svg b/v0.6.17/guide/periodic_problems/ad5bfdcb.svg new file mode 100644 index 0000000000..e6939e9e2c --- /dev/null +++ b/v0.6.17/guide/periodic_problems/ad5bfdcb.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/guide/periodic_problems/cd741dd8.svg b/v0.6.17/guide/periodic_problems/cd741dd8.svg new file mode 100644 index 0000000000..ebdc616c7a --- /dev/null +++ b/v0.6.17/guide/periodic_problems/cd741dd8.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/guide/periodic_problems/dc9529d9.svg b/v0.6.17/guide/periodic_problems/dc9529d9.svg new file mode 100644 index 0000000000..a5018cd97c --- /dev/null +++ b/v0.6.17/guide/periodic_problems/dc9529d9.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/guide/periodic_problems/index.html b/v0.6.17/guide/periodic_problems/index.html new file mode 100644 index 0000000000..bc88b123f8 --- /dev/null +++ b/v0.6.17/guide/periodic_problems/index.html @@ -0,0 +1,79 @@ + +Problems and plane-wave discretisations · DFTK.jl

    Problems and plane-wave discretisations

    In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.

    Periodicity and lattices

    A periodic problem is characterized by being invariant to certain translations. For example the $\sin$ function is periodic with periodicity $2π$, i.e.

    \[ \sin(x) = \sin(x + 2πm) \quad ∀ m ∈ \mathbb{Z},\]

    This is nothing else than saying that any translation by an integer multiple of $2π$ keeps the $\sin$ function invariant. More formally, one can use the translation operator $T_{2πm}$ to write this as:

    \[ T_{2πm} \, \sin(x) = \sin(x - 2πm) = \sin(x).\]

    Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function $f : \mathbb{R} → \mathbb{R}$, but a priori the solution is known to be periodic with periodicity $a$. As a consequence of said periodicity it is sufficient to determine the values of $f$ for all $x$ from the interval $[-a/2, a/2)$ to uniquely define $f$ on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.

    Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice

            -3a/2      -a/2      +a/2     +3a/2
    +       ... |---------|---------|---------| ...
    +                a         a         a

    with lattice constant $a$. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding $f$ it is thus sufficient to consider only the problem inside a unit cell $[-a/2, a/2)$ (this is the convention used by DFTK, but this is arbitrary, and for instance $[0,a)$ would have worked just as well).

    Periodic operators and the Bloch transform

    Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian

    \[ H = -\frac12 Δ.\]

    In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case $H$ one can easily show exactly that, i.e.

    \[ T_{ma} H = H T_{ma} \quad ∀ m ∈ \mathbb{Z}.\]

    We note in passing that the free-electron model is actually very special in the sense that the choice of $a$ is completely arbitrary here. In other words $H$ is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations $a$ and we will take this viewpoint here.

    Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem

    \[ H ψ_{kn} = ε_{kn} ψ_{kn}\]

    satisfy a factorization

    \[ ψ_{kn}(x) = e^{i k⋅x} u_{kn}(x)\]

    into a plane wave $e^{i k⋅x}$ and a lattice-periodic function

    \[ T_{ma} u_{kn}(x) = u_{kn}(x - ma) = u_{kn}(x) \quad ∀ m ∈ \mathbb{Z}.\]

    In this $n$ is a labeling integer index and $k$ is a real number, whose details will be clarified in the next section. The index $n$ is sometimes also called the band index and functions $ψ_{kn}$ satisfying this factorization are also known as Bloch functions or Bloch states.

    Consider the application of $2H = -Δ = - \frac{d^2}{d x^2}$ to such a Bloch wave. First we notice for any function $f$

    \[ -i∇ \left( e^{i k⋅x} f \right) + = -i\frac{d}{dx} \left( e^{i k⋅x} f \right) + = k e^{i k⋅x} f + e^{i k⋅x} (-i∇) f = e^{i k⋅x} (-i∇ + k) f.\]

    Using this result twice one shows that applying $-Δ$ yields

    \[\begin{aligned} + -\Delta \left(e^{i k⋅x} u_{kn}(x)\right) + &= -i∇ ⋅ \left[-i∇ \left(u_{kn}(x) e^{i k⋅x} \right) \right] \\ + &= -i∇ ⋅ \left[e^{i k⋅x} (-i∇ + k) u_{kn}(x) \right] \\ + &= e^{i k⋅x} (-i∇ + k)^2 u_{kn}(x) \\ + &= e^{i k⋅x} 2H_k u_{kn}(x), +\end{aligned}\]

    where we defined

    \[ H_k = \frac12 (-i∇ + k)^2.\]

    The action of this operator on a function $u_{kn}$ is given by

    \[ H_k u_{kn} = e^{-i k⋅x} H e^{i k⋅x} u_{kn},\]

    which in particular implies that

    \[ H_k u_{kn} = ε_{kn} u_{kn} \quad ⇔ \quad H (e^{i k⋅x} u_{kn}) = ε_{kn} (e^{i k⋅x} u_{kn}).\]

    To seek the eigenpairs of $H$ we may thus equivalently find the eigenpairs of all $H_k$. The point of this is that the eigenfunctions $u_{kn}$ of $H_k$ are periodic (unlike the eigenfunctions $ψ_{kn}$ of $H$). In contrast to $ψ_{kn}$ the functions $u_{kn}$ can thus be fully represented considering the eigenproblem only on the unit cell.

    A detailed mathematical analysis shows that the transformation from $H$ to the set of all $H_k$ for a suitable set of values for $k$ (details below) is actually a unitary transformation, the so-called Bloch transform. This transform brings the Hamiltonian into the symmetry-adapted basis for translational symmetry, which are exactly the Bloch functions. Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries (like the point group symmetry in molecules), the Bloch transform also makes the Hamiltonian $H$ block-diagonal[1]:

    \[ T_B H T_B^{-1} ⟶ \left( \begin{array}{cccc} H_1&&&0 \\ &H_2\\&&H_3\\0&&&\ddots \end{array} \right)\]

    with each block $H_k$ taking care of one value $k$. This block-diagonal structure under the basis of Bloch functions lets us completely describe the spectrum of $H$ by looking only at the spectrum of all $H_k$ blocks.

    The Brillouin zone

    We now consider the parameter $k$ of the Hamiltonian blocks in detail.

    • As discussed $k$ is a real number. It turns out, however, that some of these $k∈\mathbb{R}$ give rise to operators related by unitary transformations (again due to translational symmetry).

    • Since such operators have the same eigenspectrum, only one version needs to be considered.

    • The smallest subset from which $k$ is chosen is the Brillouin zone (BZ).

    • The BZ is the unit cell of the reciprocal lattice, which may be constructed from the real-space lattice by a Fourier transform.

    • In our simple 1D case the reciprocal lattice is just

        ... |--------|--------|--------| ...
      +         2π/a     2π/a     2π/a

      i.e. like the real-space lattice, but just with a different lattice constant $b = 2π / a$.

    • The BZ in our example is thus $B = [-π/a, π/a)$. The members of $B$ are typically called $k$-points.

    Discretization and plane-wave basis sets

    With what we discussed so far the strategy to find all eigenpairs of a periodic Hamiltonian $H$ thus reduces to finding the eigenpairs of all $H_k$ with $k ∈ B$. This requires two discretisations:

    • $B$ is infinite (and not countable). To discretize we first only pick a finite number of $k$-points. Usually this $k$-point sampling is done by picking $k$-points along a regular grid inside the BZ, the $k$-grid.
    • Each $H_k$ is still an infinite-dimensional operator. Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis and diagonalize the resulting matrix.

    For the second step multiple types of bases are used in practice (finite differences, finite elements, Gaussians, ...). In DFTK we currently support only plane-wave discretizations.

    For our 1D example normalized plane waves are defined as the functions

    \[e_{G}(x) = \frac{e^{i G x}}{\sqrt{a}} \qquad G \in b\mathbb{Z}\]

    and typically one forms basis sets from these by specifying a kinetic energy cutoff $E_\text{cut}$:

    \[\left\{ e_{G} \, \big| \, (G + k)^2 \leq 2E_\text{cut} \right\}\]

    Correspondence of theory to DFTK code

    Before solving a few example problems numerically in DFTK, a short overview of the correspondence of the introduced quantities to data structures inside DFTK.

    • $H$ is represented by a Hamiltonian object and variables for hamiltonians are usually called ham.
    • $H_k$ by a HamiltonianBlock and variables are hamk.
    • $ψ_{kn}$ is usually just called ψ. $u_{kn}$ is not stored (in favor of $ψ_{kn}$).
    • $ε_{kn}$ is called eigenvalues.
    • $k$-points are represented by Kpoint and respective variables called kpt.
    • The basis of plane waves is managed by PlaneWaveBasis and variables usually just called basis.

    Solving the free-electron Hamiltonian

    One typical approach to get physical insight into a Hamiltonian $H$ is to plot a so-called band structure, that is the eigenvalues of $H_k$ versus $k$. In DFTK we achieve this using the following steps:

    Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. Therefore quantities related to the problem space are have a fixed dimension 3. The convention is that for 1D / 2D problems the trailing entries are always zero and ignored in the computation. For the lattice we therefore construct a 3x3 matrix with only one entry.

    using DFTK
    +
    +lattice = zeros(3, 3)
    +lattice[1, 1] = 20.;

    Step 2: Select a model. In this case we choose a free-electron model, which is the same as saying that there is only a Kinetic term (and no potential) in the model.

    model = Model(lattice; terms=[Kinetic()])
    Model(custom, 1D):
    +    lattice (in Bohr)    : [20        , 0         , 0         ]
    +                           [0         , 0         , 0         ]
    +                           [0         , 0         , 0         ]
    +    unit cell volume     : 20 Bohr
    +
    +    num. electrons       : 0
    +    spin polarization    : none
    +    temperature          : 0 Ha
    +
    +    terms                : Kinetic()

    Step 3: Define a plane-wave basis using this model and a cutoff $E_\text{cut}$ of 300 Hartree. The $k$-point grid is given as a regular grid in the BZ (a so-called Monkhorst-Pack grid). Here we select only one $k$-point (1x1x1), see the note below for some details on this choice.

    basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))
    PlaneWaveBasis discretization:
    +    architecture         : DFTK.CPU()
    +    num. mpi processes   : 1
    +    num. julia threads   : 1
    +    num. blas  threads   : 2
    +    num. fft   threads   : 1
    +
    +    Ecut                 : 300.0 Ha
    +    fft_size             : (320, 1, 1), 320 total points
    +    kgrid                : MonkhorstPack([1, 1, 1])
    +    num.   red. kpoints  : 1
    +    num. irred. kpoints  : 1
    +
    +    Discretized Model(custom, 1D):
    +        lattice (in Bohr)    : [20        , 0         , 0         ]
    +                               [0         , 0         , 0         ]
    +                               [0         , 0         , 0         ]
    +        unit cell volume     : 20 Bohr
    +    
    +        num. electrons       : 0
    +        spin polarization    : none
    +        temperature          : 0 Ha
    +    
    +        terms                : Kinetic()

    Step 4: Plot the bands! Select a density of $k$-points for the $k$-grid to use for the bandstructure calculation, discretize the problem and diagonalize it. Afterwards plot the bands.

    using Unitful
    +using UnitfulAtomic
    +using Plots
    +
    +plot_bandstructure(basis; n_bands=6, kline_density=100)
    Example block output
    Selection of k-point grids in `PlaneWaveBasis` construction

    You might wonder why we only selected a single $k$-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different $k$-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.

    Adding potentials

    So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.

    • The modified problem we will look at consists of diagonalizing

      \[H_k = \frac12 (-i \nabla + k)^2 + V\]

      for all $k \in B$ with a periodic potential $V$ interacting with the electrons.

    • A number of "standard" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct

    We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.

    A single potential looks like:

    using Plots
    +using LinearAlgebra
    +nucleus = ElementGaussian(0.3, 10.0)
    +plot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))
    Example block output

    With this element at hand we can easily construct a setting where two potentials of this form are located at positions $20$ and $80$ inside the lattice $[0, 100]$:

    using LinearAlgebra
    +
    +# Define the 1D lattice [0, 100]
    +lattice = diagm([100., 0, 0])
    +
    +# Place them at 20 and 80 in *fractional coordinates*,
    +# that is 0.2 and 0.8, since the lattice is 100 wide.
    +nucleus   = ElementGaussian(0.3, 10.0)
    +atoms     = [nucleus, nucleus]
    +positions = [[0.2, 0, 0], [0.8, 0, 0]]
    +
    +# Assemble the model, discretize and build the Hamiltonian
    +model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])
    +basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));
    +ham   = Hamiltonian(basis)
    +
    +# Extract the total potential term of the Hamiltonian and plot it
    +potential = DFTK.total_local_potential(ham)[:, 1, 1]
    +rvecs = collect(r_vectors_cart(basis))[:, 1, 1]  # slice along the x axis
    +x = [r[1] for r in rvecs]                        # only keep the x coordinate
    +plot(x, potential, label="", xlabel="x", ylabel="V(x)")
    Example block output

    This potential is the sum of two "atomic" potentials (the two "Gaussian" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.

    With this setup, let's look at the bands:

    using Unitful
    +using UnitfulAtomic
    +
    +plot_bandstructure(basis; n_bands=6, kline_density=500)
    Example block output

    The bands are noticeably different.

    • The bands no longer overlap, meaning that the spectrum of $H$ is no longer continuous but has gaps.

    • The two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.

    • The higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense "free electrons" correspond to perfect delocalization.

    • 1Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.
    diff --git a/v0.6.17/guide/tutorial.ipynb b/v0.6.17/guide/tutorial.ipynb new file mode 100644 index 0000000000..0baba420a9 --- /dev/null +++ b/v0.6.17/guide/tutorial.ipynb @@ -0,0 +1,1160 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# Tutorial" + ], + "metadata": {} + }, + { + "cell_type": "markdown", + "source": [ + "DFTK is a Julia package for playing with plane-wave\n", + "density-functional theory algorithms. In its basic formulation it\n", + "solves periodic Kohn-Sham equations.\n", + "\n", + "This document provides an overview of the structure of the code\n", + "and how to access basic information about calculations.\n", + "Basic familiarity with the concepts of plane-wave density functional theory\n", + "is assumed throughout. Feel free to take a look at the\n", + "[Periodic problems](https://docs.dftk.org/stable/guide/periodic_problems/)\n", + "or the\n", + "[Introductory resources](https://docs.dftk.org/stable/guide/introductory_resources/)\n", + "chapters for some introductory material on the topic.\n", + "\n", + "!!! note \"Convergence parameters in the documentation\"\n", + " We use rough parameters in order to be able\n", + " to automatically generate this documentation very quickly.\n", + " Therefore results are far from converged.\n", + " Tighter thresholds and larger grids should be used for more realistic results.\n", + "\n", + "For our discussion we will use the classic example of\n", + "computing the LDA ground state of the\n", + "[silicon crystal](https://www.materialsproject.org/materials/mp-149).\n", + "Performing such a calculation roughly proceeds in three steps." + ], + "metadata": {} + }, + { + "outputs": [], + "cell_type": "code", + "source": [ + "using DFTK\n", + "using Plots\n", + "using Unitful\n", + "using UnitfulAtomic\n", + "\n", + "# 1. Define lattice and atomic positions\n", + "a = 5.431u\"angstrom\" # Silicon lattice constant\n", + "lattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors\n", + " [1 0 1.]; # specified column by column\n", + " [1 1 0.]];" + ], + "metadata": {}, + "execution_count": 1 + }, + { + "cell_type": "markdown", + "source": [ + "By default, all numbers passed as arguments are assumed to be in atomic\n", + "units. Quantities such as temperature, energy cutoffs, lattice vectors, and\n", + "the k-point grid spacing can optionally be annotated with Unitful units,\n", + "which are automatically converted to the atomic units used internally. For\n", + "more details, see the [Unitful package\n", + "documentation](https://painterqubits.github.io/Unitful.jl/stable/) and the\n", + "[UnitfulAtomic.jl package](https://github.com/sostock/UnitfulAtomic.jl)." + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "n Energy log10(ΔE) log10(Δρ) Diag Δtime\n", + "--- --------------- --------- --------- ---- ------\n", + " 1 -7.900469377162 -0.70 4.6 2.52s\n", + " 2 -7.905001697809 -2.34 -1.52 1.0 3.66s\n", + " 3 -7.905176600725 -3.76 -2.52 1.1 51.9ms\n", + " 4 -7.905210448826 -4.47 -2.82 2.6 31.0ms\n", + " 5 -7.905211047474 -6.22 -2.95 1.1 30.9ms\n", + " 6 -7.905211517138 -6.33 -4.50 1.0 22.4ms\n", + " 7 -7.905211531019 -7.86 -4.54 2.5 40.0ms\n", + " 8 -7.905211531383 -9.44 -5.20 1.0 22.8ms\n" + ] + } + ], + "cell_type": "code", + "source": [ + "# Load HGH pseudopotential for Silicon\n", + "Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n", + "\n", + "# Specify type and positions of atoms\n", + "atoms = [Si, Si]\n", + "positions = [ones(3)/8, -ones(3)/8]\n", + "\n", + "# 2. Select model and basis\n", + "model = model_LDA(lattice, atoms, positions)\n", + "kgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid)\n", + "Ecut = 7 # kinetic energy cutoff\n", + "# Ecut = 190.5u\"eV\" # Could also use eV or other energy-compatible units\n", + "basis = PlaneWaveBasis(model; Ecut, kgrid)\n", + "# Note the implicit passing of keyword arguments here:\n", + "# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)\n", + "\n", + "# 3. Run the SCF procedure to obtain the ground state\n", + "scfres = self_consistent_field(basis, tol=1e-5);" + ], + "metadata": {}, + "execution_count": 2 + }, + { + "cell_type": "markdown", + "source": [ + "That's it! Now you can get various quantities from the result of the SCF.\n", + "For instance, the different components of the energy:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Energy breakdown (in Ha):\n Kinetic 3.1020960 \n AtomicLocal -2.1987840\n AtomicNonlocal 1.7296094 \n Ewald -8.3979253\n PspCorrection -0.2946254\n Hartree 0.5530390 \n Xc -2.3986212\n\n total -7.905211531383" + }, + "metadata": {}, + "execution_count": 3 + } + ], + "cell_type": "code", + "source": [ + "scfres.energies" + ], + "metadata": {}, + "execution_count": 3 + }, + { + "cell_type": "markdown", + "source": [ + "Eigenvalues:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7×8 Matrix{Float64}:\n -0.176942 -0.14744 -0.0911691 … -0.101219 -0.0239769 -0.0184079\n 0.261073 0.116915 0.00482514 0.0611644 -0.0239769 -0.0184079\n 0.261073 0.23299 0.216734 0.121636 0.155532 0.117747\n 0.261073 0.23299 0.216734 0.212134 0.155532 0.117747\n 0.354532 0.335109 0.317102 0.350436 0.285692 0.417258\n 0.354532 0.389829 0.384601 … 0.436926 0.285692 0.417443\n 0.354532 0.389829 0.384601 0.449265 0.627546 0.443806" + }, + "metadata": {}, + "execution_count": 4 + } + ], + "cell_type": "code", + "source": [ + "stack(scfres.eigenvalues)" + ], + "metadata": {}, + "execution_count": 4 + }, + { + "cell_type": "markdown", + "source": [ + "`eigenvalues` is an array (indexed by k-points) of arrays (indexed by\n", + "eigenvalue number).\n", + "\n", + "The resulting matrix is 7 (number of computed eigenvalues) by 8\n", + "(number of irreducible k-points). There are 7 eigenvalues per\n", + "k-point because there are 4 occupied states in the system (4 valence\n", + "electrons per silicon atom, two atoms per unit cell, and paired\n", + "spins), and the eigensolver gives itself some breathing room by\n", + "computing some extra states (see the `bands` argument to\n", + "`self_consistent_field` as well as the `AdaptiveBands` documentation).\n", + "There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the\n", + "amount of computations to just the irreducible k-points (see\n", + "[Crystal symmetries](https://docs.dftk.org/stable/developer/symmetries/)\n", + "for details).\n", + "\n", + "We can check the occupations ..." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "7×8 Matrix{Float64}:\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0\n 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0\n 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0" + }, + "metadata": {}, + "execution_count": 5 + } + ], + "cell_type": "code", + "source": [ + "stack(scfres.occupation)" + ], + "metadata": {}, + "execution_count": 5 + }, + { + "cell_type": "markdown", + "source": [ + "... and density, where we use that the density objects in DFTK are\n", + "indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then\n", + "in the 3-dimensional real-space grid." + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=1}", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlgAAAGQCAIAAAD9V4nPAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeUBUVdsA8OfcmYFh3xlARWRxRxYBBVfU0rS0XrPydanXyhbTtKys3LOy1y9Te9uz0jaVTLPNUgE3EBVEZXNPlAGGnWGfmXu+P6aIEBRh7tzt+f3FjIc7h+Oc89yzXkIpBYQQQkiuGL4zgBBCCPEJAyFCCCFZw0CIEEJI1jAQIoQQkjUMhAghhGQNAyFCCCFZw0CIEEJI1jAQIoQQkjUMhAghhGQNAyFCCCFZk1og/O6771JSUjqY2GQycZoZScJC6wQstE7AQusELLTOkVogPHToUHp6egcT19XVcZoZScJC6wQstE7AQusELLTOkVogRAghhG4LBkKEEEKyhoEQIYSQrGEgRAghJGsYCBFCCMkaBkKEEEKyJt9A+NW32x987Jn/bnjXaDTynReEeJCdnf3QY/PmLnxRq9XynReE+CTTQPj97h+eeTfh174LViVef2X1G3xnByFrq6qquuP+Wdvdp35qio2/Zxrf2UGITzINhHv2HawaMQ96DKq748WdvyXznR2ErO3kmZzqnnHQewQNu7uYdSgqLec7RwjxRqaBMD42yunEl1BZqDzySZlvdNRu46fn2FocIkUycKacPn3UNC2rl+niMdDmwqXURn15+F7Hl0+Yrugp37lDiAcyDYQPz/z38nsHD/7lqflB9YXbVq2NVvx+nfp/a3jiiOlMObYFSIIaTZBwhb3jV+Nde03ONnB6tubAl++OOrnm7j8+P/Prt0cmqyjA0D3GO341JlxhjSzf2UXIigilkmr3FyxYEBISMn/+/I4k1uv1Tk5OzS8L62DrBfb9XNZLDXP7MrOCGTslZxkVrVaFhjqC30K7VE0/Ocd+cZ4NdSdz+zL39WSU7dwAN5pgTz77cR6bUwGzQsi8/kwPB2LdzP4Nv2mdgIXWOTLtEbbJ1x5eCmOuPKhcG634MZ8N3G5YgoNFSLRYCvsL6AMHTEN+MNYbIWWyct9dymm92o2CAGCrgGm9mH13KfdPVNQbIXSn8Z7fjfsLpHWzjNANsMvTGkNgXDcyrpvyYjX99Bw7dI9x0K3uoxESlKJ62HKe/SCX9VTD3L7MllGq2x3b6OdKNsYq1kQpvr3ELk4z1ZtgTm/msb6Mhy03OUaIV9i0tyvYmayNVuQ/pJrbl/k4jw3YblxywnStFm+OkXAdKaIPHDAN+M5wWU9/uFNx8l7l3L6dH+F3UsHcvkzmv5TfxCsu62nIDsMDB0z7C7AKIKnBHuEtmAeLpvVicivph7ls+PfGsX7M3L7M2G6Et8kThP6pqgm2X2Y3ZbMshSf6Mp+NVDmqLHn9wZ7ko+GKt2IUW86zTx41udrA3L7MjGDGAdsPJAnYI+wo82DRHw+pxnUji9NMfROMb51myxr//FeTyVRejjuxEOeampqqqqqaX6aX0ieOmHptN+wvoBuGKnLuVz47kLFsFGzmagPPDmTOT1OujVbsL/hzlfXZFqusy8vL8QnpyApKSkosu8wT7+huj3mwaG5fJr2UfpzHhuwwjPNj4qpT//vyfJODR3dH5vCvu+3t7fnOJpKmr7d/t2jZa8TeNTLE/6E1n2/MAb0BHuvDnJ+m8lRbKQ9/TaIrCusUWy+wd/9u8lLDw/51nzxzr86gZPQl32/5cOiQIVbKDZKZ69evj5o0tdbWza6+LHHPjl69elnksrh9oktLjUsa4PPz7LLpY5v+swVcfW0SN74z0vnpJ+d25ZoCh+uzO8FShdatX6R2fhLY2JNvFw6fMGX5v+/gfYjewMIPV9lX3nr3op7Q+Keg/FrYj09kHt7X9SvjN60TJF9ojzy9aKvNGDpwApw/dH9JQsLnH1rkshz2CH///feffvrJ3d197ty5fn5+Nya4dOnS5s2b6+vrp02bFhcXZ36zrq7uiy++yM3N9fb2nj17ds+ePQHg4sWLO3fubP7FadOmBQYGcpfzjvNSw4uDmE/UhotqRwAwql1q6ur4zhSSLBOloLQFAHsnl8V9GsZ143+eWsXA/b2YnICmlZe8AQDUTg2NTXxnCklWbX0DdXEBALBzqa2rt9RluZoj3L59+6xZs/r166fT6YYOHarX61sl0Gq1MTExlNKAgICJEycmJyeb3580adKePXtiY2OrqqoiIiIKCgoAIDc399133634i8Fg4CjbnbPqxYWeH06y27HQ7tCHj8ycznd2kGRNe2gGs/Fu9x1PBxan3nnnnXxn52+PPzyze8oml52LmE33LFn8HN/ZQZK1dNFTqm3POu58XrN97qoXOjTy1yGUG+Hh4V9++aX55xEjRnz44YetEixfvnzatGnmn9etW3fXXXdRSs3rTa5du9bqInv27Bk2bFhHPnf+/PmbNm3qYCarq6s7mPKWCgoKDhw80n2L/mQJa6lrCpMFC00+LFVo/9pnXPLzhWPHjhkMBotc0ILq6uoOHz48fdf1V04YLXJB/KZ1guQL7ZuLpsivSw4dPlxeXm7By3LSI9Tr9ZmZmWPHjjW/HDt27KFDh1qlOXz4cHOCcePGHT58GACcnZ0DAgKOHz8OAIWFhQUFBaGhoeY0xcXFa9asef/99/Pz87nIcxf5+fmNGTns1Wj7l0/gqjnEiRMl9HgJXXZn8JAhQ5RKwS1zs7OzGz58+Lo7/D7KZa/jdlvEAQMLy9PZdaM9Rgwf7ubmZsErc1KdCgsLAcDT09P80tvb++DBg63SFBUVtUxQU1NTXV3t7Oy8e/fuCRMmPPfcc6WlpW+//XZYWBgAODk5DR8+nFJ65MiRJUuW/PTTTyNHjmzzo//4448TJ05kZmaaXyoUijVr1jg6OraZuL6+XqFQdPnP/dsMf9hwVvnz5YZ4H8keWmzxQpMDixTaC8cUr4ZSaGqqE/AcnBuBWYHMqpPsxuiu3hHiN60TpF1oH51nAh3JUNem21qJYWNjc8sbR04CoY2NDQCYTCaVSgUATU1Ntratj2ZSqVTNj4ZvamoihNjY2NTX1z/44IPz5s2bOXNmdnb2o48+GhERERMTM3r06NGjR5sTr1ixYtmyZTdGVjNXV1c7O7vo6GjzSzs7OxcXl/ZKoc2MddGqwXTFaTK+p4r/ZQzc4KLQJK/rhbb3OhQ10P/0IcI/529pJPTbyT47UNHPtUuVAL9pnSDhQqsxwLoc9sc7GFvb2wtbDHPrOsNJIPT19WUY5vr168HBwQBQUFDQrVu3Vmm6det2/fp188/Xr1/38PBQq9X79++vqKhYunQpAAQEBEyaNOnbb7+NiYlp+YtDhgz54osv2vtoV1fXkJCQJ598siP5VCgUFr97eiAINmQbv79KHggUfIvVKVwUmuR1sdBYCssyjGtjGFuVCL5UHnbwXChZnUl3jO3S9wS/aZ0g4ULbeIYd48cM9uLkr+OkXtna2k6YMGHbtm0A0NDQ8MMPP0yePBkAamtr9+7da+4ITpky5bvvvjOfQ7F9+/YpU6YAgJeXV1VVVXFxsfk658+f12g0AFBTU2N+h1K6a9euQYMGcZFtiyAAa6MVS9NZg2QHR5G1fXuJVTEwpacIoqDZwoHMMR09psOZQmQZpQ3wbrZpVSRXVYCrKffVq1dPmDDhzJkzFy5cCAwMnDRpEgDk5+ffddddFRUVrq6us2bN2rx588iRI728vE6cOGFeTRMWFvbvf/87JiZm3LhxOTk5VVVVjz/+OAA89thjV69e9ff3z8vLq6mp+eWXXzjKtkWM8iW9HGHzOfbJfqJpuZBgNbGwIoP9ZIRCRIPtagUsi2CWnDAlTxLcoh4kRmsyTf8OYoKcuaoEHJ4sU1ZWdvjwYXd39+HDh5tHaRsbG3Nzc0NDQ82dd4PBcPDgwfr6+lGjRjk7Ozf/YlZW1oULF7y8vIYOHWqe3qutrc3IyCgqKvLz84uOjjbPQbbJyifLtOd0OZ3wq/H8Ayonbk595JHkj67gQlcKbVM2u6+A/fFOkUUUE4VBO43vxCru7Oyuf/ymdYIkC+0PPY3abcy+X6Wx4+oj8Ig1rr40/04yDXAjr4ZLrVMoyZrGtU4XWo0BeicYfhmvDPcQUYfwT9//wa7OYDPuUzKdyjt+0zpBkoU2K9kU7ExWcDYuCvj0Ce68HsW8c9aks9gZQEiO/u+s6Y5ujBijIAD8K4CxV8KOyzhbjjrvbDndV8A+F8ptqMJAyJVeTuShIOatM7i/HnVSSQO8l8NyeiPMtbUxildOsk0YClFnLTlhWhqh4HqOScR1TPhWRCq2nGcv6yU1+IysZnWGaVYwE+gkyu6g2Ugf0tcVPsnDSIg643ARzamEx/twHqcwEHLISw3z+jOrM7AVQLftDz399hK7JEz0e8LeilasOWXSC+ucfCQOS06YXo9ibLmvBBgIufXCIMXvBezpcuwUotvz6kl24UCFN2fL5Kwm1J2M7ca8k4W3g+j27PqDrTHAQ1Y5mQQDIbccVfDSIMWyk9gKoNtwppwmatlnB0qkeq4ZzGzKMhXjwjHUYSYKS0+y/41RdG7J8e2SSE0Tsqf6M9kVNLkQO4Woo148bloeyfkCAasJcCIzgpk3T+PCMdRRn59nPdUwvruVJsgxEHLOhoGVg5klJ0wYCVFHHCyk56vgUe4XCFjTsgjF1xfZS9VYCdCtNZhgdQa7NsZ6E+SSqmyCNSOIaTLBj1dxgBTdAgVYcsL0ZjRjI62q6amGZ/orVuLCMdQBm7LZId4k1tt666WlVduEiiGwJkrx0gnWiO0AuqmdV9h6I0zrJcGK+Xwoc0DLnirDTiG6mcomePusafVgq1YBCdY3YZrYg/jZw5cXMRKidpkoLE9n/2+IlRYIWJmjCl4JVyw9iTOF6GbezDTd15Pp4sMsbxcGQut5M1qxPJ2tN/KdDyRUn55jNXYwrrOnVAvfE32Zc1WQqMVOIWqbto5uPscujbB2YMJAaD0xXiTai7yfi51C1IZ6I7x+il0bLfod9DehYmD1YOZlXDiG2rEinZ3bl+nuYO17QQyEVvVmNPPWaVN5I9/5QMKzIZuN05AhVlwgwIvpQYyRwu4/8HYQtXauiv5wlV08iId7QQyEVtXHhUzpyfwfnsSN/qmiETZkmV6z7gIBXhCAN6IUL+PCMXSDl0+wL4Yp3G15+GjpVzyhWTWY+TiPvV6Lg0Pob69nmu7vxYS4SLw7aDa+O+nuAF9cwEiI/na8hJ4oofP68ROSMBBam589ebQPs+YUtgLoTwW1dOsFdlmElGcHW1kbo1iZwdbhwjH0l5dPmFYPZuyU/Hw6BkIevByu2HWVza3ETiECAFiWzj7Rj/ER//naHRflSWK9yf9y8HYQAQD8co1q62BWMG/xCAMhD1xt4PlQxfJ0bAUQ5FXSX6+xi0Nl1B00ez2K+b8zuHAMAUth6UnTW9GMkr9whIGQHwsGMGk6ekyHnUK5e+kE+2KYwsWG73xYXW8X8q8A5i08iVv2vrnE2ijgnp58BiMMhPxQK2B5JLPkBLYCspamo2fK6dM8LRDg3YpIxeZz7DVcOCZjTSyszGDXRiv4XScm0xooBP/pzZTUw2/XsRWQryUnTKsirfEAbmHytYe5fZnVeBK3jH2Qw/Z3JaN9eV4vjYGQNwoCa6KYF4+bWAyFsvRjPlvWCDP4WyAgBC+FKfbkszm4cEyWagzw1hnTa1H8VwH+cyBn9wUwjirYfhnviGWHpbDsJPtmtILnISG+udjAi4MUS09iFZCjdWdMd3Zjwtz5rwMYCHm2Nlrx6km2EecKZWbrBdbJBib14L8J4N28/kx6KU0pxk6hvJQ0wHs57PJIQcQgQWRCzkb4kH6u8Mk5vCOWkSYWXpP6+dodp1bASlw4Jj+rMkwP92YCnQRxL4iBkH9roxVrTpn0Br7zgazlf9nsIHcyTCOIJkAIZocw5Y3wyzXsFMrFFT3ddol9iY/ztduEgZB/oe7kjm7M+rPYKZQFvQH+76xpjQAWCAiHgsAbUcySE7hwTC5ePckuClV4C+Y0JayNgvDaYObdbFNxPd/5QNx767Tpru7MADfsDv7D5J6Mswq+voS3g9J3upwmadkFAwQUfQSUFTkLcCIzQ5g3MnGaROIK6+DDXHaFMBYICM3aaMXydFw4Jn0vpplWRCqcVHznowWskEKxNFzxzSX2UjWODUnZ6lOmOX0Yf0fsDrZhuA8JdSMf5mKnUMoOFtKL1TCnj7BCj7ByI2eeapg/QLEST9mQrgtV9Lsr7EthQlkgIED/jWHWnjZV48IxiaIAS06Y3oxmbAQWeQSWHXl7biBzQMueKsNOoTS9epJ9PlThwccDuMWiryuZ0IP5vzM4PCpN311hjSxMCxRc3BFchuTMUQWvhitePYmtgASdLKUpOiqoBQLCtGYw82EuW4QLxyTHRGFFOvsm3+drtwmrpbDM7ctcqIKfzldXVFTwnRdkGSaTqaio6OXjxhURjD1PD+AWkW4OZFYIs/pkY1FREd95QRaj0+k+OFPf3QHGdRNgHASsl8KiYiAsfeN9L29zs7eZMibuk43r+M4R6pK8vLw7ps6osfeprSjZnLwbwI/vHInA3WzmuJmP7vD286LVR3/f4+7uzneOUOcZjcY77n0wu0hfpites3I5wFS+c9QG7BEKS11d3cE93xqXHCl5NvmHY7mXLl3iO0eoS55f8eb1e9+tfGK3ceIrb7y9ke/siMPLK1axT3xb9sQPF8Iffef9j/nODuqSvXv3ZpCAkid/Zl86+P76tXxnp20YCIXFaDQSlRoIAwCgdmxoaOA7R6hLGhqbwNYRAKiNQ209/m92SGNjI9g4AABr41iPhSZyjY2NJhsHAACljckk0FXxODQqLM7OznePiNnz6dRyah/uB/379+c7R6hL1ix5dvzMR5p6DXW/lrr0h218Z0cc3nx18cMLp5b7RrkVpD277we+s4O6ZOLEid3f2nThS6175YXnnn6M7+y0jVDK1WL9srKyvLy8oKAgHx+fNhM0NTVlZGQ4Ozu3au4vX75cVFQUGBjY8hdNJlNGRoatrW1oaCgh7U63LliwICQkZP78+R3JoV6vd3Jy6thfY1Xnzp2b+FNdwsPhkZ6Cm1gWbKEJ1t27SsPrs5ZMjnJ0dOQ7L6JRWlq6+Iccrz6R64Zjod0GYVbPL883fb7v1NYp3bp37853XtrGVY/wu+++e+KJJyIiIjIzM19//fUnnniiVYKrV6+OGTPGx8enuLh40KBBO3bsUCqVJpPpoYceOnny5MCBA9PS0p555pnly5cDQGlpaXx8vK2tbV1dnY+Pz88//2xnJ5jjWjnQp0+fu8pMiYVUgIEQ3RaWQlqty4bxGAVvj6en54OjB6/Kxk2XUnCoWPGv+Oju3YU7E8dJzgwGw4IFC7Zu3bp///7ff/998eLFVVVVrdK89tprY8eOPXr06JkzZ3Jycvbs2QMASUlJycnJWVlZP/74Y2Ji4sqVK827CN5+++3evXufPHny9OnTdXV1W7du5SLbghLvS5K0Ah1PRx2XWUa91USjxkMSbluMJ5tTQSub+M4H6rJELY33FfQ9PSeB8OjRoyzLTpw4EQAiIyODgoJ++eWXVmkSEhLmzJkDAPb29g8++GBCQgIAEELs7OzUajUAuLu7KxQKlmUBYMeOHY888ggAqFSqmTNnmhNLW7wfc7SYGjAUilxiIR3jJ+gmQLBsGBjiTY4U4T2EuOXX0Boj7S/sx61wMjR67dq1gICA5pm8Xr165efnt0xQVVVVXV0dEBBgfhkQEHDgwAEAGDNmzL333jt58uSIiIjk5ORNmzZ5eHhQSgsKClomvnbtWnsfXVtbe+7cuf3795tfKpXKUaNG3WROUbDcbaGXEzlZSmO9xZd51CxJyz4qsPOFRSTel0kqZO/2x9NZReyAlo7xYwTeinESCOvq6mxsbJpfmuf2WiUAgOY0arW6trYWAPR6fV5enqurq729vVKpPHPmDKXUaDQ2NTXdmLhNBQUFly9fzsnJMb+0s7Pr06dPe7PHtbW1Qo6RI7yUv/1hDLU38p2RfxB4oQmKkYUjRTbvRzVioXVCbW3tUDfFopPKmgF43lpHCfCbti9fFefF1tTwdnKkWq1WKm8R6TgJhD4+PmVlZc0vy8rKfH19Wybw9vZWKBTl5eXmMyNKS0vNCT799NOmpqYdO3YAwHPPPde9e/fp06ePHDnSw8OjvLzc/LvNidvUu3fvSZMmdXDVKKVUyEsY7vSnG7NNKx3VfGfkHwReaIKSqqOBzqaeHg56PYuFdrsopSO97a8eNDQoHT2FVQmES4DV82ipcXWMjaOwHz3GyaDN4MGDL168WFJSAgCNjY3Hjx+PiYlpmUChUERGRh4+fNj88siRI+YENTU1bm5u5jdtbW0dHBxqamoAICYm5siRI60SS94oX5Kmow14BLdoJWlxgrBLlAwM05BDRThVLlYXqiilEOws9FrASY+we/fuU6dOnTlz5rPPPrt169bBgwdHRkYCwOeff/7FF18cPHgQAJ577rnnnnvO2dn5jz/++P33399++20AmDJlytq1a99+++2IiIjvv//eZDINGzYMABYtWvTggw9269aturr6yy+/TE1N5SLbQuOkgv5uJE1HRwl7wRVqT1Ih++wAnN/qkng/JklL/xXAdz5Qp4hlsRhX0/ibN28eMWLEZ599FhgYuGvXLvOb/fr1u++++8w/P/TQQxs3btyxY0deXl5ycrJ5o2VYWNjhw4evXLnywQcfODk5paamuri4AMC4ceO++uqrn376KS0tbe/evfI5byXelyQV4u2wKDWxkKajw31E0AoIWbwvSdTiwlGxStLSeDEEQg5PluGFNE6WafZ7AV1zynTobgGdhCf8QhOIg4X0pROmY5OVgIXWKeZCYylovjacnarykfIRGhYjqG8aBfD92pA2RdlT2BOEgIduC9xwDTlVRmuFtW4UdUhSISvwTcSiwBAYrmHwcAkxyq6gjioi/CgIGAgFzl4JER4kpVhSvXaZSNTSeD+sXxYQ70eSCrEKiI+IFothRRW6MX541pr41BnhVBkdphFHKyBwY/xIEk4TilBSodBPVmuGgVDo4n2ZRLwdFpujxTTCgzgIaG5XxAa4Eb2BXq3BWiAmLIVDhaxYVrxjIBS6WA3Bo4dFJ0nLimVQSPgIwGhfJhlvB0Uls4xq7IifvThqAQZCobNhIMYLjx4WmcRCGu+Llcti4nF0VGwSC8WxccIM66oIxPsxuJtQRPQGyKmgQ/C0dMvB3YSik6QV06ppDIQigIsFxOVgIY3xImo8UsZyersQCnCxGmuBOBhZSCmmo8QzKCKajMpZtCe5rKelDXznA3VMUiGLGycsLt4XbwdF40QpDXAiIjoqHaurCODRw+Iiou1TIoK7CUVEdFUAA6E4mI8e5jsX6NbKG+FSNY3yFFMrIApj/cgBLYt1QBSSCllxLRYTU17lDBcLiEVyITvch6iwYlmavyNxVJLcSqwFQifG4+axvopDhAfRNdAifFK34CXhyWqciffD20ERSC2m/d2Iqw3f+bgdWGPFAY8eFotErWiOlRIdXC8jCmI8bh4DoWjgYgHh09VDYT0N9xBZKyAWY/yYg4UszhMKnBiPmxdZduUMdxMK3wEtO8qHUWAc5IavPXjZkdPlWAuEq84ImSI8bh4DoWjg0cPClySqY6XECG8HBe5IMQ0X4XHzGAhFA48eFj7RbZ8SnXhfgscNCplIj5vHQCgmePSwkF2rpdUGOsBNfK2AiMT7MYeLqBFDoVAlifO4efHlWM5wN6GQJWppvC+DYZBTHrYQ4EjSS7EWCJF4j5vHQCgmePSwkCVpcYLQGuL9CD6qWpgOFtIh3qI8bh4Dochgp1CwkgtxB6E1xPsS3FArTKI7Wa2ZKDMtZ7ibUJguVlMDC71dMBBybpQvc0xHG0185wPdIFG0gyIYCEVmrB9JxKOHhSdJS8eKswkQHRcb6OtKjpdgJRCW8ka4LNrj5jEQigwePSxMuIPQmsbgoaPCI+rj5sWZa3nDVkBoKECSVnznK4pXvC+DuwmFRtTHzYs133KGuwmFJreS2itJgBMGQisZ4UPSS2mdke98oBYStXSMaO8FMRCKT7wvk4xHDwuJeNcIiJS9EsLcSUox1gGhMB83Hyba4+YxEIqPrz1449HDQpKEj16yujF+eNaagIj9uHkMhKKERw8LB0vhUBE7GgOhdcX7MVgFhEPsi8UwEIoSHj0sHKfLqaeadHMQcSsgRnHeJKuCVhv4zgcCAPEfN4+BUJTMRw8bMBQKgNibAJGyVUC0FzlShJ1C/knguHkMhKJkPno4A48eFoCkQtw4wY94XwbPWhMCCRw3j4FQrPDoYSEwUThaTEeJ83xFscMqIBASOG4eK7BY4dHDQnCyhPo7EC813/mQpSFe5FI1LWvkOx+yJ4Hj5jEQihUePSwEiSJfLCdqSgZivckhXDXGK2kcN4+BUKzMRw+n4dHDvMKT1fgV78fgw1j4lSiJ4+YxEIoY7ibkVxMLaTo6EicI+YNVgHdi30FohnVYxPDoYX6l6WgfV+Jqw3c+ZCzCg2jraHE93/mQKwqQLIlBEQyEIoZHD/MrEXcQ8k1BYIQPk4y3gzyRzHHzXAXCxsbGZ599NigoKCoq6scff2wzzdatW8PCwkJCQpYtW8ayLABcv379jn/65ZdfAODYsWMt3zx+/DhH2RYXeyWEe+DRw7xJKmTjcVyUb/G+ODrKG8ncCyo5uu6aNWsyMjKSk5PPnj370EMPnT59ulevXi0THD9+fOHChXv27PH19b333nt9fX2ffvppd3f3l156yZzg+vXrjz766CeffAIAJSUlhYWFGzZsMP9TYGAgR9kWHfNZa+O6KfjOiOw0mCC9lMZppNAKiFq8H3kvF3uE/EjS0qm9pFAFOLmfpZR+8sknq1at6tGjx8SJEydOnPj555+3SvPxxx/Pnj17+PDhQUFBr7zyykcffQQA9vb24/5y/fr1MZR5RDIAACAASURBVGPGBAQEmNO7uro2/5OnpycX2RajeD8GH9LLiyNFNMydOKn4zofshbqT6iZ6vRZrgbWZj5sf5YOBsB2lpaXFxcWDBw82v4yMjMzJyWmVJjs7OzIysjlBbm6ueXTUjFL6xRdfzJkzp/mdvLy8oUOH3nXXXZ9//jml+KX/U5w3ycajh/mQVMhKY1BI7AjASB/cRMEDKR03z8nQaGlpKSHEycnJ/NLV1VWn07VKU1ZW5uzsbP7ZxcXFYDBUVVW5ubmZ30lKSiorK7v33nvNL4ODgz/44IPg4OC8vLznn3++qqpq4cKFbX50Zmbmp59+unz5cvNLGxubU6dONX9QK7W1tYSI/n8x0l2170rdeD8rjQ5Jo9C6bv811YowU01Nh4odC60TOl5ocR6K36+S+3xw2ZhVv2l7ryhGeJGamgbrfFynqdVqpfIWkY6TQOjm5kYprampMUeg6upqDw+PG9Po9Xrzz3q9XqFQtAxXn3322cyZM+3s7Mwv+/Xr169fPwCIiIhoaGjYsGFDe4Fw0KBBkyZNmjt3rvllq8u2Qil1dHTs5B8pGOO6s8cqlFN7W2maUBqF1kU1BsipNsT729p1rAJhoXVCxwvtrl70nTyToyOedGfVb1pKufHhEEYaxc7J0KiXl5ezs3NeXp75ZW5u7o3LW4KCglom6NWrl0LxZ1NeVVW1a9euluOiLbm6utbXt7tviGEYe3t7t7/cJApKxhg8etjqDhXRGC/SwSiIuNbHhZgoXNZjLbAeIwtHiuhoqaya5uTPUCgUM2bMWLdundFovHDhwq5du2bPng0AxcXF8+bNM4exhx9+eOvWrYWFhY2NjRs2bDAnMPv666+Dg4MjIiKa3zl8+HBpaSkAXL169c0335wwYQIX2RapGDx62OqStLhxQlhG+xJcNWZN6aW0pyPxlEJvEIC7fYRr1qypqanx9PQcOnToihUrwsLCAECv1//www8GgwEAxo8f/8gjj/Tt21ej0Xh7ey9evLj5d5OSkhYsWNDyavv27QsMDHRwcIiIiIiMjHzjjTc4yrYYKRmI0+DRw1aFZ20LDe4mtLLEQonsIDQjnK7AbGxstLW1vUkClmWNRqONTYdOqWpoaFCrb3EHsmDBgpCQkPnz53fkgnq9vnlFj6itO8Neq6WbYq0xTSiZQuu0yibw/9ZQOktl0+HbSCy0TritQruip8N+NBb8WyWdtrlTrPZNu/NX4/wBzD3+EhkX4fbPuHkUBACGYToYBQHgllFQtuL9cFzIepIL2WEa0vEoiKyglxOxVZBzlVgLrMF83PwIH+nUAen8JXIW4UEK62gRHj1sFUlaGu+HFUdwxuA0obUck9xx81ifpcB89PBBnCa0Csmcrygx8X4Et9VbR5LkqgAGQonAxQLWoauH67U0wkNSrYA0jPEjSVqWxUrAPekdNy+pP0bOcDehdSQVsiN9GQXGQeHxsyceanK2AmsBt+qMkF5Kh0viiNFmGAglYqA7qW6i+TXYCnArSUsl8BhSqcIH1ltBSjEN9yAO0jpNAgOhRJiPHk7GTiHHkqS1fUpi4n1xmpBzSYVSeCR9KxgIpQMXC3BNW0fLGuhAN6m1ApIR78ccKmRNWAm4lCjFVdNS+3vkbAzuJuTYAS0d48cwGAeFyksNPRxJRinWAq7oDZBdQYd6Sa0OYCCUDvPRw5eqsRXgSpIWT1YTunjcTcilQ0U0WorHzWMglBScI+FUUiGulBG6eD+ShBtqOSPV4+Yl+CfJWTyumuPMZT1tNNG+rhgIBW20L5NaTJswFHJDqovFMBBKylg/ckCLW4o5kailYyS3RkB6XG0gxIUc12ElsLzKJrhUTaMlN0EIGAglpqcjsVeSPDx6mAO4g1AsxuDyaW4kadk4DVFJMWhI8W+SN1wswJGDRdIcFJKeeF8mSYtjo5aXVEglOUEIGAilB3cTciGvkioI9HLCQCgCI3zIiVJab+Q7H5KTKN1V0xgIpWasH5OMRw9bWqKWjpNoEyA9jioY5E5ScZrQonT1UCDd4+YxEEqNrz144tHDlpZUKNl7YUmK98VNFBaWVMiOku5x8xgIJQiPmLEsCnCwkB2NK2XEI96PwSpgWdJeLIaBUIJwN6FlnSmnbraku4NkWwHpGaYhZ8up3sB3PiQkUaI7CM0wEErQGD/mcBEePWwx0nset+SpFTDYkxwtxjpgGdo6WtFIB0j3uHkMhBLkYQs9HEk6Hj1sIXiymhjF++EmCovZX0DjfaV83DwGQmnCJ5RaionC4SJ2lES3T0nYGNxQazmSXyyG1VuacNWcpWSU0u4ORGPHdz7QbYrxJueraEUj3/mQhGRJTxACBkKpGu3LpBTTRhPf+RC/REkvlpMwGwaGepNDRXg72FWXqmmjifZxkXItwEAoTS420MeFnCjBoaGuSipkpT0oJGHxfgyestR1SYV0rNSPm5f4nydn8X4kEVuBrjGwkFpMR/lgNRElnCm3CDk8jxpruGTh0cNdl6ajIS7EzZbvfKBOGexJrtXS4nq+8yFyyTJYNY2BULJG+JB0PHq4a6T6GFKZUBAYrmFwmrArciupipH+cfMYCCXLUQWh7iQFjx7ugiQtK9XnzsgEnrLURYlaOlYG94JYyaVsjB/B0dFOazDByVI6zEf6rYCE4eM5u0jyOwjNMBBKWbwvrprrvJRiGupOnFV85wN1QZgHKW+kBbVYCzqDAhwqZCU/QQgYCKUtDo8e7oIkeTQB0kYARuLtYGedKafutqSbDI6bx0AoZWoFRHmSI0XYCnRGopbGS337lBzE++I0YSclyua4eaznEhfvx+BZa51Qa4Sz5TTOWxatgLSN8SMHMBB2ihx2EJphIJQ42+y9Hy6c/vBTC3U6Hd95EY1tCTuHTrzf6YeXG2sq+c4L6ir7qnzdp/OG3fPQkaNH+c6LaJw/f37KjEf3rprtVpTJd16s4RaBsLa29vz581VVVdbJDbKs3Nzc//53rf7uVV8xwyfPeJTv7IhDWlravLUfZ8W/UeQ+8KHH5vGdHdRVd06dUR92X0r0y1PnLioqKuI7OyLAsuy4+6bv6THbMG7RrDmP6fV6vnPEuXYD4RdffNG7d29HR8c+ffq4urr6+/tv2LCBUhxhEJOMjAz9wCngHcxGTLlaUMh3dsQhNe1ERdiD4NWLHTojK/c839lBXdLY2FjZSKHfWPDr3xQSf/bsWb5zJALFxcVNTr4QHAc9wow9o8+dO8d3jjinbPPddevWvfjii0OGDFm3bp1GoykrK/v5558XLVqUn5+/fv16K2cRdVp0dLTzm4+UBo8k2uzgnj34zo44jBgW6/bZC+U9I1QXj0QMGsB3dlCX2NraetorS07/SJ01tucPhIU9z3eORMDHx0ddWwzZ+8DWXnX1ZN++b/OdI+7RGzQ2Njo7Oz/xxBOt3n/ttdcUCoVOp7vxV4Rj/vz5mzZt6mDi6upqTjMjBIlJyUPufdhv2svl5eUWuaAcCm3tV7+4jpq1eOkqvV5vkQvKodAszlKFptVq//PMc6pRc35PSbfIBYXMUoV25coV9R3zJs2cm52dbZELClwbPcKSkpLq6up581rPjjz99NPLli27evWql5dXR+JrQkJCRkZGv379ZsyYoVS28UHp6ek//PCDo6Pjww8/rNFoACAvL+/QoUMt0zzwwAOurq4AkJOTk5CQoFKpZs6c6e/v3/FIL3Pxo0ftGzbK7xuDgwvuDO8oOnD8f9beuW6ogu+MIAvw9fX97N23i34z1uJmmA4zuvf0+s+Gn6a3PWQoPW18MxwdHQkhZWVlrd4vLS1VKBQ9e/bsyHUXL168Zs0ajUbz0UcfPfzwwzcmSExMHDt2rK2t7cWLF6OioioqKswfkf6XhISE559/3hxBMzIyYmNjWZYtKSmJjIy8fv36bf+hMuakgiAnklmG87sdlaqjsRpZrBqXj1hvJrUYq0BHpRTTOFlVgTb7iePGjRs4cODFixeb3ykoKBg1atSCBQs60s0sLS21s7Mz/3p5ebmdnd2FCxdu/Ij169ebf77zzjvffvvtVgkef/zxOXPmmH+ePn36yy+/bP55xowZzT/fCIdG2/TUEeOGsyaLXEryhcZS6vVl07Ua1oLXlHyhccGyhba/gB3+o8GCFxQmSxXak5ZrMUSh7bGCzz//vKmpqXfv3pGRkRMnToyJienVq1d6erpWq33gL4mJie0F12PHjnXv3j0oKAgA3NzcoqOjk5KSWiZgWfbgwYPjx483vxw/fnxycnLLBPX19QkJCXPmzDG/TEpKmjBhQnPiVldDtxSrIan4GIqOuVhF7ZSkuwyOlZKVod4ks4w24dkSHZMqsx5h20PA3bt3T09P//LLL5OTk69fv86ybGhoKABcuXKlOU11dXV7Fy0sLPT29m5+qdFoCgv/sXa/tLTUYDA0p9FoNFqttmWCHTt2eHt7x8XFAYDRaNTpdM0Tkzcmbik/P//EiROnT582v7Szs1u5cqWDg0ObiRsaGlQqWcycRbrAkiJFQ4MFTh2VfKEdLCBDPElDQ4MFryn5QuOCZQtNARDoyKRpG6M9pXxHaJFC0xvgkl7Rx6HRopWANyqVSqG4xXx/u3Ohjo6OTz311FNPPdWJD1YqlSz7962XyWRqtVjG/LI5jdFobPWft3nz5kcffZQQAgAMwygUipskbsnBwcHf33/w4MHNH2RnZ9deKSgUilsWkDT0dgWWQlGjopt9Vy8l+UI7Xgqx3mDZv1HyhcYFixdanAaOl5GhGgteUnAsUmjpxRDhDnYqiXxjzXHk5jhZFOTr61tQUND8UqvV3nPPPS0TuLm5qdVqrVZr7hRqtVpfX9/mf71w4cKxY8e2b99ufskwjLkXOGDAgBsTt+Lh4RESEtLB+K1SqeRznz7E23S8jDzg0tWFc5IvtLRS49z+CpXKkuNCki80Lli80Ib5sD/mU5VU2vc2WaTQjpezcT4SL6hWOFlPPHz48KqqqpMnTwJAfn5+ZmameTqwqKjIPGhJCJk0adLOnTsBgGXZ3bt333333c2//tlnn02cOLFltLv77ru///5788/ff/99y8Sog2K9cZrw1qoNcFlPB7nLaHZEPmK98UksHZJazMbK7Lh5TnqEDg4OK1eunDJlypQpU3777beFCxeao9quXbs++uijzMxMAFi6dOnYsWOvXbuWn59vMpmmT59u/l2j0bh169YPPvig5QVfeOGFuLi4yspKvV5/6dKlr776iotsS1uchixOw6UCt5Cmo4M9iQ3uN5OiIGfCUnqtlvbAlVDtowBpJfSLUfKqA1ztl1y4cOHo0aNPnTo1e/bsoUOHmt+89957m38ODw/PycnZt2+fk5PThAkTbG1tze83NjZu2bJl9OjRLa8WGBiYk5Pz22+/2djYTJgwob3FL+gmojxJdgWtM4K9XPbIdkZKMZXbvbCsDPVmUorpg4H4X9yunArqYUs0dnznw7o4bBTDw8PDw8NbvuPr69tywFOj0cycObPVbzk4OIwbN+7Gq7m7uzf3GlEn2ClhgBtJL6UjfLAVaFeqjn26n7zuhWXFvI/owUC+8yFgsttKDwD4PEJZicPdhDdFAY6X0FgNVgrJivMmKXi+zE2l6uQ4KIJ1XkZivQmeMnUT2RXUU0281HznA3EmyovkVNA6I9/5ELBUHfYIkaQN05AUHa6XaVdqMY2T372wrKgVMNCdpJfi7WDbKhqhsI4OcJNdLcBAKCPdHIgtQy5VYyvQNjxrWw5wdPQmUnQ0xoso5FcJMBDKS6yGpOA0YTtSsEcoA3ju7k3IcAehGQZCecFpwvaUNUJRPe0vv0EhuRmmIUeLWawDbUopluliMTn+zXKGC0fbk1os00EhufGzJ3YKnCBog4lCeikd4iXHOoCBUF4iPMjFalptgadQSE2qjpXhYjl5itPgNGEbTpfRHo7EzZbvfPABA6G8qBiI8CAnSrAVaC2lmMZ6Y3WQBTx3t03y3DhhhjVfdmJx1dwNjCykl9IYWQ4KyVCcBmfK2yDPrfRmGAhlJ1ZDUnE34T+dLqc95TooJEPhHuSSnlY18Z0PgZHzQbsYCGUnzps5pqO4bK4lOQ8KyZCKgUicIPin4nqobqJ9XGVaCzAQyo63HbjbkrwqbAX+lirje2F5wg21rRwtZod6d+BR7hKFgVCO8HCNVlLwTBmZifUmqcU4QfC3VLnuIDST718uZ7G4WKCFwjrQN9HeLhgIZWSYhkkrwQmCv6XIe3YAA6Ec4bb6llKK2ViNfAeF5MlTDR62JLcSawEAQKMJTpfRaE/5VgIMhHI00I1o62hpA9/5EIZUHe4glCPcVt8so4z2cSWOKr7zwR+s/3KkIBDtRY7jqjkAkOsjuRFuq2+GDyDDQChTsd64mxAAoNEEZ8pplIwHhWQLJwia4QPIMBDKVKw3g+NCAJBeSvvKe1BItga6kUKcIAAAeZ8pY4aBUKZiNeRECTXKvk+IW+lliyEQ40XSZD9BcLWGGlnay0nWtQADoUy52kAPB3K2Qu6tAN4LyxnuJgSAlGI6TMY7CM3k/vfLGa6aA4BjGAhlLFaDEwQ4QQiAgVDOYmW/WOAPPaUUAuQ9KCRnQ73JyVK5TxCkyH7JKGAglLM4b7mfL4Mnq8mcqw34O5Iz5fKtBfVGOFdFI2W/ahoDoXz1cSXVBlpYx3c++INnbaM4eZ++nVZCQ92IWsF3PviGgVC+CMAQL3JMxrsJZX6+IoI/18vINxDiqmkzDISyFqthZDtNWGuEc5U00gNbAVmT+bZ6HBQxw0Aoa7Eyfh7TiRIa5kFsZT8oJHO9XYjeQLV1cqwFFOCYjh2KgRADocwN8SaZZbTRxHc++ICL5RAAEICh3uSYLDuFF6qog4p0c8BagIFQ3hyU0NuFnCqTYyuQqmNxySgCgFhvRp7ThCk4LvoXDIRyJ885EgpwTEeHeGErgCBWrgtH8VilZhgI5U6eq+bOV1FHHBRCAAAQ40VOy3KCAJeMNsNAKHexGnJUfoEQJwhRMwcl9HElGTKbIKg2wB96OsgdawEABkIU6EQo0PwaebUCeL4iakmGpywd09HBnkSFEQAAMBAiABgqv2cT4iO5UUsyPHc3pZjFCcJmGAiR+Wn1MmoFqg1wtQYHhdDfZLihNrUYB0X+hoEQye55TKnFNMqTKPG7j/7Sy4kQAldlM0HAUjheQod6Yx34ExYEgihPkldF64x858NacAchutEQLxndDmZXUG874qXmOx+CwWEgNJlMWVlZWq32JmmuXr2am5tLaevvn1arPXPmTE1NjfmlwWCoaMFgMHCVaVmyVcBAN3KiRC6tQEoxjcV7YfRPspomxOPmW+GqObhy5Urfvn1nzpwZERHxzDPP3JjAaDQ+8MADw4YNmzp16uDBg0tLS83v19TUTJkyZeDAgbNnz/b39y8sLASAvXv3ent7B/0lOTmZo2zLlny21f81KIStAPqHODlNE+JZ261wFQiXLl06YcKEzMzMnJyc77///tChQ60S7Ny5Mysr69y5czk5OcHBwWvXrjW/P3/+fIZhCgsLMzMzCwoKPDw8zO8PGTKk/C933HEHR9mWLfmsl8mqoD52xBMHhdA/DfYkeZW0Rh6DTbiVvhVOAqHBYNi5c+fcuXMBwMPDY+rUqdu3b2+VZtu2bTNmzHBwcACAuXPnbtu2DQCqq6u/+uqrdevWGQyGxsZGOzs7Gxub5l8pKSlpamriIsMoTkNSilk5RMKUYmwCUBtsFTDInZwslX4lKG2A4nrazxVrwd84CYRFRUWNjY1BQUHml4GBgVevXm2V5urVq4GBgc0JtFptU1PTpUuX1Gr1G2+8ERkZ6efnN3fuXJPpz4OPTp48GRER4eLicv/991dUVLT30Q0NDdeuXUv/S2Zm5o0TkOhGfvbEQUkuVkm/rPB8RdQemUwQpOrYod5EgZWgBSUXF62trQUAW1tb80t7e3u9Xn9jGrX6z/EpOzs7SmldXV15eXlNTY2/v//58+crKipiYmK2bNkyZ86cYcOG6XQ6Z2fnsrKyf/3rXy+99NLHH3/c5kdfuXIlLy9v3759zVdOSEhwdnZuM3HzYhwEANEeNon5TT4BtzhyUeyFdrTIdl5Qk15v1fZO7IXGC+sXWrgT880fymcCRTzs1JFCO3hNGekCen29FfIjBGq1WqVS3TwNJ4FQo9EAQEVFhaenJwCUlZX5+PjcmKa5Y1deXq5Wq11cXMzJZs+eDQBubm5Tpkw5cuTInDlz3N3dzSk9PDyef/75RYsWtffR/fr1mzx58vz58zuYVScnp9v726RrhB97qkL5hNOtn1Qr3kIrbYDyJkNUN0fG6rfD4i00Hlm50MYE0IXpRkcnJ1F3lm5ZaCcrja+EK0T+V1oYJ0Ojbm5ugYGBqamp5pepqamDBw9ulSYyMjIlJcX8c0pKSmRkJCEkKCjIzc2tZYB0cXFp9YuFhYWurq5cZFvm4mTwMJqUYnaIF7F+FESi4GdPnGzIBUlPEBhZOFWKDyBrjZMeIQAsWLDghRdesLOzy8rKOnr06ObNmwHg4sWLY8eOPXv2rLOz81NPPRUTEzNs2DCNRrNq1ar169cDgFqtnjdv3sKFC998881Lly5999135uWmGzdudHFx8ff3z83NXbFixZtvvslRtuUs3J1c1dOqJnCxuXVikUrV0VgN7iBE7TKftdbbRbJxIrOc9nQiEq7jncNhIFSpVOvXr3dzc0tMTPT29gYAR0fHiRMnmodr+/Tp89NPP7377rv19fVr16594IEHzL+4cuXKTZs2vfHGG56envv27QsPDweAgICAhISE4uJiX1/fLVu2TJo0iaNsy5mSgQhPklZC7+wm2VYgpZgujcBAiNpl3kf0SG++88EZfABZm4jEFlUuWLAgJCSkg3OEer0eZ25aeuWEyVZBVkTeLFSIt9AMLLh/abg+XWX922HxFhqPeCm09FL6yEHT2alc9RC4dstCm55kmtCdPByCt4P/gMWB/harIak6lu9ccCWzjAbioBC6qTB3crWGVjTynQ/O4API2oSBEP0t1ps5pqNS3VePp2mgW1IyMNiTnJDotnptHa010mDpzoB2GgZC9DdPNWjsSE6lNFsB3EqPOsJ8yhLfueBESjGN0+Ci6TZgIET/IOEnlOLhaqgjYr2ZVIlWAbwXbA8GQvQPUn0YjbaO1hlpkDO2AugWYjUkrYSaJFgJzA8gwyrQBgyE6B/ivIkkb4eP4qAQ6hgPW9DYkZwKqdWCRhOcLadRuJW+LRgI0T8McCPF9bSkge98WBo+gA11nCRPWTpZSvu5EgexbgzhFgZC9A8MgRgvkia5VgAfyY06LlaK4yK4avomMBCi1qS3m7DRBNkVNMoTWwHUIZJ8HhMOitwEBkLUWqw3I7GFoydKaD9XYo+DQqhj+ruSkgapTRCk6thY7BG2AwMhai1WQ9JLqVFCfUIcFEK3xTxBcExC4yJX9JQA6emItaBtGAhRa84q6OlITpdLp1OI26fQ7ZLYbkLcRHtzGAhRG+I0ktpWn1rMYiBEtyVWWgtH8V7w5jAQojaYH0bDdy4s47KeMoT446AQuh1DvUl6KTVIZXAUe4Q3h4EQtUFKq+ZSiukwbALQbXJWQS8niUwQ1BrhfBWN8MBa0C4MhKgNIS6k1kALaqXQCqTqKC6WQ50QJ5Vzd9N0NNyD2Cr4zoeAYSBEbSAAQ72ZY5LoFOIjuVHnSObcXVw1fUsYCFHbpNEK1BrhYjWNwK306PZJ5txdXCx2SxgIUduk8TymYzoa7kFs8GuObl+wC6kz0usinyCgAGkldKg31oGbwdJBbRviRc5W0AYT3/nomlQcF0WdRQBiNaKfIDhXSZ1VxNee73wIGwZC1DY7JfRxIRml4m4F8Fgp1BUS2EeUgovFOgADIWqX2B9GQwGO6XBQCHWeBCYI8KztjsA2ArVL7A+jyaukbrbEx47vfCDRivEiWSKfIMCt9B2BgRC1K05DjhaL+GiNFLwXRl1jp4S+LiRdtBMElU1wrZaGumEtuAUMhKhdPR2JkiFX9GJtBfB8RdR1oj53N7WYRnsRJTbzt4IlhG5G1IsFcFAIdZ2oq0CqjsUq0BEYCNHNiHeasLIJrtfSgTgohLomTkNSRDtBkKqjsbhYrAOwjNDNiPdhNKnFNAYHhVCX+TsSlTgnCFgKJ0pojBfeC94athPoZiI9yPkqWmPgOx+3DweFkKWIdBPF2QrqZ0881XznQwwwEKKbsVXAIHdyQoSr5lKKcVAIWYZIz93FVdMdhy0FugUxHj1sonCylA7BVgBZgkh7hKnFeKZMR2EgRLcQqyGpOpEtFjhbTv3sibst3/lAkjDYk1yoFt8EAT59qeMwEKJbGKZhUoupuO6HceMEsiAVA2Hu5HiJmCqBrh7KGmlfF6wFHYKBEN2Cxg6cbcj5KjG1AriVHllWnNimCVN17FBvwmAl6BgMhOjWRDdHgoNCyLJivUmqqHYT4g7C24IlhW5NXKvmdPVQ3kj74KAQspw4DZOio6xoKgEuGb09GAjRrcWJqkeYomNjcVAIWZTGDtzEM0FgYOFUGY3BQNhhGAjRrYV5kPwaWtHIdz46JhV3ECIOiOiUpVNlNMiJOKv4zod4YHuBbk1BIMqTpIlk1Rw+khtxQUTn7uKq6duFgRB1SJxGHIsFDCxkltFoPF8RWZqInseUiveCt4mrQFhcXDxr1qzQ0NCpU6deuXLlxgQsy65ZsyY8PHzkyJE//fRT8/tNTU2vv/56dHR0RETEiy++2Pz+xo0bBw8eHBsb++2333KUZ3QTsRpGFOtlMkppsDMOCiHLG+ROrtfScjFMEKQW0zicILwdSo6uO3PmzICAgF27dm3evHny5Mlnzpwh5B//Me+999633367bdu2K1euzJgxIy0trW/fvgDw2GOP5efnr1+/3tXVNSsry5x427Zt77zzA4JligAAHI9JREFUznfffVddXT1t2rSAgIDY2FiOco7aNNSb/FtHTYIPhSm4cQJxQ0Egyouk6ehdPQT9BSuopY0sDXIWdCaFhpMe4blz5w4fPrx+/frg4OA1a9bodLpDhw61SvP++++vXLkyNDR08uTJ999//yeffAIAZ86c2bVr186dO0eMGBEaGjp9+nRz4vfee++ll16KiooaM2bM448//sEHH3CRbXQTHrbg50CyK4QeCVNx1TjiTJwYjhs8WkzjcLHYbeKkvLKysvr06ePk5AQACoUiMjLy7NmzLRM0NTWdO3cuOjra/DI6Otqc4Pjx49HR0d98882kSZMef/zxy5cvN18wKirK/HNUVFSrqyHrEMW2etxKj7gT6y2CCQKcIOwEToZGS0pKXF1dm1+6ubkVFxe3TFBaWkopdXFxMb90dXXV6XQAcO3atWPHjg0YMGDVqlW7d+8ePnx4Xl6eWq2urKxsTuzm5mZO3KYzZ858880369evN79UKpXJycnNv9tKbW1tqwFbdBORLorDWuZeN+EW2rVaaDTZeJOGmhq+s/JP+E3rBAEW2iAHclynqtLXKISVr7/V1tYe1tq8EWGqqRF6z9Vq1Gq1UnmLSMdJIHRxcamtrW1+qdfr3dzcWiYwh8na2lrz+zU1NeYfnJ2d1Wr1O++8o1Qqo6Kitm3bduDAgfvuu8/e3r75gs2J29S/f//Ro0fPnj3b/NLe3t7Hx6e9xJRSR0fHzv+dMhPvTzeeMzk4OAi20M7o2OE+Qvw/xW9aJwiw0BwBujkY/zA4hLkLNBLWGWheNTO8h609V8s/pImTodFevXpdvnzZaDSaX54/f75Xr14tE9jb22s0mvPnzzcnCAgIAIDAwEAnJ6fm6O3q6lpTU2O+4IULF1olbpNSqfTw8Aj8y02iILpd/d1IWSPVNQi0CQA8axtxT+ATBKcqmAFuBKPg7eIkEA4ZMsTT03PLli0A8Ouvv5aVld11110AkJaW9u6775rTzJgxY9OmTSzL6nS6b775ZubMmQAwceLEhoaG/fv3A0B6enpubm5cXBwAzJw587333jMYDNXV1Z999pk5MbIyAjDEi5woE26kwfMVEddiNYLeVp9WyuAceSdwEggJIVu2bFm9erW/v/9//vOfL7/8Uq1WA0B2dvaOHTvMaZYtW1ZbW+vj49OnT5+ZM2eOHTsWAGxtbb/++us5c+YEBwffc889H3/8cVBQEAA8++yz7u7ufn5+PXv2HDVq1AMPPMBFttEtBeqzP9n8WWZmJt8Zaa2+vv6zrV+f2bttgKMY9nkh0RpoW/nb9s93797NsoKbhEtKSvru6y+CDfl8Z0R8COXskassy5aXl7u6ut5korKiokKtVtvZ2bV802QyVVZWenh4tEpcVVWlVCodHBxu8qELFiwICQmZP39+R3Ko1+vNS1tRR/y2b/8DC1dWR83yOL3tk9XP3Tf5Hr5z9CeWZcOGjTnfbazRxA4qOZRxeL/QFlngN60TBFho1dXVoXFjroX+26EqP96lcs+3X/Cdo7+teGPdpl/TKwNGeqR9cuyXhODgYL5zJCYcjiUzDOPp6XnzNG0ue1EoFDdGQQBob/Enso73t2yrvn8D9Agr6zNq0+aVwgmEly5d0tn4NE1YAgCFW85evXr1JrPICHVaSkpKZciddOz8GoC0d4YbjcZbLke0mq3bd1bOSwJGWW7vsm3n7qUvLeY7R2KC+y5RRwX37KbKTwcA5urJoJ7d+c7O37y8vFjdJTDUQ2MtW3K5zbsohLquW7duKu0ZYI1QXWxDBRQFAUDj7QXXswDA/vrJQH8BVU9RENB/JBK4lUsWZ8589My6j6qc/Ff+8jnf2fmbq6vrHf95fvfb8Z5qZu3qV4U2noYkIzQ0dMG/xnz4zrAyk+38NzbwnZ1/eOvt9eOmP+luKJswdtRDD+IqitvD4RwhL3COkGt6vX7uSftID/LCIKEMJzSYIHiH8efxCsHu7sJvWicIudB2XmHfPM2euFcpnC/co4dM/o7kuZBawRaakAmlLUMisjyC+b+zJr2B73z85f0cNs6bCDYKIun5Vy/GyMKv14TSi7haQ3/MZxcMwPa8k7Dg0G3r50rG+jEf5Api+XiDCdZnsUsj8JuMrIcALI9klqcL5XEsqzLYef0VbrZ850O0sPlAnbEyklkvjE7heznsMA0ZhN1BZF33BTBGFn4RQKfwUjV2B7sKyw51Rm8XMtaPeT+H505hvRHeyWJfDcevMbI2c6dwhQA6ha9nsvMHYHewS7AFQZ20MpJ5J4vnTuF7udgdRLy5L4AxUfg5n89QiN1Bi8DiQ50U4kLGdWPe469TWGeEt8+YlmJ3EPGEACyPYFZk8NkpXJPJLhigcLXhLweSgI0I6rwVEcwG/jqF7+eyo3yZUOwOIv7cG8AwwFun8FI1/SmfnY/dwS7DEkSdZ+4U/o+PTmGtEd4+Y8LZQcQvAvAqf53C106xz2J30BKwHUFdsiKC2chHp/D9HHa0H3YHEf+m9GQYgJ/yrX07eKma/nyNfQa7g5aAhYi6JMSF3GH1TmGtEdafNb0Sht9exD8CsDSCWZHOWrlTuPoUu3AgdgctA5sS1FUrIq09U/heDhuP3UEkGFN6MkoGfrxqvdvBi9X0l2vsvP7YgFsGliPqqmBnMr4b8262lVqBWiO8c9b0Cs4OIiFZGs6szLBep3B1BnYHLQlbE2QByyOZjdmmaqt0Cv+XzY7xYwa6YXcQCcjknoySgT1W6RRerKa/FeBiUUvCokQWEOxMJnS3Rqew1ggbskx4sigSoKXhzCqrdApXZ7DPDlA4q7j/JNnABgVZxrIIZkOWqbKJ2095N5sd48f0c8XuIBIcc6fwB447hReq6O/YHbQ0LE1kGcHOZFIP5n9cdgprjbAxy7QMu4NIqJZFcN4pXH2KfXagwgm7gxaFbQqymGURzMZsDjuF72azY7sxfbE7iITqHn/GhstO4YUquq+AfQYXi1oaFiiymCAuO4Xm7iCeLIoEblmEYtlJlqNe4apT7ELsDnIAmxVkSdx1Cjdls+OwO4gE725/Yq/kpFN4oYruL8C9g5zAMkWWFORM7va3/PLRGgNswsWiSCSWRyqWp1u+U7gyA7uDXMGWBVnY0nBmk6U7hZuy2Tu6MX1csDuIRGBSD2KvhN0W7RReqKIHtNgd5AoWK7KwIGdyjz+zyXKdwhoDvJttehW7g0g8Vli6U7gyg12E3UHOYOOCLO/VcObdbFNFo2WutjGbvbM7dgeRmEzsQRxVsOsPy9wOnq+iB7Ts09gd5AyWLLK8IGcy2UKdwhoD/C8bTxZF4rMiQrEiwzKdwpUZ7HOh2B3kELYviBPLI5n3cizQKdyQxY7H7iASobt6EEcVfN/lTmFuJT2gZZ/qh201h7BwESd6OpJ7/JmN2aauXKTaAJuyTS9jdxCJ04oIxcoudwpXn2IXY3eQY9jEIK4sj2Tez2G70incmMVO7IHdQSRWd/UgbrawswudwtxKmojdQe5h+SKu9HQkk3t2vlNYbYB3cXYQidyr4YpVXegUrspgXxikcMTuIMewlUEcWhbR+U7hxix2kj/TG7uDSMwmdO98pzCnkiYVsk/2xVaac1jEiEM9HcmUnsyGrNvuFJq7gy+H4fcTid7ScMXKTu0pxO6g1WBDg7i1NIL5IJctv81O4YYs9m7sDiJJGN+duKvhuyu31ynMqaQHsTtoLVjKiFs9Hcm9AczG2+kUVjXB/7JNS7A7iKRiWcRtzxRid9CasK1BnFsafnudwg1Z7D3YHUQScmc34qGGhA53CrMr6OEiXCxqPVjQiHP+juS+gI7OFFY1wXs52B1EUrMsQrG6w53CVRns4lCFvZLjPKG/YHODrOHVDncK38kyTe7JhGB3EEnLHd2Ihxp2XL51pzC7gh4pZp/E7qAVYVkja/B3JP8KYN65Vaewqgk+yGVx7yCSpGURitWnbt0pXJnBvjAIu4NWxWFhnz59+rfffnN1dZ0+fbqTk9ONCUpLS7dv315fXz9lypSQkBDzm7/99lt1dbX5Zy8vr9GjRwOAVqs9evRo8y8OHz7c19eXu5wjLrwazkTsMj47QOGpbjfNO1mme/yZQCfsDiIJuqMb8VLD9svs9KB2b/WyK2hKMd0ySmHNjCGubr337t0bHx9fXV3966+/xsXFNTQ0tEpQVlYWGRmZlpam0+mio6PT09PN7y9atOiDDz5ISEhISEhITk42v5menv70008n/KWoqIijbCPu+DuSab1uNlOI3UEkecsiFCszWFP7ncIVGeziQQx2B62Mq/Jes2bNG2+88eSTT7IsGx0dnZCQMGvWrJYJPv3004EDB27duhUA7O3t165dm5CQYP6n1157bdiwYa0u2KdPnx07dnCUW2Qdr5g7hQMVXm11CtefNU3G7iCStHHdiI8d7GinU5hdQVOL6VbsDlodJ3ffdXV1R48enTRpEgAwDDNx4sR9+/a1SrN///6JEyeaf540adLvv//e/E+JiYlbtmw5ffp0y/SVlZWfffbZ7t27q6qquMgzsgJ/R/JAYNt7CrE7iGRieaRiRTudwhUZ7AvYHeQDJ0Wu1WoBQKPRmF/6+PikpqbemMbHx8f8s6+vb3V1dU1NjaOjY0BAwMWLFy9cuLBo0aJHHnlk/fr1AKBSqXx8fNLS0vLy8p588sm9e/eGh4e3+dEFBQXZ2dn5+fnmlyqV6sUXX7Szs2szcWNjo42NTZf/XHnpYqEt7g8xP5Kneps8bf/REvz3NLmnB/jZNDVa6Ln2goLftE6QaqEN9wAfNfnqXONDvf7xfnYlpBQxnwxlu1IFpFpoXaFUKhWKW3SyOQmEhBAAoPTPlo5l2RvzQQhpmQAAGIYBgF9++cX85qVLlwYOHPjwww+HhYVNmDBhwoQJ5vcXLlz40ksv/fbbb21+tFKptLe3d3Nza36pVCrNV74RwzDt/RNqTxcLzd8RpvWC/+XB6oi/h0Arm+CT83B0EjCMNMdF8ZvWCRIutKVhMO8YeaAXKFv8fa+dhsUDwdGmS3+yhAut08zx6OY4CYR+fn6EkKKiop49ewJAUVFRc+evZZrmNS9FRUWurq729vYtEwQFBQUFBeXl5YWFhbV8f/z48bt27WrvozUaTUhIyPz58zuST5VKpVLhEUa3p+uF9mokDf/e+NwgVfNM4aYzpvsCIMRNslMj+E3rBAkX2p3+0O2s8ftrzIzgP4NWVgU9Xmr6ZoxS1bUmWcKFxilO7h3s7OxGjhy5Z88eADCZTD///LO5P9fY2Hj27Flz/2/ChAnmBACwZ88ecwLzP5nl5+dfvnw5ODi41ftJSUnNey2QGPVwIA8GMu+c/XOmsLIJPspl8SgZJCv/397dx0Rxp3EA/+GuIEpW3IWyL7ws8VquWqsoxVavdO2xFhAluFBsOCkvAipKS7Uxnj0P25pUgrY2rVrSi33RQmpRKVRgQSmgFsWXUisaUCDgbkHKi8ACC7sz98fk9gwgvkR3hp3v56/BPJpvnizzuPP7zcy/5wt2XKZM/zuxbb9IbZk7yRGrgyx5Uo3fvn27RqNpaGi4du2aUChcuXIlIaShoeH555/v6upydnaOj4/fv3+/RqORyWTfffddWVkZIeTSpUuJiYmLFi2iKCo3NzcmJmbBggWEkPj4+L6+Pk9Pz2vXrp0/f76oqOgJxQbr2Dpv0ryjprQ5AtcpZPcV80rlJG9sFgU+WSKzk08lOQ3UP/4y6fcu+txt+rDKZq+IcN//F+oeu/r6+uLiYhcXl7CwMGa7Sl9fX3l5+WuvvSYUCgkhPT09x44d6+/vDw0N9fDwIIQMDQ2dPn36+vXrQqFw/vz5fn5+zD/V0tJSWVnZ3t4uk8nUarVlCXC01NTUB7802tvbO+ad/jCOx9W0lLPmabRxjWfP38ol58KEtj0I8Ul7BDbftNOtdHyFqXRRe+rvkr97TN44+zFcFLH5pj0hT3AQsgKD8El7XE37z5GCpE3bHMQykYOgufKYbW91wyftEdh809rb273+ttzOycXYoTt77Ct/37n3/zv3Y/NNe0KwMAPs+PDDD6l3Tw1syO9RLDh6791PALZq1959g6qN/euOmeO/evdfH7Idh9cwCIEdZrOZCO0JIZT91MFBW7x5EGBcg8YhYj+NEEIcpg3a5P2zEwd2KQE7/pmWsn1vMC39q0vn9QgNdj8B72xOSTwevNJ4o3hSU/WuA3vYjsNrGITAjrUJsSuCl+r1+rlz5+LOJ+AhpVJZd/H0lStXnn56p1gsZjsOr2EQAmvkcrlcLmc7BQBrpk6dunDhQrZTAL/XCLVa7d236sODwE2cjwBNe1hms3n0k/phfIODg8wN2fCweD0IU1JSbt++zXaKCWb16tVGLOw/DIPBEBsby3aKCeaPP/5ITU1lO8UEU1dXt23bNrZTTEi8HoQAAAAYhAAAwGsYhAAAwGu2tmv0xo0bWq3W8l6L8XV3d0dFRdn2w70eu+Hh4ZCQELzz7MFRFGU0GtVqNdtBJhKj0djR0YGmPZS+vr6mpiY0bYTw8PD169ePX2Nrzxqtrq6+devWAz5tr7Gx0dvb+/51cBc07RGgaQ+LpummpiY07aFQFNXS0sK8BRYsvL29Z86cOX6NrQ1CAACAh4ILXAAAwGsYhAAAwGsYhAAAwGsYhAAAwGuC9PR0tjNYQ2dn5/Hjx+vq6ry8vMa8X8JkMmm12jNnzojF4unTp1s/IQcZDIb8/PyamhqFQuHo6Di64MaNGyUlJdevX58xYwbei81oamrKy8tra2vz9vYe5yaT2tra2tpapVJpxWjc1dDQkJeX197e7u3tbWdnN2bNpUuXioqKdDqdm5vblClTrJyQg+rr6/Pz8zs7O5VK5ZhN0+l0hYWFtbW1YrEYv573QfNAQ0ODm5tbVFRUSEiIj49PZ2fniAKz2bx06dIXXnghISFBLBafOnWKlZyc0tXV5ePjExQUtGrVKqlUevPmzREFn3/+uUwmi4yMXLlypUgkys/PZyUnp2i1WrFYnJCQ4OfnFxwcTFHUmGV6vd7V1VUikVg5Hjf99NNPEolkzZo1vr6+YWFhowsoikpKSvLw8Fi9evXy5cszMzOtH5JrcnNzJRJJYmLinDlz3njjjdEFRUVFzs7OCQkJcXFxzs7OOKeNjxeDcN26dUlJScxxUFDQrl27RhQUFhYqlcr+/n6apvft27d48WJrR+SejIwMtVrNnMrXrVuXnJw8oqC5udloNDLHmZmZvr6+1o7IPQsXLjxw4ABN0/39/Z6eniUlJWOWhYeHb968GYOQMW/evIMHD9I03dvbK5PJKioqRhQcOnRo5syZXV1dLITjJIqifHx8cnJyaJru7u6WSCQXLlwYURMaGpqens4cb926VaPRWDvlhMKLNcL8/PyIiAjmWKPRFBQUjCgoKChYtmwZc/UvIiLizJkznZ2d1k7JMQUFBRqNhrnkEhERMbppHh4elovMMpkMr6S4ffv2uXPnNBoNIcTR0TEkJGR00wgh2dnZDg4OK1assHpALmppaampqWGa5uTkFBQUNLpp2dnZa9eu7ejoOHXqVEdHBxsxuaW+vr6hoSEsLIwQMn36dLVaPbppEonEYDAwx/39/S4uLtZOOaHY2iPWRqMoqrW1VaFQMD8qFAqdTjeiRqfT+fv7M8eurq729vY6nY7n74zW6XR3N621tdVsNgsEgtGVg4ODGRkZa9assW5AztHr9Q4ODpYzjkKhqKmpGVHz559/vv/++z///HNdXZ3VA3KRXq8XiUSWFSyFQtHY2Dii5ubNmwaD4ciRI+7u7uXl5Tk5OYGBgVZPyiF6vd7FxcWyUDrmOW3Xrl3R0dHBwcFms9nOzu7w4cNWjzmR2P43QoqiKIqyLCYLBAKTyTSixmw2372vYcwavrm7JwKBgKZps9k8ZllMTIxSqcTb4x7kU7Rhw4YtW7a4ublZNxp3Madpy49jNm1wcFAgEFRVVeXm5n7wwQdvvfWWdTNyzoM07cSJEzqd7vXXX1+1alVjY2NxcbF1M04wtv+NUCgUurq6tre3P/vss4SQtrY2uVw+okYmk1ne0NvT0zMwMDC6hm/u7klbW5uLi8vo3bYURcXFxd25c+fHH38c88sir0il0oGBgb6+PicnJ0JIW1ubTCa7u6C5uTkvL08kEv3yyy+tra0GgyE5OTk9PX1EGa9IpdKenh6j0ejg4EDGahohRC6XBwQEMKd+lUq1YcMGk8kkFNr+uetepFJpZ2en5QpNW1ub5eKNxXvvvZeVlbVs2TJCyIwZMzZv3hwdHc1C1gnC9r8REkKWLFmi1WqZY61Wq1KpmOOOjg7mW45KpWL2NRBCiouLZ82ahf+zq1QqS9OKi4stTevu7h4aGiKE0DS9fv36pqamo0ePMmcxnpPL5c888wzTNIqiSktLlyxZQggxmUzMypZYLP7mm2/UanVgYOCCBQsmT54cGBg4bdo0lnOzSqlUenl5lZSUEELMZvPJkyctTbOs07/66qv19fXMcX19vVQq5fMUJIT4+PiIxeLy8nJCyPDwcFlZGdO04eHhrq4upkYgEDC/p4QQo9GI/6feB8ubdaziwoULIpEoPT39nXfekUgkzc3NNE0zn5Lq6mqapo1G46xZs6KiojIzM93c3A4fPsx2ZPY1NzdLJJK0tLT09HSRSMQ0iqZpd3f377//nqbpTz75xM7OLjo6OikpKSkpKSUlhdW8nPD1119LpdLMzMzIyMjnnntuaGiIpumqqipCyIhbKSoqKrBrlJGVlaVQKHbv3h0eHu7r62symWiaLi8vnzx5MlOg1+vlcvmmTZs+/vhjd3f3L774gtW8nLB3714vL689e/aEhoa+9NJLzKersLBQJBIxBTt37lQoFJmZmRkZGVKpdPfu3azm5Tq+vH3i6tWrR44csbe3j46OZl5TQtP0l19+GR4ezuxu6O7uPnjwYEdHx9KlSwMCAtjOywnNzc2HDh0aGhqKjIycPXs284fZ2dkvvviit7d3dXX15cuXLcVCoTA+Pp6lpBxSVlZWWlr61FNPxcbGMk9maG9vP378eGJi4t1lra2tWq02JiaGpZjcUlpaWlZW5ubmFhcXx2ycaW1tPXHihOUTpdfrv/32W6PRGBgYuGjRIlbDckVRUVFFRYVCoYiNjWWuK9y6devkyZNvvvkmU1BWVlZZWWlnZ6dSqV5++WVWw3IdXwYhAADAmHixRggAAHAvGIQAAMBrGIQAAMBrGIQAAMBrGIQAAMBrGIQAAMBrGIQAAMBrGIQAAMBrGIQAAMBrGIQAAMBrGIQAtiM5OdnT07OpqYn5cWhoKCAgwN/ff2BggNVcAJyGZ40C2I7e3l4/Pz9nZ+fKykp7e/u0tLT9+/efPXt2/vz5bEcD4C4MQgCbcvHixcWLF6empr7yyivLly/fu3fvxo0b2Q4FwGkYhAC25tNPP3377bednJwCAwNzc3OZd7sDwL1gEALYmjt37nh6evb09Pz2229z5sxhOw4A12GzDICtWbt27aRJkzw8PFJSUkwmE9txALgOgxDApmRlZeXk5Ozbt++HH36oqqrasWMH24kAuA6XRgFsx9WrV/39/ePi4j777DNCyEcffbRt27aioiK1Ws12NADuwiAEsBEGg8Hf318gEJw7d87R0ZEQQtP0ihUrzp8//+uvv8pkMrYDAnAUBiEAAPAa1ggBAIDXMAgBAIDXMAgBAIDXMAgBAIDXMAgBAIDXMAgBAIDXMAgBAIDX/guZgOUla3Oh/AAAAABJRU5ErkJggg==", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 6 + } + ], + "cell_type": "code", + "source": [ + "rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\n", + "x = [r[1] for r in rvecs] # only keep the x coordinate\n", + "plot(x, scfres.ρ[1, :, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)" + ], + "metadata": {}, + "execution_count": 6 + }, + { + "cell_type": "markdown", + "source": [ + "We can also perform various postprocessing steps:\n", + "We can get the Cartesian forces (in Hartree / Bohr):" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "2-element Vector{StaticArraysCore.SVector{3, Float64}}:\n [-1.3503284183782392e-16, -6.538070266434291e-16, -1.1304293496006152e-16]\n [-7.34057468653661e-16, 9.80521024915658e-17, 3.950945668474023e-16]" + }, + "metadata": {}, + "execution_count": 7 + } + ], + "cell_type": "code", + "source": [ + "compute_forces_cart(scfres)" + ], + "metadata": {}, + "execution_count": 7 + }, + { + "cell_type": "markdown", + "source": [ + "As expected, they are numerically zero in this highly symmetric configuration.\n", + "We could also compute a band structure," + ], + "metadata": {} + }, + { + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "┌ Warning: Calling plot_bandstructure without first computing the band data is deprecated and will be removed in the next minor version bump.\n", + "└ @ DFTKPlotsExt ~/work/DFTK.jl/DFTK.jl/ext/DFTKPlotsExt.jl:26\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=44}", + "image/png": "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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 8 + } + ], + "cell_type": "code", + "source": [ + "plot_bandstructure(scfres; kline_density=10)" + ], + "metadata": {}, + "execution_count": 8 + }, + { + "cell_type": "markdown", + "source": [ + "or plot a density of states, for which we increase the kgrid a bit\n", + "to get smoother plots:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "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Lpdrb2+vrq7u6+tLJBLl5eXCv15xxRXcz+eff/75558P4Le//e2NN9548803V1RUuNNogiAIZ0mlMDKCo0ddboafcoSlpYqhUU+Ry+XuueeeNWvWtLe3L126tLW19Ze//CX/182bN2/evPnqq68Wveqss87KZDIJL5cDEQRBWEpvL4JBjI+73Aw/OcLSUkVH6AWeeuqp119//dixYy+++OL4+Phzzz0HoKSk5KGHHrr66qsHBgYuuuiiffv2/fu///sdd9yxbNkyABdffPG6detWrlw5MTHx4x//+KKLLmpqanL7/yAIgnCInh60tbkvhH5yhCrFMq7zzW9+c2Ji4siRI+Xl5d/73vd27dq1ePFi7k9r16595513UqnUz372s3ffffexxx777ne/y/3pW9/6Vl9f3y9+8YsnnnjiqquuevbZZ937DwiCIJxmZARtbe7PiyNHaA0/+MEPVP568skn33fffdLja9euXbt2rW2NIgiC8DSJBJqb3S+W8ZkjTKeRy7ndDoIgCMIKEglUVyMUctnk+EkIAUQimJpyuxEEQRCEFSQSKC9HZaXLaUI/hUbh7eioiKmpqZ6eHv7X0tJSKoQhCIIQkkigogIVFRgfh4ubDvhPCD1bLyNi+/btq1evXrBgAffr6tWrf/e737nbJIIgCE/BOUJOCF3Ef0LoWUeYyWT6+vqqq6v5GfGRSGT//v3utoogCMKzJBJoaXFfCH2WI/SsED799NOtra3r1q1btmzZrbfe6nZzCIIgfEAigbIyVFQgHnezGT5zhLJTCScyEz/a+KNUOuVYM9YtXHdhx4XCI/fee+999933mc98BsDkh03MZDK33HIL9/MNN9xw7rnnOtZCgiAI78PlCFXWkXYGnwmhrCMcSg39esuvk2nntmgqCZWIhPCGG254+OGHR0ZGVq5cefbZZ3MHg8Hg6tWruZ8bGhocax5BEIQv4HKEri+WUgxC2FrZ2nlrpxvNmWZycjKRSBw+fHj27Nn8wWAweNNNN7nYKoIgCC/DhUZdz3n5TAhdHzgocccdd2zbtq2jo8PthhAEQfgGjzhCnxXLRKMenVB/xhln3Hnnna+99tpf//rXBx54wO3mEARB+IBUCrGY+yul+E8IvekIn3jiiaVLl/76179+5JFHwuEwgJaWlm9961tut4sgCMK7TE6itFRtr1lnoNCoNdTW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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "cell_type": "code", + "source": [ + "bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))\n", + "plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())" + ], + "metadata": {}, + "execution_count": 9 + }, + { + "cell_type": "markdown", + "source": [ + "Note that directly employing the `scfres` also works, but the results\n", + "are much cruder:" + ], + "metadata": {} + }, + { + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": "Plot{Plots.GRBackend() n=2}", + "image/png": "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bnvH0t3d/c4777hcriVLliQeNyitra0bN24U7hJ37txpt9vnzJkTP7hhw4ZwOMz+PXr06BkzZgjdI8sd7mVk2bJlM2bMuPPOOysrK1euXJl6wvnnn+92u/Pz83/zm9/ED65cubKsrOziU3z22WcqFll+Vq9eXV5efscdd8yaNevqq69OPeH555/Pzc2tqKg4++yzE4//6le/GjNmzF133TV+/Pgf/OAHapVXKf7u7/5u6tSpd911V1VV1csvv5x6wmuvvVZZWXnnnXdOnz79lltuYQ+uWbOmuLg4Xhk2bdqkbqmz5eTJk01NTVdeeeXXv/71urq6Y8eOpZ5z8803T58+nW0mf/7zn9mDX375ZUVFxa233rpo0aJZs2Z5PB51Cy4z8Zc7Y8aM+MtN5NixY7W1tddff/1VV101bty4kydPssddLtf555/Pvv0nn3xS3VLLTG9v78SJEy+77LJly5ZVV1ezs+US6erqKi4urqysBLB///748X379lVVVd18882XXnrptGnTBgYG1C24zLz55psVFRV33HHHmWeeed1116We8H//939slzhv3rzE42VlZeeddx5bGR577DHhu+hFCLdu3VpRUcHOCHn11VcnTZoUi8WSzjl06FAkElmwYEGSEC5YsEDNoirKrFmzXnjhBYZhPB5PTU3Nhx9+mHRCZ2fnwMDAihUrEoXQ5/OVl5ez/f7Ro0ddLtfx48fVLLa87Nq1q7i4uLu7m2GYN998s7GxMRqNJp4Qi8UmTJjw2muvMQzT19dXXl6+bds2hmHWrFkzZ84cTcosCz/5yU+uueYa9u9bb731+9//ftIJ27ZtKysr6+vrYxjmz3/+88SJE9lmsmzZsvvvv59hmGg0es455/zv//6vugWXk8SX29/fH3+5iXz/+9+/9dZb2b+vvfban/zkJ+zfLperra1NxcIqyOOPP37ppZeyf991113f+97/b+/so6HM/gB+h9EIMWaYNzRIqa2UdZKENW1EMUspdlTSy5yTWm3Z1m5NZ22bareSXpzetqgtsdk2IZHXzdZqo1iVJJLFDGGJTJh5fn/c83vOc2aGpvKSup+/7nOf773P977M85378tzvWgWB7u7umpoaOOghGsKVK1d+8cUXGIbJ5XIejxcdHT1kOg8GNjY2p0+fxjDs+fPnLBZL+d+tRCJpa2uLi4tTNoSVlZVq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", + "text/html": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ], + "image/svg+xml": [ + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ], + "cell_type": "code", + "source": [ + "plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())" + ], + "metadata": {}, + "execution_count": 10 + } + ], + "nbformat_minor": 3, + "metadata": { + "language_info": { + "file_extension": ".jl", + "mimetype": "application/julia", + "name": "julia", + "version": "1.10.0" + }, + "kernelspec": { + "name": "julia-1.10", + "display_name": "Julia 1.10.0", + "language": "julia" + } + }, + "nbformat": 4 +} diff --git a/v0.6.17/guide/tutorial.jl b/v0.6.17/guide/tutorial.jl new file mode 100644 index 0000000000..bab11d656d --- /dev/null +++ b/v0.6.17/guide/tutorial.jl @@ -0,0 +1,110 @@ +# # Tutorial + +#nb # DFTK is a Julia package for playing with plane-wave +#nb # density-functional theory algorithms. In its basic formulation it +#nb # solves periodic Kohn-Sham equations. +# +# This document provides an overview of the structure of the code +# and how to access basic information about calculations. +# Basic familiarity with the concepts of plane-wave density functional theory +# is assumed throughout. Feel free to take a look at the +#md # [Periodic problems](@ref periodic-problems) +#nb # [Periodic problems](https://docs.dftk.org/stable/guide/periodic_problems/) +# or the +#md # [Introductory resources](@ref introductory-resources) +#nb # [Introductory resources](https://docs.dftk.org/stable/guide/introductory_resources/) +# chapters for some introductory material on the topic. +# +# !!! note "Convergence parameters in the documentation" +# We use rough parameters in order to be able +# to automatically generate this documentation very quickly. +# Therefore results are far from converged. +# Tighter thresholds and larger grids should be used for more realistic results. +# +# For our discussion we will use the classic example of +# computing the LDA ground state of the +# [silicon crystal](https://www.materialsproject.org/materials/mp-149). +# Performing such a calculation roughly proceeds in three steps. + +using DFTK +using Plots +using Unitful +using UnitfulAtomic + +## 1. Define lattice and atomic positions +a = 5.431u"angstrom" # Silicon lattice constant +lattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors + [1 0 1.]; # specified column by column + [1 1 0.]]; + +# By default, all numbers passed as arguments are assumed to be in atomic +# units. Quantities such as temperature, energy cutoffs, lattice vectors, and +# the k-point grid spacing can optionally be annotated with Unitful units, +# which are automatically converted to the atomic units used internally. For +# more details, see the [Unitful package +# documentation](https://painterqubits.github.io/Unitful.jl/stable/) and the +# [UnitfulAtomic.jl package](https://github.com/sostock/UnitfulAtomic.jl). + +## Load HGH pseudopotential for Silicon +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4")) + +## Specify type and positions of atoms +atoms = [Si, Si] +positions = [ones(3)/8, -ones(3)/8] + +## 2. Select model and basis +model = model_LDA(lattice, atoms, positions) +kgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid) +Ecut = 7 # kinetic energy cutoff +## Ecut = 190.5u"eV" # Could also use eV or other energy-compatible units +basis = PlaneWaveBasis(model; Ecut, kgrid) +## Note the implicit passing of keyword arguments here: +## this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid) + +## 3. Run the SCF procedure to obtain the ground state +scfres = self_consistent_field(basis, tol=1e-5); + +# That's it! Now you can get various quantities from the result of the SCF. +# For instance, the different components of the energy: +scfres.energies + +# Eigenvalues: +stack(scfres.eigenvalues) +# `eigenvalues` is an array (indexed by k-points) of arrays (indexed by +# eigenvalue number). +# +# The resulting matrix is 7 (number of computed eigenvalues) by 8 +# (number of irreducible k-points). There are 7 eigenvalues per +# k-point because there are 4 occupied states in the system (4 valence +# electrons per silicon atom, two atoms per unit cell, and paired +# spins), and the eigensolver gives itself some breathing room by +# computing some extra states (see the `bands` argument to +# `self_consistent_field` as well as the [`AdaptiveBands`](@ref) documentation). +# There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the +# amount of computations to just the irreducible k-points (see +#md # [Crystal symmetries](@ref) +#nb # [Crystal symmetries](https://docs.dftk.org/stable/developer/symmetries/) +# for details). +# +# We can check the occupations ... +stack(scfres.occupation) +# ... and density, where we use that the density objects in DFTK are +# indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then +# in the 3-dimensional real-space grid. +rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis +x = [r[1] for r in rvecs] # only keep the x coordinate +plot(x, scfres.ρ[1, :, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2) + +# We can also perform various postprocessing steps: +# We can get the Cartesian forces (in Hartree / Bohr): +compute_forces_cart(scfres) +# As expected, they are numerically zero in this highly symmetric configuration. +# We could also compute a band structure, +plot_bandstructure(scfres; kline_density=10) +# or plot a density of states, for which we increase the kgrid a bit +# to get smoother plots: +bands = compute_bands(scfres, MonkhorstPack(6, 6, 6)) +plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac()) +# Note that directly employing the `scfres` also works, but the results +# are much cruder: +plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac()) diff --git a/dev/guide/tutorial/40a8c7dd.svg b/v0.6.17/guide/tutorial/373eeeef.svg similarity index 53% rename from dev/guide/tutorial/40a8c7dd.svg rename to v0.6.17/guide/tutorial/373eeeef.svg index 6aad0f5288..31ac9bdd0a 100644 --- a/dev/guide/tutorial/40a8c7dd.svg +++ b/v0.6.17/guide/tutorial/373eeeef.svg @@ -1,50 +1,50 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/a6683c30.svg b/v0.6.17/guide/tutorial/68fcef46.svg similarity index 76% rename from dev/guide/tutorial/a6683c30.svg rename to v0.6.17/guide/tutorial/68fcef46.svg index 54ce3c24ac..0defbe2eaf 100644 --- a/dev/guide/tutorial/a6683c30.svg +++ b/v0.6.17/guide/tutorial/68fcef46.svg @@ -1,220 +1,220 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/45a61d0a.svg b/v0.6.17/guide/tutorial/f2cdf9f7.svg similarity index 56% rename from dev/guide/tutorial/45a61d0a.svg rename to v0.6.17/guide/tutorial/f2cdf9f7.svg index 74355fedb4..08aa95cfb9 100644 --- a/dev/guide/tutorial/45a61d0a.svg +++ b/v0.6.17/guide/tutorial/f2cdf9f7.svg @@ -1,67 +1,67 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/guide/tutorial/6f35d62d.svg b/v0.6.17/guide/tutorial/fcc99eff.svg similarity index 53% rename from dev/guide/tutorial/6f35d62d.svg rename to v0.6.17/guide/tutorial/fcc99eff.svg index 4691ecc948..a6192ce948 100644 --- a/dev/guide/tutorial/6f35d62d.svg +++ b/v0.6.17/guide/tutorial/fcc99eff.svg @@ -1,52 +1,52 @@ - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/v0.6.17/guide/tutorial/index.html b/v0.6.17/guide/tutorial/index.html new file mode 100644 index 0000000000..f572a9a84e --- /dev/null +++ b/v0.6.17/guide/tutorial/index.html @@ -0,0 +1,65 @@ + +Tutorial · DFTK.jl

    Tutorial

    This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.

    Convergence parameters in the documentation

    We use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

    For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.

    using DFTK
    +using Plots
    +using Unitful
    +using UnitfulAtomic
    +
    +# 1. Define lattice and atomic positions
    +a = 5.431u"angstrom"          # Silicon lattice constant
    +lattice = a / 2 * [[0 1 1.];  # Silicon lattice vectors
    +                   [1 0 1.];  # specified column by column
    +                   [1 1 0.]];

    By default, all numbers passed as arguments are assumed to be in atomic units. Quantities such as temperature, energy cutoffs, lattice vectors, and the k-point grid spacing can optionally be annotated with Unitful units, which are automatically converted to the atomic units used internally. For more details, see the Unitful package documentation and the UnitfulAtomic.jl package.

    # Load HGH pseudopotential for Silicon
    +Si = ElementPsp(:Si; psp=load_psp("hgh/lda/Si-q4"))
    +
    +# Specify type and positions of atoms
    +atoms     = [Si, Si]
    +positions = [ones(3)/8, -ones(3)/8]
    +
    +# 2. Select model and basis
    +model = model_LDA(lattice, atoms, positions)
    +kgrid = [4, 4, 4]     # k-point grid (Regular Monkhorst-Pack grid)
    +Ecut = 7              # kinetic energy cutoff
    +# Ecut = 190.5u"eV"  # Could also use eV or other energy-compatible units
    +basis = PlaneWaveBasis(model; Ecut, kgrid)
    +# Note the implicit passing of keyword arguments here:
    +# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)
    +
    +# 3. Run the SCF procedure to obtain the ground state
    +scfres = self_consistent_field(basis, tol=1e-5);
    n     Energy            log10(ΔE)   log10(Δρ)   Diag   Δtime
    +---   ---------------   ---------   ---------   ----   ------
    +  1   -7.900479440069                   -0.70    4.5   41.5ms
    +  2   -7.904998382310       -2.34       -1.52    1.0   23.4ms
    +  3   -7.905176925729       -3.75       -2.52    1.1   24.3ms
    +  4   -7.905210384208       -4.48       -2.82    2.8   32.1ms
    +  5   -7.905211036697       -6.19       -2.95    1.0   23.5ms
    +  6   -7.905211514614       -6.32       -4.62    1.0   23.2ms
    +  7   -7.905211530889       -7.79       -4.48    3.2   36.6ms
    +  8   -7.905211531380       -9.31       -5.15    1.0   23.8ms

    That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:

    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             3.1020953 
    +    AtomicLocal         -2.1987832
    +    AtomicNonlocal      1.7296094 
    +    Ewald               -8.3979253
    +    PspCorrection       -0.2946254
    +    Hartree             0.5530386 
    +    Xc                  -2.3986210
    +
    +    total               -7.905211531380

    Eigenvalues:

    stack(scfres.eigenvalues)
    7×8 Matrix{Float64}:
    + -0.176942  -0.14744   -0.0911691   …  -0.101219   -0.0239769  -0.0184078
    +  0.261073   0.116915   0.00482515      0.0611644  -0.0239769  -0.0184078
    +  0.261073   0.23299    0.216734        0.121636    0.155532    0.117747
    +  0.261073   0.23299    0.216734        0.212134    0.155532    0.117747
    +  0.354532   0.335109   0.317102        0.350436    0.285692    0.417258
    +  0.354532   0.389829   0.384601    …   0.436926    0.285692    0.417445
    +  0.354533   0.389829   0.384601        0.449231    0.627546    0.443806

    eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number).

    The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).

    We can check the occupations ...

    stack(scfres.occupation)
    7×8 Matrix{Float64}:
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 2.0  2.0  2.0  2.0  2.0  2.0  2.0  2.0
    + 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    + 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
    + 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0

    ... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.

    rvecs = collect(r_vectors(basis))[:, 1, 1]  # slice along the x axis
    +x = [r[1] for r in rvecs]                   # only keep the x coordinate
    +plot(x, scfres.ρ[1, :, 1, 1], label="", xlabel="x", ylabel="ρ", marker=2)
    Example block output

    We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):

    compute_forces_cart(scfres)
    2-element Vector{StaticArraysCore.SVector{3, Float64}}:
    + [-3.513741459317241e-16, -4.374657225495289e-16, -1.130319195358497e-16]
    + [-4.960901839136503e-16, 7.643713726966705e-17, -1.8907696258141238e-16]

    As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,

    plot_bandstructure(scfres; kline_density=10)
    Example block output

    or plot a density of states, for which we increase the kgrid a bit to get smoother plots:

    bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))
    +plot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())
    Example block output

    Note that directly employing the scfres also works, but the results are much cruder:

    plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())
    Example block output
    diff --git a/v0.6.17/index.html b/v0.6.17/index.html new file mode 100644 index 0000000000..5fdd1a764a --- /dev/null +++ b/v0.6.17/index.html @@ -0,0 +1,2 @@ + +Home · DFTK.jl

    DFTK.jl: The density-functional toolkit.

    The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.

    If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.

    Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.

    Getting started

    First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.

    Convergence parameters in the documentation

    In the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.

    If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!

    diff --git a/v0.6.17/publications/index.html b/v0.6.17/publications/index.html new file mode 100644 index 0000000000..6d03b099ba --- /dev/null +++ b/v0.6.17/publications/index.html @@ -0,0 +1,10 @@ + +Publications · DFTK.jl

    Publications

    Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is

    @article{DFTKjcon,
    +  author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},
    +  doi = {10.21105/jcon.00069},
    +  journal = {Proc. JuliaCon Conf.},
    +  title = {DFTK: A Julian approach for simulating electrons in solids},
    +  volume = {3},
    +  pages = {69},
    +  year = {2021},
    +}

    Additionally the following publications describe DFTK or one of its algorithms:

    Research conducted with DFTK

    The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.

    diff --git a/v0.6.17/school2022/index.html b/v0.6.17/school2022/index.html new file mode 100644 index 0000000000..de5646d8a5 --- /dev/null +++ b/v0.6.17/school2022/index.html @@ -0,0 +1,2 @@ + +DFTK School 2022 · DFTK.jl
    diff --git a/v0.6.17/search_index.js b/v0.6.17/search_index.js new file mode 100644 index 0000000000..578635944f --- /dev/null +++ b/v0.6.17/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"EditURL = \"../../../examples/gaas_surface.jl\"","category":"page"},{"location":"examples/gaas_surface/#Modelling-a-gallium-arsenide-surface","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"section"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"This example shows how to use the atomistic simulation environment, or ASE for short, to set up and run a particular calculation of a gallium arsenide surface. ASE is a Python package to simplify the process of setting up, running and analysing results from atomistic simulations across different simulation codes. By means of ASEconvert it is seamlessly integrated with the AtomsBase ecosystem and thus available to DFTK via our own AtomsBase integration.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"In this example we will consider modelling the (1, 1, 0) GaAs surface separated by vacuum.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Parameters of the calculation. Since this surface is far from easy to converge, we made the problem simpler by choosing a smaller Ecut and smaller values for n_GaAs and n_vacuum. More interesting settings are Ecut = 15 and n_GaAs = n_vacuum = 20.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"miller = (1, 1, 0) # Surface Miller indices\nn_GaAs = 2 # Number of GaAs layers\nn_vacuum = 4 # Number of vacuum layers\nEcut = 5 # Hartree\nkgrid = (4, 4, 1); # Monkhorst-Pack mesh\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use ASE to build the structure:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using ASEconvert\n\na = 5.6537 # GaAs lattice parameter in Ångström (because ASE uses Å as length unit)\ngaas = ase.build.bulk(\"GaAs\", \"zincblende\"; a)\nsurface = ase.build.surface(gaas, miller, n_GaAs, 0, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Get the amount of vacuum in Ångström we need to add","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"d_vacuum = maximum(maximum, surface.cell) / n_GaAs * n_vacuum\nsurface = ase.build.surface(gaas, miller, n_GaAs, d_vacuum, periodic=true);\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Write an image of the surface and embed it as a nice illustration:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"ase.io.write(\"surface.png\", surface * pytuple((3, 3, 1)), rotation=\"-90x, 30y, -75z\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"Use the pyconvert function from PythonCall to convert to an AtomsBase-compatible system. These two functions not only support importing ASE atoms into DFTK, but a few more third-party data structures as well. Typically the imported atoms use a bare Coulomb potential, such that appropriate pseudopotentials need to be attached in a post-step:","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"using DFTK\nsystem = attach_psp(pyconvert(AbstractSystem, surface);\n Ga=\"hgh/pbe/ga-q3.hgh\",\n As=\"hgh/pbe/as-q5.hgh\")","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"We model this surface with (quite large a) temperature of 0.01 Hartree to ease convergence. Try lowering the SCF convergence tolerance (tol) or the temperature or try mixing=KerkerMixing() to see the full challenge of this system.","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"model = model_DFT(system, [:gga_x_pbe, :gga_c_pbe],\n temperature=0.001, smearing=DFTK.Smearing.Gaussian())\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n\nscfres = self_consistent_field(basis, tol=1e-4, mixing=LdosMixing());\nnothing #hide","category":"page"},{"location":"examples/gaas_surface/","page":"Modelling a gallium arsenide surface","title":"Modelling a gallium arsenide surface","text":"scfres.energies","category":"page"},{"location":"tricks/parallelization/#Timings-and-parallelization","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"This section summarizes the options DFTK offers to monitor and influence performance of the code.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[2, 2, 2])\n\nDFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)","category":"page"},{"location":"tricks/parallelization/#Timing-measurements","page":"Timings and parallelization","title":"Timing measurements","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For example to measure the timing of an SCF:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.reset_timer!(DFTK.timer)\nscfres = self_consistent_field(basis, tol=1e-5)\n\nDFTK.timer","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"note: Timing measurements and stack traces\nTiming measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.","category":"page"},{"location":"tricks/parallelization/#Rough-timing-estimates","page":"Timings and parallelization","title":"Rough timing estimates","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"function estimate_time_per_scf_step(basis::PlaneWaveBasis)\n # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.\n time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3\n\n (time_per_FFT_per_grid_point\n * prod(basis.fft_size)\n * length(basis.kpoints)\n * div(basis.model.n_electrons, DFTK.filled_occupation(basis.model), RoundUp)\n * 8 # mean number of FFT steps per state per k-point per iteration\n )\nend\n\n\"Time per SCF (s): $(estimate_time_per_scf_step(basis))\"","category":"page"},{"location":"tricks/parallelization/#Options-for-parallelization","page":"Timings and parallelization","title":"Options for parallelization","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"At the moment DFTK offers two ways to parallelize a calculation, firstly shared-memory parallelism using threading and secondly multiprocessing using MPI (via the MPI.jl Julia interface). MPI-based parallelism is currently only over k-points, such that it cannot be used for calculations with only a single k-point. Otherwise combining both forms of parallelism is possible as well.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The scaling of both forms of parallelism for a number of test cases is demonstrated in the following figure. These values were obtained using DFTK version 0.1.17 and Julia 1.6 and the precise scalings will likely be different depending on architecture, DFTK or Julia version. The rough trends should, however, be similar.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The MPI-based parallelization strategy clearly shows a superior scaling and should be preferred if available.","category":"page"},{"location":"tricks/parallelization/#MPI-based-parallelism","page":"Timings and parallelization","title":"MPI-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Currently DFTK uses MPI to distribute on k-points only. This implies that calculations with only a single k-point cannot use make use of this. For details on setting up and configuring MPI with Julia see the MPI.jl documentation.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"First disable all threading inside DFTK, by adding the following to your script running the DFTK calculation:\nusing DFTK\ndisable_threading()\nRun Julia in parallel using the mpiexecjl wrapper script from MPI.jl:\nmpiexecjl -np 16 julia myscript.jl\nIn this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"As usual with MPI printing will be garbled. You can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"at the top of your script to disable printing on all processes but one.","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"info: MPI-based parallelism not fully supported\nWhile standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.","category":"page"},{"location":"tricks/parallelization/#Thread-based-parallelism","page":"Timings and parallelization","title":"Thread-based parallelism","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Threading in DFTK currently happens on multiple layers distributing the workload over different k-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:\nusing DFTK\nsetup_threading()\nThis disables FFT threading and sets the number of BLAS threads to the number of Julia threads.\nRun Julia passing the desired number of threads using the flag -t:\njulia -t 8 myscript.jl","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"For some cases (e.g. a single k-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.","category":"page"},{"location":"tricks/parallelization/#Advanced-threading-tweaks","page":"Timings and parallelization","title":"Advanced threading tweaks","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.","category":"page"},{"location":"tricks/parallelization/#BLAS-threads","page":"Timings and parallelization","title":"BLAS threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using LinearAlgebra\nBLAS.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"or (from Julia 1.6) simply BLAS.get_num_threads().","category":"page"},{"location":"tricks/parallelization/#Julia-threads","page":"Timings and parallelization","title":"Julia threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over k-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().","category":"page"},{"location":"tricks/parallelization/#FFT-threads","page":"Timings and parallelization","title":"FFT threads","text":"","category":"section"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"using FFTW\nFFTW.set_num_threads(N)","category":"page"},{"location":"tricks/parallelization/","page":"Timings and parallelization","title":"Timings and parallelization","text":"where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"EditURL = \"../../../examples/custom_solvers.jl\"","category":"page"},{"location":"examples/custom_solvers/#Custom-solvers","page":"Custom solvers","title":"Custom solvers","text":"","category":"section"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"In this example, we show how to define custom solvers. Our system will again be silicon, because we are not very imaginative","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"using DFTK, LinearAlgebra\n\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# We take very (very) crude parameters\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[1, 1, 1]);\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"We define our custom fix-point solver: simply a damped fixed-point","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_fp_solver(f, x0, max_iter; tol)\n mixing_factor = .7\n x = x0\n fx = f(x)\n for n = 1:max_iter\n inc = fx - x\n if norm(inc) < tol\n break\n end\n x = x + mixing_factor * inc\n fx = f(x)\n end\n (; fixpoint=x, converged=norm(fx-x) < tol)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Our eigenvalue solver just forms the dense matrix and diagonalizes it explicitly (this only works for very small systems)","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"function my_eig_solver(A, X0; maxiter, tol, kwargs...)\n n = size(X0, 2)\n A = Array(A)\n E = eigen(A)\n λ = E.values[1:n]\n X = E.vectors[:, 1:n]\n (; λ, X, residual_norms=[], n_iter=0, converged=true, n_matvec=0)\nend;\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Finally we also define our custom mixing scheme. It will be a mixture of simple mixing (for the first 2 steps) and than default to Kerker mixing. In the mixing interface δF is (ρ_textout - ρ_textin), i.e. the difference in density between two subsequent SCF steps and the mix function returns δρ, which is added to ρ_textin to yield ρ_textnext, the density for the next SCF step.","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"struct MyMixing\n n_simple # Number of iterations for simple mixing\nend\nMyMixing() = MyMixing(2)\n\nfunction DFTK.mix_density(mixing::MyMixing, basis, δF; n_iter, kwargs...)\n if n_iter <= mixing.n_simple\n return δF # Simple mixing -> Do not modify update at all\n else\n # Use the default KerkerMixing from DFTK\n DFTK.mix_density(KerkerMixing(), basis, δF; kwargs...)\n end\nend","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"That's it! Now we just run the SCF with these solvers","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"scfres = self_consistent_field(basis;\n tol=1e-4,\n solver=my_fp_solver,\n eigensolver=my_eig_solver,\n mixing=MyMixing());\nnothing #hide","category":"page"},{"location":"examples/custom_solvers/","page":"Custom solvers","title":"Custom solvers","text":"Note that the default convergence criterion is the difference in density. When this gets below tol, the \"driver\" self_consistent_field artificially makes the fixed-point solver think it's converged by forcing f(x) = x. You can customize this with the is_converged keyword argument to self_consistent_field.","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"EditURL = \"../../../examples/gross_pitaevskii_2D.jl\"","category":"page"},{"location":"examples/gross_pitaevskii_2D/#Gross-Pitaevskii-equation-with-external-magnetic-field","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"","category":"section"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"We solve the 2D Gross-Pitaevskii equation with a magnetic field. This is similar to the previous example (Gross-Pitaevskii equation in one dimension), but with an extra term for the magnetic field. We reproduce here the results of https://arxiv.org/pdf/1611.02045.pdf Fig. 10","category":"page"},{"location":"examples/gross_pitaevskii_2D/","page":"Gross-Pitaevskii equation with external magnetic field","title":"Gross-Pitaevskii equation with external magnetic field","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 15\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential, and magnetic vector potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2)/2\nω = .6\nApot(x, y, z) = ω * @SVector [y - a/2, -(x - a/2), 0]\nApot(X) = Apot(X...);\n\n\n# Parameters\nEcut = 20 # Increase this for production\nη = 500\nC = η/2\nα = 2\nn_electrons = 1; # Increase this for fun\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(),\n ExternalFromReal(X -> pot(X...)),\n LocalNonlinearity(ρ -> C * ρ^α),\n Magnetic(Apot),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # spinless electrons\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-5) # Reduce tol for production\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"EditURL = \"periodic_problems.jl\"","category":"page"},{"location":"guide/periodic_problems/#periodic-problems","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this example we want to show how DFTK can be used to solve simple one-dimensional periodic problems. Along the lines this notebook serves as a concise introduction into the underlying theory and jargon for solving periodic problems using plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/#Periodicity-and-lattices","page":"Problems and plane-wave discretisations","title":"Periodicity and lattices","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A periodic problem is characterized by being invariant to certain translations. For example the sin function is periodic with periodicity 2π, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" sin(x) = sin(x + 2πm) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This is nothing else than saying that any translation by an integer multiple of 2π keeps the sin function invariant. More formally, one can use the translation operator T_2πm to write this as:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_2πm sin(x) = sin(x - 2πm) = sin(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Whenever such periodicity exists one can exploit it to save computational work. Consider a problem in which we want to find a function f mathbbR mathbbR, but a priori the solution is known to be periodic with periodicity a. As a consequence of said periodicity it is sufficient to determine the values of f for all x from the interval -a2 a2) to uniquely define f on the full real axis. Naturally exploiting periodicity in a computational procedure thus greatly reduces the required amount of work.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Let us introduce some jargon: The periodicity of our problem implies that we may define a lattice","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -3a/2 -a/2 +a/2 +3a/2\n ... |---------|---------|---------| ...\n a a a","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with lattice constant a. Each cell of the lattice is an identical periodic image of any of its neighbors. For finding f it is thus sufficient to consider only the problem inside a unit cell -a2 a2) (this is the convention used by DFTK, but this is arbitrary, and for instance 0a) would have worked just as well).","category":"page"},{"location":"guide/periodic_problems/#Periodic-operators-and-the-Bloch-transform","page":"Problems and plane-wave discretisations","title":"Periodic operators and the Bloch transform","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Not only functions, but also operators can feature periodicity. Consider for example the free-electron Hamiltonian","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H = -frac12 Δ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In free-electron model (which gives rise to this Hamiltonian) electron motion is only by their own kinetic energy. As this model features no potential which could make one point in space more preferred than another, we would expect this model to be periodic. If an operator is periodic with respect to a lattice such as the one defined above, then it commutes with all lattice translations. For the free-electron case H one can easily show exactly that, i.e.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma H = H T_ma quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We note in passing that the free-electron model is actually very special in the sense that the choice of a is completely arbitrary here. In other words H is periodic with respect to any translation. In general, however, periodicity is only attained with respect to a finite number of translations a and we will take this viewpoint here.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Bloch's theorem now tells us that for periodic operators, the solutions to the eigenproblem","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H ψ_kn = ε_kn ψ_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"satisfy a factorization","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" ψ_kn(x) = e^i kx u_kn(x)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"into a plane wave e^i kx and a lattice-periodic function","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_ma u_kn(x) = u_kn(x - ma) = u_kn(x) quad m mathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"In this n is a labeling integer index and k is a real number, whose details will be clarified in the next section. The index n is sometimes also called the band index and functions ψ_kn satisfying this factorization are also known as Bloch functions or Bloch states.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Consider the application of 2H = -Δ = - fracd^2d x^2 to such a Bloch wave. First we notice for any function f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" -i left( e^i kx f right)\n = -ifracddx left( e^i kx f right)\n = k e^i kx f + e^i kx (-i) f = e^i kx (-i + k) f","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Using this result twice one shows that applying -Δ yields","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"beginaligned\n -Delta left(e^i kx u_kn(x)right)\n = -i left-i left(u_kn(x) e^i kx right) right \n = -i lefte^i kx (-i + k) u_kn(x) right \n = e^i kx (-i + k)^2 u_kn(x) \n = e^i kx 2H_k u_kn(x)\nendaligned","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"where we defined","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k = frac12 (-i + k)^2","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The action of this operator on a function u_kn is given by","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = e^-i kx H e^i kx u_kn","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"which in particular implies that","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" H_k u_kn = ε_kn u_kn quad quad H (e^i kx u_kn) = ε_kn (e^i kx u_kn)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"To seek the eigenpairs of H we may thus equivalently find the eigenpairs of all H_k. The point of this is that the eigenfunctions u_kn of H_k are periodic (unlike the eigenfunctions ψ_kn of H). In contrast to ψ_kn the functions u_kn can thus be fully represented considering the eigenproblem only on the unit cell.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A detailed mathematical analysis shows that the transformation from H to the set of all H_k for a suitable set of values for k (details below) is actually a unitary transformation, the so-called Bloch transform. This transform brings the Hamiltonian into the symmetry-adapted basis for translational symmetry, which are exactly the Bloch functions. Similar to the case of choosing a symmetry-adapted basis for other kinds of symmetries (like the point group symmetry in molecules), the Bloch transform also makes the Hamiltonian H block-diagonal[1]:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":" T_B H T_B^-1 left( beginarraycccc H_10 H_2H_30ddots endarray right)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"with each block H_k taking care of one value k. This block-diagonal structure under the basis of Bloch functions lets us completely describe the spectrum of H by looking only at the spectrum of all H_k blocks.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"[1]: Notice that block-diagonal is a bit an abuse of terms here, since the Hamiltonian is not a matrix but an operator and the number of blocks is infinite. The mathematically precise term is that the Bloch transform reveals the fibers of the Hamiltonian.","category":"page"},{"location":"guide/periodic_problems/#The-Brillouin-zone","page":"Problems and plane-wave discretisations","title":"The Brillouin zone","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We now consider the parameter k of the Hamiltonian blocks in detail.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"As discussed k is a real number. It turns out, however, that some of these kmathbbR give rise to operators related by unitary transformations (again due to translational symmetry).\nSince such operators have the same eigenspectrum, only one version needs to be considered.\nThe smallest subset from which k is chosen is the Brillouin zone (BZ).\nThe BZ is the unit cell of the reciprocal lattice, which may be constructed from the real-space lattice by a Fourier transform.\nIn our simple 1D case the reciprocal lattice is just\n ... |--------|--------|--------| ...\n 2π/a 2π/a 2π/a\ni.e. like the real-space lattice, but just with a different lattice constant b = 2π a.\nThe BZ in our example is thus B = -πa πa). The members of B are typically called k-points.","category":"page"},{"location":"guide/periodic_problems/#Discretization-and-plane-wave-basis-sets","page":"Problems and plane-wave discretisations","title":"Discretization and plane-wave basis sets","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With what we discussed so far the strategy to find all eigenpairs of a periodic Hamiltonian H thus reduces to finding the eigenpairs of all H_k with k B. This requires two discretisations:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"B is infinite (and not countable). To discretize we first only pick a finite number of k-points. Usually this k-point sampling is done by picking k-points along a regular grid inside the BZ, the k-grid.\nEach H_k is still an infinite-dimensional operator. Following a standard Ritz-Galerkin ansatz we project the operator into a finite basis and diagonalize the resulting matrix.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For the second step multiple types of bases are used in practice (finite differences, finite elements, Gaussians, ...). In DFTK we currently support only plane-wave discretizations.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"For our 1D example normalized plane waves are defined as the functions","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"e_G(x) = frace^i G xsqrta qquad G in bmathbbZ","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"and typically one forms basis sets from these by specifying a kinetic energy cutoff E_textcut:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"left e_G big (G + k)^2 leq 2E_textcut right","category":"page"},{"location":"guide/periodic_problems/#Correspondence-of-theory-to-DFTK-code","page":"Problems and plane-wave discretisations","title":"Correspondence of theory to DFTK code","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Before solving a few example problems numerically in DFTK, a short overview of the correspondence of the introduced quantities to data structures inside DFTK.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"H is represented by a Hamiltonian object and variables for hamiltonians are usually called ham.\nH_k by a HamiltonianBlock and variables are hamk.\nψ_kn is usually just called ψ. u_kn is not stored (in favor of ψ_kn).\nε_kn is called eigenvalues.\nk-points are represented by Kpoint and respective variables called kpt.\nThe basis of plane waves is managed by PlaneWaveBasis and variables usually just called basis.","category":"page"},{"location":"guide/periodic_problems/#Solving-the-free-electron-Hamiltonian","page":"Problems and plane-wave discretisations","title":"Solving the free-electron Hamiltonian","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"One typical approach to get physical insight into a Hamiltonian H is to plot a so-called band structure, that is the eigenvalues of H_k versus k. In DFTK we achieve this using the following steps:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 1: Build the 1D lattice. DFTK is mostly tailored for 3D problems. Therefore quantities related to the problem space are have a fixed dimension 3. The convention is that for 1D / 2D problems the trailing entries are always zero and ignored in the computation. For the lattice we therefore construct a 3x3 matrix with only one entry.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using DFTK\n\nlattice = zeros(3, 3)\nlattice[1, 1] = 20.;\nnothing #hide","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 2: Select a model. In this case we choose a free-electron model, which is the same as saying that there is only a Kinetic term (and no potential) in the model.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"model = Model(lattice; terms=[Kinetic()])","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 3: Define a plane-wave basis using this model and a cutoff E_textcut of 300 Hartree. The k-point grid is given as a regular grid in the BZ (a so-called Monkhorst-Pack grid). Here we select only one k-point (1x1x1), see the note below for some details on this choice.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"basis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"Step 4: Plot the bands! Select a density of k-points for the k-grid to use for the bandstructure calculation, discretize the problem and diagonalize it. Afterwards plot the bands.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\nusing Plots\n\nplot_bandstructure(basis; n_bands=6, kline_density=100)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"note: Selection of k-point grids in `PlaneWaveBasis` construction\nYou might wonder why we only selected a single k-point (clearly a very crude and inaccurate approximation). In this example the kgrid parameter specified in the construction of the PlaneWaveBasis is not actually used for plotting the bands. It is only used when solving more involved models like density-functional theory (DFT) where the Hamiltonian is non-linear. In these cases before plotting the bands the self-consistent field equations (SCF) need to be solved first. This is typically done on a different k-point grid than the grid used for the bands later on. In our case we don't need this extra step and therefore the kgrid value passed to PlaneWaveBasis is actually arbitrary.","category":"page"},{"location":"guide/periodic_problems/#Adding-potentials","page":"Problems and plane-wave discretisations","title":"Adding potentials","text":"","category":"section"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"So far so good. But free electrons are actually a little boring, so let's add a potential interacting with the electrons.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The modified problem we will look at consists of diagonalizing\nH_k = frac12 (-i nabla + k)^2 + V\nfor all k in B with a periodic potential V interacting with the electrons.\nA number of \"standard\" potentials are readily implemented in DFTK and can be assembled using the terms kwarg of the model. This allows to seamlessly construct\ndensity-functial theory (DFT) models for treating electronic structures (see the Tutorial).\nGross-Pitaevskii models for bosonic systems (see Gross-Pitaevskii equation in one dimension)\neven some more unusual cases like anyonic models.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"We will use ElementGaussian, which is an analytic potential describing a Gaussian interaction with the electrons to DFTK. See Custom potential for how to create a custom potential.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"A single potential looks like:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Plots\nusing LinearAlgebra\nnucleus = ElementGaussian(0.3, 10.0)\nplot(r -> DFTK.local_potential_real(nucleus, norm(r)), xlims=(-50, 50))","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this element at hand we can easily construct a setting where two potentials of this form are located at positions 20 and 80 inside the lattice 0 100:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using LinearAlgebra\n\n# Define the 1D lattice [0, 100]\nlattice = diagm([100., 0, 0])\n\n# Place them at 20 and 80 in *fractional coordinates*,\n# that is 0.2 and 0.8, since the lattice is 100 wide.\nnucleus = ElementGaussian(0.3, 10.0)\natoms = [nucleus, nucleus]\npositions = [[0.2, 0, 0], [0.8, 0, 0]]\n\n# Assemble the model, discretize and build the Hamiltonian\nmodel = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model; Ecut=300, kgrid=(1, 1, 1));\nham = Hamiltonian(basis)\n\n# Extract the total potential term of the Hamiltonian and plot it\npotential = DFTK.total_local_potential(ham)[:, 1, 1]\nrvecs = collect(r_vectors_cart(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, potential, label=\"\", xlabel=\"x\", ylabel=\"V(x)\")","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"This potential is the sum of two \"atomic\" potentials (the two \"Gaussian\" elements). Due to the periodic setting we are considering interactions naturally also occur across the unit cell boundary (i.e. wrapping from 100 over to 0). The required periodization of the atomic potential is automatically taken care, such that the potential is smooth across the cell boundary at 100/0.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"With this setup, let's look at the bands:","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"using Unitful\nusing UnitfulAtomic\n\nplot_bandstructure(basis; n_bands=6, kline_density=500)","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands are noticeably different.","category":"page"},{"location":"guide/periodic_problems/","page":"Problems and plane-wave discretisations","title":"Problems and plane-wave discretisations","text":"The bands no longer overlap, meaning that the spectrum of H is no longer continuous but has gaps.\nThe two lowest bands are almost flat. This is because they represent two tightly bound and localized electrons inside the two Gaussians.\nThe higher the bands are in energy, the more free-electron-like they are. In other words the higher the kinetic energy of the electrons, the less they feel the effect of the two Gaussian potentials. As it turns out the curvature of the bands, (the degree to which they are free-electron-like) is highly related to the delocalization of electrons in these bands: The more curved the more delocalized. In some sense \"free electrons\" correspond to perfect delocalization.","category":"page"},{"location":"developer/useful_formulas/#Useful-formulas","page":"Useful formulas","title":"Useful formulas","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"This section holds a collection of formulae, which are helpful when working with DFTK and plane-wave DFT in general. See also Notation and conventions for a description of the conventions used in the equations.","category":"page"},{"location":"developer/useful_formulas/#Fourier-transforms","page":"Useful formulas","title":"Fourier transforms","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"The Fourier transform is\nwidehatf(q) = int_mathbb R^3 e^-i q cdot x f(x) dx\nFourier transforms of centered functions: If f(x) = R(x) Y_l^m(xx), then\nbeginaligned\n hat f( q)\n = int_mathbb R^3 R(x) Y_l^m(xx) e^-i q cdot x dx \n = sum_l = 0^infty 4 pi i^l\n sum_m = -l^l int_mathbb R^3\n R(x) j_l(q x)Y_l^m(-qq) Y_l^m(xx)\n Y_l^mast(xx)\n dx \n = 4 pi Y_l^m(-qq) i^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n = 4 pi Y_l^m(qq) (-i)^l\n int_mathbb R^+ r^2 R(r) j_l(q r) dr\n endaligned\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"developer/useful_formulas/#Spherical-harmonics","page":"Useful formulas","title":"Spherical harmonics","text":"","category":"section"},{"location":"developer/useful_formulas/","page":"Useful formulas","title":"Useful formulas","text":"Plane wave expansion formula\ne^i q cdot r =\n 4 pi sum_l = 0^infty sum_m = -l^l\n i^l j_l(q r) Y_l^m(qq) Y_l^mast(rr)\nSpherical harmonics orthogonality\nint_mathbbS^2 Y_l^m*(r)Y_l^m(r) dr\n = delta_ll delta_mm\nThis also holds true for real spherical harmonics.\nSpherical harmonics parity\nY_l^m(-r) = (-1)^l Y_l^m(r)\nThis also holds true for real spherical harmonics.","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"EditURL = \"../../../examples/cohen_bergstresser.jl\"","category":"page"},{"location":"examples/cohen_bergstresser/#Cohen-Bergstresser-model","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"","category":"section"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"This example considers the Cohen-Bergstresser model[CB1966], reproducing the results of the original paper. This model is particularly simple since its linear nature allows one to get away without any self-consistent field calculation.","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"[CB1966]: M. L. Cohen and T. K. Bergstresser Phys. Rev. 141, 789 (1966) DOI 10.1103/PhysRev.141.789","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We build the lattice using the tabulated lattice constant from the original paper, stored in DFTK:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using DFTK\n\nSi = ElementCohenBergstresser(:Si)\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nlattice = Si.lattice_constant / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]];\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"Next we build the rather simple model and discretize it with moderate Ecut:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"model = Model(lattice, atoms, positions; terms=[Kinetic(), AtomicLocal()])\nbasis = PlaneWaveBasis(model, Ecut=10.0, kgrid=(2, 2, 2));\nnothing #hide","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"We diagonalise at the Gamma point to find a Fermi level …","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"ham = Hamiltonian(basis)\neigres = diagonalize_all_kblocks(DFTK.lobpcg_hyper, ham, 6)\nεF = DFTK.compute_occupation(basis, eigres.λ).εF","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"… and compute and plot 8 bands:","category":"page"},{"location":"examples/cohen_bergstresser/","page":"Cohen-Bergstresser model","title":"Cohen-Bergstresser model","text":"using Plots\nusing Unitful\n\nbands = compute_bands(basis; n_bands=8, εF, kline_density=10)\np = plot_bandstructure(bands; unit=u\"eV\")\nylims!(p, (-5, 6))","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"EditURL = \"../../../examples/geometry_optimization.jl\"","category":"page"},{"location":"examples/geometry_optimization/#Geometry-optimization","page":"Geometry optimization","title":"Geometry optimization","text":"","category":"section"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We use the DFTK and Optim packages in this example to find the minimal-energy bond length of the H_2 molecule. We setup H_2 in an LDA model just like in the Tutorial for silicon.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"using DFTK\nusing Optim\nusing LinearAlgebra\nusing Printf\n\nkgrid = [1, 1, 1] # k-point grid\nEcut = 5 # kinetic energy cutoff in Hartree\ntol = 1e-8 # tolerance for the optimization routine\na = 10 # lattice constant in Bohr\nlattice = a * I(3)\nH = ElementPsp(:H; psp=load_psp(\"hgh/lda/h-q1\"));\natoms = [H, H];\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We define a Bloch wave and a density to be used as global variables so that we can transfer the solution from one iteration to another and therefore reduce the optimization time.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"ψ = nothing\nρ = nothing","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"First, we create a function that computes the solution associated to the position x ℝ^6 of the atoms in reduced coordinates (cf. Reduced and cartesian coordinates for more details on the coordinates system). They are stored as a vector: x[1:3] represents the position of the first atom and x[4:6] the position of the second. We also update ψ and ρ for the next iteration.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function compute_scfres(x)\n model = model_LDA(lattice, atoms, [x[1:3], x[4:6]])\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n global ψ, ρ\n if isnothing(ρ)\n ρ = guess_density(basis)\n end\n is_converged = ScfConvergenceForce(tol / 10)\n scfres = self_consistent_field(basis; ψ, ρ, is_converged, callback=identity)\n ψ = scfres.ψ\n ρ = scfres.ρ\n scfres\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Then, we create the function we want to optimize: fg! is used to update the value of the objective function F, namely the energy, and its gradient G, here computed with the forces (which are, by definition, the negative gradient of the energy).","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"function fg!(F, G, x)\n scfres = compute_scfres(x)\n if !isnothing(G)\n grad = compute_forces(scfres)\n G .= -[grad[1]; grad[2]]\n end\n scfres.energies.total\nend;\nnothing #hide","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"Now, we can optimize on the 6 parameters x = [x1, y1, z1, x2, y2, z2] in reduced coordinates, using LBFGS(), the default minimization algorithm in Optim. We start from x0, which is a first guess for the coordinates. By default, optimize traces the output of the optimization algorithm during the iterations. Once we have the minimizer xmin, we compute the bond length in Cartesian coordinates.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"x0 = vcat(lattice \\ [0., 0., 0.], lattice \\ [1.4, 0., 0.])\nxres = optimize(Optim.only_fg!(fg!), x0, LBFGS(),\n Optim.Options(; show_trace=true, f_tol=tol))\nxmin = Optim.minimizer(xres)\ndmin = norm(lattice*xmin[1:3] - lattice*xmin[4:6])\n@printf \"\\nOptimal bond length for Ecut=%.2f: %.3f Bohr\\n\" Ecut dmin","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"We used here very rough parameters to generate the example and setting Ecut to 10 Ha yields a bond length of 1.523 Bohr, which agrees with ABINIT.","category":"page"},{"location":"examples/geometry_optimization/","page":"Geometry optimization","title":"Geometry optimization","text":"note: Degrees of freedom\nWe used here a very general setting where we optimized on the 6 variables representing the position of the 2 atoms and it can be easily extended to molecules with more atoms (such as H_2O). In the particular case of H_2, we could use only the internal degree of freedom which, in this case, is just the bond length.","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"EditURL = \"../../../examples/anyons.jl\"","category":"page"},{"location":"examples/anyons/#Anyonic-models","page":"Anyonic models","title":"Anyonic models","text":"","category":"section"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"We solve the almost-bosonic anyon model of https://arxiv.org/pdf/1901.10739.pdf","category":"page"},{"location":"examples/anyons/","page":"Anyonic models","title":"Anyonic models","text":"using DFTK\nusing StaticArrays\nusing Plots\n\n# Unit cell. Having one of the lattice vectors as zero means a 2D system\na = 14\nlattice = a .* [[1 0 0.]; [0 1 0]; [0 0 0]];\n\n# Confining scalar potential\npot(x, y, z) = ((x - a/2)^2 + (y - a/2)^2);\n\n# Parameters\nEcut = 50\nn_electrons = 1\nβ = 5;\n\n# Collect all the terms, build and run the model\nterms = [Kinetic(; scaling_factor=2),\n ExternalFromReal(X -> pot(X...)),\n Anyonic(1, β)\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless) # \"spinless electrons\"\nbasis = PlaneWaveBasis(model; Ecut, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-14) # Reduce tol for production\nE = scfres.energies.total\ns = 2\nE11 = π/2 * (2(s+1)/s)^((s+2)/s) * (s/(s+2))^(2(s+1)/s) * E^((s+2)/s) / β\nprintln(\"e(1,1) / (2π) = \", E11 / (2π))\nheatmap(scfres.ρ[:, :, 1, 1], c=:blues)","category":"page"},{"location":"publications/#Publications","page":"Publications","title":"Publications","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"Since DFTK is mostly developed as part of academic research, we would greatly appreciate if you cite our research papers as appropriate. See the CITATION.bib in the root of the DFTK repo and the publication list on this page for relevant citations. The current DFTK reference paper to cite is","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"@article{DFTKjcon,\n author = {Michael F. Herbst and Antoine Levitt and Eric Cancès},\n doi = {10.21105/jcon.00069},\n journal = {Proc. JuliaCon Conf.},\n title = {DFTK: A Julian approach for simulating electrons in solids},\n volume = {3},\n pages = {69},\n year = {2021},\n}","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"Additionally the following publications describe DFTK or one of its algorithms:","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"E. Cancès, M. Hassan and L. Vidal. Modified-Operator Method for the Calculation of Band Diagrams of Crystalline Materials. Mathematics of Computation (2023). ArXiv:2210.00442. (Supplementary material and computational scripts.\nE. Cancès, M. F. Herbst, G. Kemlin, A. Levitt and B. Stamm. Numerical stability and efficiency of response property calculations in density functional theory Letters in Mathematical Physics, 113, 21 (2023). ArXiv:2210.04512. (Supplementary material and computational scripts).\nM. F. Herbst and A. Levitt. A robust and efficient line search for self-consistent field iterations Journal of Computational Physics, 459, 111127 (2022). ArXiv:2109.14018. (Supplementary material and computational scripts).\nM. F. Herbst, A. Levitt and E. Cancès. DFTK: A Julian approach for simulating electrons in solids. JuliaCon Proceedings, 3, 69 (2021).\nM. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. Journal of Physics: Condensed Matter, 33, 085503 (2021). ArXiv:2009.01665. (Supplementary material and computational scripts).","category":"page"},{"location":"publications/#Research-conducted-with-DFTK","page":"Publications","title":"Research conducted with DFTK","text":"","category":"section"},{"location":"publications/","page":"Publications","title":"Publications","text":"The following publications report research employing DFTK as a core component. Feel free to drop us a line if you want your work to be added here.","category":"page"},{"location":"publications/","page":"Publications","title":"Publications","text":"J. Cazalis. Dirac cones for a mean-field model of graphene (Submitted). ArXiv:2207.09893. (Computational script).\nE. Cancès, L. Garrigue, D. Gontier. A simple derivation of moiré-scale continuous models for twisted bilayer graphene Physical Review B, 107, 155403 (2023). ArXiv:2206.05685.\nG. Dusson, I. Sigal and B. Stamm. Analysis of the Feshbach-Schur method for the Fourier spectral discretizations of Schrödinger operators Mathematics of Computation, 92, 217 (2023). ArXiv:2008.10871.\nE. Cancès, G. Dusson, G. Kemlin and A. Levitt. Practical error bounds for properties in plane-wave electronic structure calculations SIAM Journal on Scientific Computing, 44, B1312 (2022). ArXiv:2111.01470. (Supplementary material and computational scripts).\nE. Cancès, G. Kemlin and A. Levitt. Convergence analysis of direct minimization and self-consistent iterations SIAM Journal on Matrix Analysis and Applications, 42, 243 (2021). ArXiv:2004.09088. (Computational script).\nM. F. Herbst, A. Levitt and E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations. Faraday Discussions, 224, 227 (2020). ArXiv:2004.13549. (Reference implementation).","category":"page"},{"location":"school2022/#DFTK-School-2022","page":"DFTK School 2022","title":"DFTK School 2022","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"EditURL = \"../../../examples/error_estimates_forces.jl\"","category":"page"},{"location":"examples/error_estimates_forces/#Practical-error-bounds-for-the-forces","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"This is a simple example showing how to compute error estimates for the forces on a rm TiO_2 molecule, from which we can either compute asymptotically valid error bounds or increase the precision on the computation of the forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"The strategy we follow is described with more details in [CDKL2021] and we will use in comments the density matrices framework. We will also needs operators and functions from src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"[CDKL2021]: E. Cancès, G. Dusson, G. Kemlin, and A. Levitt Practical error bounds for properties in plane-wave electronic structure calculations Preprint, 2021. arXiv","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"using DFTK\nusing Printf\nusing LinearAlgebra\nusing ForwardDiff\nusing LinearMaps\nusing IterativeSolvers","category":"page"},{"location":"examples/error_estimates_forces/#Setup","page":"Practical error bounds for the forces","title":"Setup","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We setup manually the rm TiO_2 configuration from Materials Project.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ti = ElementPsp(:Ti; psp=load_psp(\"hgh/lda/ti-q4.hgh\"))\nO = ElementPsp(:O; psp=load_psp(\"hgh/lda/o-q6.hgh\"))\natoms = [Ti, Ti, O, O, O, O]\npositions = [[0.5, 0.5, 0.5], # Ti\n [0.0, 0.0, 0.0], # Ti\n [0.19542, 0.80458, 0.5], # O\n [0.80458, 0.19542, 0.5], # O\n [0.30458, 0.30458, 0.0], # O\n [0.69542, 0.69542, 0.0]] # O\nlattice = [[8.79341 0.0 0.0];\n [0.0 8.79341 0.0];\n [0.0 0.0 5.61098]];\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We apply a small displacement to one of the rm Ti atoms to get nonzero forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"positions[1] .+= [-0.022, 0.028, 0.035]","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We build a model with one k-point only, not too high Ecut_ref and small tolerance to limit computational time. These parameters can be increased for more precise results.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"model = model_LDA(lattice, atoms, positions)\nkgrid = [1, 1, 1]\nEcut_ref = 35\nbasis_ref = PlaneWaveBasis(model; Ecut=Ecut_ref, kgrid)\ntol = 1e-5;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Computations","page":"Practical error bounds for the forces","title":"Computations","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute the reference solution P_* from which we will compute the references forces.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"scfres_ref = self_consistent_field(basis_ref; tol, callback=identity)\nψ_ref = DFTK.select_occupied_orbitals(basis_ref, scfres_ref.ψ, scfres_ref.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We compute a variational approximation of the reference solution with smaller Ecut. ψr, ρr and Er are the quantities computed with Ecut and then extended to the reference grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"note: Choice of convergence parameters\nBe careful to choose Ecut not too close to Ecut_ref. Note also that the current choice Ecut_ref = 35 is such that the reference solution is not converged and Ecut = 15 is such that the asymptotic regime (crucial to validate the approach) is barely established.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Ecut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol, callback=identity)\nψr = DFTK.transfer_blochwave(scfres.ψ, basis, basis_ref)\nρr = compute_density(basis_ref, ψr, scfres.occupation)\nEr, hamr = energy_hamiltonian(basis_ref, ψr, scfres.occupation; ρ=ρr);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then compute several quantities that we need to evaluate the error bounds.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the residual R(P), and remove the virtual orbitals, as required in src/scf/newton.jl.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"res = DFTK.compute_projected_gradient(basis_ref, ψr, scfres.occupation)\nres, occ = DFTK.select_occupied_orbitals(basis_ref, res, scfres.occupation)\nψr = DFTK.select_occupied_orbitals(basis_ref, ψr, scfres.occupation).ψ;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the error P-P_* on the associated orbitals ϕ-ψ after aligning them: this is done by solving min ϕ - ψU for U unitary matrix of size NN (N being the number of electrons) whose solution is U = S(S^*S)^-12 where S is the overlap matrix ψ^*ϕ.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function compute_error(basis, ϕ, ψ)\n map(zip(ϕ, ψ)) do (ϕk, ψk)\n S = ψk'ϕk\n U = S*(S'S)^(-1/2)\n ϕk - ψk*U\n end\nend\nerr = compute_error(basis_ref, ψr, ψ_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1R(P) with boldsymbol M^-1 defined in [CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"P = [PreconditionerTPA(basis_ref, kpt) for kpt in basis_ref.kpoints]\nmap(zip(P, ψr)) do (Pk, ψk)\n DFTK.precondprep!(Pk, ψk)\nend\nfunction apply_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\n δφnk = sqrt.(Pk.mean_kin[n] .+ Pk.kin) .* δφnk\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_inv_M(φk, Pk, δφnk, n)\n DFTK.proj_tangent_kpt!(δφnk, φk)\n op(x) = apply_M(φk, Pk, x, n)\n function f_ldiv!(x, y)\n x .= DFTK.proj_tangent_kpt(y, φk)\n x ./= (Pk.mean_kin[n] .+ Pk.kin)\n DFTK.proj_tangent_kpt!(x, φk)\n end\n J = LinearMap{eltype(φk)}(op, size(δφnk, 1))\n δφnk = cg(J, δφnk; Pl=DFTK.FunctionPreconditioner(f_ldiv!),\n verbose=false, reltol=0, abstol=1e-15)\n DFTK.proj_tangent_kpt!(δφnk, φk)\nend\nfunction apply_metric(φ, P, δφ, A::Function)\n map(enumerate(δφ)) do (ik, δφk)\n Aδφk = similar(δφk)\n φk = φ[ik]\n for n = 1:size(δφk,2)\n Aδφk[:,n] = A(φk, P[ik], δφk[:,n], n)\n end\n Aδφk\n end\nend\nMres = apply_metric(ψr, P, res, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We can now compute the modified residual R_rm Schur(P) using a Schur complement to approximate the error on low-frequencies[CDKL2021]:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"beginbmatrix\n(boldsymbol Ω + boldsymbol K)_11 (boldsymbol Ω + boldsymbol K)_12 \n0 boldsymbol M_22\nendbmatrix\nbeginbmatrix\nP_1 - P_*1 P_2-P_*2\nendbmatrix =\nbeginbmatrix\nR_1 R_2\nendbmatrix","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the projection of the residual onto the high and low frequencies:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"resLF = DFTK.transfer_blochwave(res, basis_ref, basis)\nresHF = res - DFTK.transfer_blochwave(resLF, basis, basis_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute boldsymbol M^-1_22R_2(P):","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"e2 = apply_metric(ψr, P, resHF, apply_inv_M);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Compute the right hand side of the Schur system:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"# Rayleigh coefficients needed for `apply_Ω`\nΛ = map(enumerate(ψr)) do (ik, ψk)\n Hk = hamr.blocks[ik]\n Hψk = Hk * ψk\n ψk'Hψk\nend\nΩpKe2 = DFTK.apply_Ω(e2, ψr, hamr, Λ) .+ DFTK.apply_K(basis_ref, e2, ψr, ρr, occ)\nΩpKe2 = DFTK.transfer_blochwave(ΩpKe2, basis_ref, basis)\nrhs = resLF - ΩpKe2;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Solve the Schur system to compute R_rm Schur(P): this is the most costly step, but inverting boldsymbolΩ + boldsymbolK on the small space has the same cost than the full SCF cycle on the small grid.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"(; ψ) = DFTK.select_occupied_orbitals(basis, scfres.ψ, scfres.occupation)\ne1 = DFTK.solve_ΩplusK(basis, ψ, rhs, occ; tol).δψ\ne1 = DFTK.transfer_blochwave(e1, basis, basis_ref)\nres_schur = e1 + Mres;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/#Error-estimates","page":"Practical error bounds for the forces","title":"Error estimates","text":"","category":"section"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We start with different estimations of the forces:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the reference solution","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f_ref = compute_forces(scfres_ref)\nforces = Dict(\"F(P_*)\" => f_ref)\nrelerror = Dict(\"F(P_*)\" => 0.0)\ncompute_relerror(f) = norm(f - f_ref) / norm(f_ref);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Force from the variational solution and relative error without any post-processing:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"f = compute_forces(scfres)\nforces[\"F(P)\"] = f\nrelerror[\"F(P)\"] = compute_relerror(f);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"We then try to improve F(P) using the first order linearization:","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"F(P) = F(P_*) + rm dF(P)(P-P_*)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"To this end, we use the ForwardDiff.jl package to compute rm dF(P) using automatic differentiation.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"function df(basis, occupation, ψ, δψ, ρ)\n δρ = DFTK.compute_δρ(basis, ψ, δψ, occupation)\n ForwardDiff.derivative(ε -> compute_forces(basis, ψ.+ε.*δψ, occupation; ρ=ρ+ε.*δρ), 0)\nend;\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument if we have access to the actual error P-P_*. Usually this is of course not the case, but this is the \"best\" improvement we can hope for with a linearisation, so we are aiming for this precision.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_err = df(basis_ref, occ, ψr, DFTK.proj_tangent(err, ψr), ρr)\nforces[\"F(P) - df(P)⋅(P-P_*)\"] = f - df_err\nrelerror[\"F(P) - df(P)⋅(P-P_*)\"] = compute_relerror(f - df_err);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Computation of the forces by a linearization argument when replacing the error P-P_* by the modified residual R_rm Schur(P). The latter quantity is computable in practice.","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"df_schur = df(basis_ref, occ, ψr, res_schur, ρr)\nforces[\"F(P) - df(P)⋅Rschur(P)\"] = f - df_schur\nrelerror[\"F(P) - df(P)⋅Rschur(P)\"] = compute_relerror(f - df_schur);\nnothing #hide","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Summary of all forces on the first atom (Ti)","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"for (key, value) in pairs(forces)\n @printf(\"%30s = [%7.5f, %7.5f, %7.5f] (rel. error: %7.5f)\\n\",\n key, (value[1])..., relerror[key])\nend","category":"page"},{"location":"examples/error_estimates_forces/","page":"Practical error bounds for the forces","title":"Practical error bounds for the forces","text":"Notice how close the computable expression F(P) - rm dF(P)R_rm Schur(P) is to the best linearization ansatz F(P) - rm dF(P)(P-P_*).","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"EditURL = \"../../../examples/metallic_systems.jl\"","category":"page"},{"location":"examples/metallic_systems/#metallic-systems","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"","category":"section"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"In this example we consider the modeling of a magnesium lattice as a simple example for a metallic system. For our treatment we will use the PBE exchange-correlation functional. First we import required packages and setup the lattice. Again notice that DFTK uses the convention that lattice vectors are specified column by column.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\na = 3.01794 # bohr\nb = 5.22722 # bohr\nc = 9.77362 # bohr\nlattice = [[-a -a 0]; [-b b 0]; [0 0 -c]]\nMg = ElementPsp(:Mg; psp=load_psp(\"hgh/pbe/Mg-q2\"))\natoms = [Mg, Mg]\npositions = [[2/3, 1/3, 1/4], [1/3, 2/3, 3/4]];\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Next we build the PBE model and discretize it. Since magnesium is a metal we apply a small smearing temperature to ease convergence using the Fermi-Dirac smearing scheme. Note that both the Ecut is too small as well as the minimal k-point spacing kspacing far too large to give a converged result. These have been selected to obtain a fast execution time. By default PlaneWaveBasis chooses a kspacing of 2π * 0.022 inverse Bohrs, which is much more reasonable.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kspacing = 0.945 / u\"angstrom\" # Minimal spacing of k-points,\n# in units of wavevectors (inverse Bohrs)\nEcut = 5 # Kinetic energy cutoff in Hartree\ntemperature = 0.01 # Smearing temperature in Hartree\nsmearing = DFTK.Smearing.FermiDirac() # Smearing method\n# also supported: Gaussian,\n# MarzariVanderbilt,\n# and MethfesselPaxton(order)\n\nmodel = model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe];\n temperature, smearing)\nkgrid = kgrid_from_maximal_spacing(lattice, kspacing)\nbasis = PlaneWaveBasis(model; Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"Finally we run the SCF. Two magnesium atoms in our pseudopotential model result in four valence electrons being explicitly treated. Nevertheless this SCF will solve for eight bands by default in order to capture partial occupations beyond the Fermi level due to the employed smearing scheme. In this example we use a damping of 0.8. The default LdosMixing should be suitable to converge metallic systems like the one we model here. For the sake of demonstration we still switch to Kerker mixing here.","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres = self_consistent_field(basis, damping=0.8, mixing=KerkerMixing());\nnothing #hide","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.occupation[1]","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"scfres.energies","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"The fact that magnesium is a metal is confirmed by plotting the density of states around the Fermi level. To get better plots, we decrease the k spacing a bit for this step","category":"page"},{"location":"examples/metallic_systems/","page":"Temperature and metallic systems","title":"Temperature and metallic systems","text":"kgrid_dos = kgrid_from_maximal_spacing(lattice, 0.7 / u\"Å\")\nbands = compute_bands(scfres, kgrid_dos)\nplot_dos(bands)","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"EditURL = \"../../../examples/scf_callbacks.jl\"","category":"page"},{"location":"examples/scf_callbacks/#Monitoring-self-consistent-field-calculations","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"","category":"section"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The self_consistent_field function takes as the callback keyword argument one function to be called after each iteration. This function gets passed the complete internal state of the SCF solver and can thus be used both to monitor and debug the iterations as well as to quickly patch it with additional functionality.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"This example discusses a few aspects of the callback function taking again our favourite silicon example.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"We setup silicon in an LDA model using the ASE interface to build a bulk silicon lattice, see Input and output formats for more details.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using DFTK\nusing ASEconvert\n\nsystem = pyconvert(AbstractSystem, ase.build.bulk(\"Si\"))\nmodel = model_LDA(attach_psp(system; Si=\"hgh/pbe/si-q4.hgh\"))\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3]);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"DFTK already defines a few callback functions for standard tasks. One example is the usual convergence table, which is defined in the callback ScfDefaultCallback. Another example is ScfSaveCheckpoints, which stores the state of an SCF at each iterations to allow resuming from a failed calculation at a later point. See Saving SCF results on disk and SCF checkpoints for details how to use checkpointing with DFTK.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"In this example we define a custom callback, which plots the change in density at each SCF iteration after the SCF has finished. This example is a bit artificial, since the norms of all density differences is available as scfres.history_Δρ after the SCF has finished and could be directly plotted, but the following nicely illustrates the use of callbacks in DFTK.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"To enable plotting we first define the empty canvas and an empty container for all the density differences:","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using Plots\np = plot(; yaxis=:log)\ndensity_differences = Float64[];\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The callback function itself gets passed a named tuple similar to the one returned by self_consistent_field, which contains the input and output density of the SCF step as ρin and ρout. Since the callback gets called both during the SCF iterations as well as after convergence just before self_consistent_field finishes we can both collect the data and initiate the plotting in one function.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"using LinearAlgebra\n\nfunction plot_callback(info)\n if info.stage == :finalize\n plot!(p, density_differences, label=\"|ρout - ρin|\", markershape=:x)\n else\n push!(density_differences, norm(info.ρout - info.ρin))\n end\n info\nend\ncallback = ScfDefaultCallback() ∘ plot_callback;\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"Notice that for constructing the callback function we chained the plot_callback (which does the plotting) with the ScfDefaultCallback. The latter is the function responsible for printing the usual convergence table. Therefore if we simply did callback=plot_callback the SCF would go silent. The chaining of both callbacks (plot_callback for plotting and ScfDefaultCallback() for the convergence table) makes sure both features are enabled. We run the SCF with the chained callback …","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"scfres = self_consistent_field(basis; tol=1e-5, callback);\nnothing #hide","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"… and show the plot","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"p","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"The info object passed to the callback contains not just the densities but also the complete Bloch wave (in ψ), the occupation, band eigenvalues and so on. See src/scf/self_consistent_field.jl for all currently available keys.","category":"page"},{"location":"examples/scf_callbacks/","page":"Monitoring self-consistent field calculations","title":"Monitoring self-consistent field calculations","text":"tip: Debugging with callbacks\nVery handy for debugging SCF algorithms is to employ callbacks with an @infiltrate from Infiltrator.jl to interactively monitor what is happening each SCF step.","category":"page"},{"location":"tricks/compute_clusters/#Using-DFTK-on-compute-clusters","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"This chapter summarises a few tips and tricks for running on compute clusters. It assumes you have already installed Julia on the machine in question (see Julia downloads and Julia installation instructions).","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"We will use EPFL's scitas clusters as examples, but the basic principles should apply to other systems as well.","category":"page"},{"location":"tricks/compute_clusters/#Julia-depot-path","page":"Using DFTK on compute clusters","title":"Julia depot path","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"By default on Linux-based systems Julia puts all installed packages, including the binary packages into the path $HOME/.julia, which can easily take a few tens of GB. On many compute clusters the /home partition is on a shared filesystem (thus access is slower) and has a tight space quota. Usually it is therefore more advantageous to put Julia packages on a less persistent, faster filesystem. On many systems (such as EPFL scitas) this is the /scratch partition. In your ~/.bashrc or otherwise you should thus redirect the JULIA_DEPOT_PATH to be a subdirectory of /scratch.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"EPFL scitas. On scitas the right thing to do is to insert","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"export JULIA_DEPOT_PATH=\"/scratch/$USER/.julia\"","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"into your ~/.bashrc.","category":"page"},{"location":"tricks/compute_clusters/#Installing-DFTK-into-a-local-Julia-environment","page":"Using DFTK on compute clusters","title":"Installing DFTK into a local Julia environment","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"When employing a compute cluster, it is often desirable to integrate with the matching cluster-specific libraries, such as vendor-specific versions of BLAS, LAPACK etc. This is easiest achieved by installing DFTK not into the global Julia environment, but instead bundle the installation and the cluster-specific configuration in a local, cluster-specific environment.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"On top of the discussion of the main Installation instructions, this requires one additional step, namely the use of a custom Julia package environment.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Setting up a package environment. In the Julia REPL, create a new environment (essentially a new Julia project) using the following commands:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"import Pkg\nPkg.activate(\"path/to/new/environment\")","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Replace path/to/new/environment with the directory where you wish to create the new environment. This will generate a folder containing Project.toml and Manifest.toml files. Both together provide a reproducible image of the packages you installed in your project. Once the activate call has been issued, you can than install packages as usual. E.g. use Pkg.add(\"DFTK\") to install DFTK. The difference is that instead of tracking this in your global environment, the installations will be tracked in the local Project.toml and Manifest.toml files of the path/to/new/environment folder.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"To start a Julia shell directly with such this environment activated, run it as julia --project=path/to/new/environment.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Updating an environment. Start Julia and activate the environment. Then run Pkg.update(), i.e.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"import Pkg\nPkg.activate(\"path/to/new/environment\")\nPkg.update()","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"For more information on Julia environments, see the respective documentation on Code loading and on Managing Environments.","category":"page"},{"location":"tricks/compute_clusters/#Setting-up-local-preferences","page":"Using DFTK on compute clusters","title":"Setting up local preferences","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"On cluster machines often highly optimised versions of BLAS, LAPACK, FFTW, MPI or other basic packages are provided by the cluster vendor or operator. These can be used with DFTK by configuring an appropriate LocalPreferences.toml file, which tells Julia where the cluster-specific libraries are located. The following sections explain how to generate such a LocalPreferences.toml specific for your cluster. Once this file has been generated and sits next to a Project.toml in a Julia environment, it ensures that the cluster-specific libraries are used instead of the default ones. Therefore this setup only needs to be done once per project.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"A useful way to check whether the setup has been successful and DFTK indeed employs the desired cluster-specific libraries provides the","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"DFTK.versioninfo()","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"command. It produces an output such as","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"DFTK Version 0.6.16\nJulia Version 1.10.0\nFFTW.jl provider fftw v3.3.10\n\nBLAS.get_config()\n LinearAlgebra.BLAS.LBTConfig\n Libraries:\n └ [ILP64] libopenblas64_.so\n\nMPI.versioninfo()\n MPIPreferences:\n binary: MPICH_jll\n abi: MPICH\n\n Package versions\n MPI.jl: 0.20.19\n MPIPreferences.jl: 0.1.10\n MPICH_jll: 4.1.2+1\n\n Library information:\n libmpi: /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so\n libmpi dlpath: /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so\n\n[...]","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"which thus specifies in one overview the details of the employed BLAS, LAPACK, FFTW, MPI, etc. libraries.","category":"page"},{"location":"tricks/compute_clusters/#Switching-to-MKL-for-BLAS-and-FFT","page":"Using DFTK on compute clusters","title":"Switching to MKL for BLAS and FFT","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"The MKL Julia package provides the Intel MKL library as a BLAS backend in Julia. To use fully use it you need to do two things:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Add a using MKL to your scripts.\nConfigure a LocalPreferences.jl to employ the MKL also for FFT operations: to do so run the following Julia script:\nusing MKL\nusing FFTW\nFFTW.set_provider!(\"mkl\")","category":"page"},{"location":"tricks/compute_clusters/#Switching-to-the-system-provided-MPI-library","page":"Using DFTK on compute clusters","title":"Switching to the system-provided MPI library","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"To use a system-provided MPI library, load the required modules. On scitas that is","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"module load gcc\nmodule load openmpi","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Afterwards follow the MPI system binary instructions and execute","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"using MPIPreferences\nMPIPreferences.use_system_binary()","category":"page"},{"location":"tricks/compute_clusters/#Running-slurm-jobs","page":"Using DFTK on compute clusters","title":"Running slurm jobs","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"This example shows how to run a DFTK calculation on a slurm-based system such as scitas. We use the MKL for FFTW and BLAS and the system-provided MPI. This setup will create five files LocalPreferences.toml, Project.toml, dftk.jl, silicon.extxyz and job.sh.","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"At the time of writing (Dec 2023) following the setup indicated above leads to this LocalPreferences.toml file:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"[FFTW]\nprovider = \"mkl\"\n\n[MPIPreferences]\n__clear__ = [\"preloads_env_switch\"]\n_format = \"1.0\"\nabi = \"OpenMPI\"\nbinary = \"system\"\ncclibs = []\nlibmpi = \"libmpi\"\nmpiexec = \"mpiexec\"\npreloads = []","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"We place this into a folder next to a Project.toml to define our project:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"[deps]\nAtomsIO = \"1692102d-eeb4-4df9-807b-c9517f998d44\"\nDFTK = \"acf6eb54-70d9-11e9-0013-234b7a5f5337\"\nFFTW = \"7a1cc6ca-52ef-59f5-83cd-3a7055c09341\"\nMKL = \"33e6dc65-8f57-5167-99aa-e5a354878fb2\"\nMPIPreferences = \"3da0fdf6-3ccc-4f1b-acd9-58baa6c99267\"","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"We additionally create a small file dftk.jl to run an MPI-parallelised calculation from a passed structure","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"using MKL\nusing DFTK\nusing AtomsIO\n\ndisable_threading() # Threading and MPI not compatible\n\nfunction main(structure, pseudos; Ecut, kspacing)\n if mpi_master()\n println(\"DEPOT_PATH=$DEPOT_PATH\")\n println(DFTK.versioninfo())\n println()\n end\n\n system = attach_psp(load_system(structure); pseudos...)\n model = model_PBE(system; temperature=1e-3, smearing=Smearing.MarzariVanderbilt())\n\n kgrid = kgrid_from_minimal_spacing(model, kspacing)\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n\n if mpi_master()\n println()\n show(stdout, MIME(\"text/plain\"), basis)\n println()\n flush(stdout)\n end\n\n DFTK.reset_timer!(DFTK.timer)\n scfres = self_consistent_field(basis)\n println(DFTK.timer)\n\n if mpi_master()\n show(stdout, MIME(\"text/plain\"), scfres.energies)\n end\nend","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"and we dump the structure file silicon.extxyz with content","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"2\npbc=[T, T, T] Lattice=\"0.00000000 2.71467909 2.71467909 2.71467909 0.00000000 2.71467909 2.71467909 2.71467909 0.00000000\" Properties=species:S:1:pos:R:3\nSi 0.67866977 0.67866977 0.67866977\nSi -0.67866977 -0.67866977 -0.67866977","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"Finally the jobscript job.sh for a slurm job looks like this:","category":"page"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"#!/bin/bash\n# This is the block interpreted by slurm and used as a Job submission script.\n# The actual julia payload is in dftk.jl\n# In this case it sets the parameters for running with 2 MPI processes using a maximal\n# wall time of 2 hours.\n\n#SBATCH --time 2:00:00\n#SBATCH --nodes 1\n#SBATCH --ntasks 2\n#SBATCH --cpus-per-task 1\n\n# Now comes the setup of the environment on the cluster node (the \"jobscript\")\n\n# IMPORTANT: Set Julia's depot path to be a local scratch\n# direction (not your home !).\nexport JULIA_DEPOT_PATH=\"/scratch/$USER/.julia\"\n\n# Load modules to setup julia (this is specific to EPFL scitas systems)\nmodule purge\nmodule load gcc\nmodule load openmpi\nmodule load julia\n\n# Run the actual payload of Julia using 1 thread. Use the name of this\n# file as an include to make everything self-contained.\nsrun julia -t 1 --project -e '\n include(\"dftk.jl\")\n pseudos = (; Si=\"hgh/pbe/si-q4.hgh\" )\n main(\"silicon.extxyz\",\n pseudos;\n Ecut=10,\n kspacing=0.3,\n )\n'","category":"page"},{"location":"tricks/compute_clusters/#Using-DFTK-via-the-Aiida-workflow-engine","page":"Using DFTK on compute clusters","title":"Using DFTK via the Aiida workflow engine","text":"","category":"section"},{"location":"tricks/compute_clusters/","page":"Using DFTK on compute clusters","title":"Using DFTK on compute clusters","text":"A preliminary integration of DFTK with the Aiida high-throughput workflow engine is available via the aiida-dftk plugin. This can be a useful alternative if many similar DFTK calculations should be run.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"EditURL = \"scf_checkpoints.jl\"","category":"page"},{"location":"tricks/scf_checkpoints/#Saving-SCF-results-on-disk-and-SCF-checkpoints","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"(Image: ) (Image: )","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"note: Availability of `load_scfres`, `save_scfres` and checkpointing\nAs JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"warning: DFTK data formats are not yet fully matured\nThe data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing LinearAlgebra\nusing JLD2\n\nd = 2.079 # oxygen-oxygen bondlength\na = 9.0 # size of the simulation box\nlattice = a * I(3)\nO = ElementPsp(:O; psp=load_psp(\"hgh/pbe/O-q6.hgh\"))\natoms = [O, O]\npositions = d / 2a * [[0, 0, 1], [0, 0, -1]]\nmagnetic_moments = [1., 1.]\n\nEcut = 10 # Far too small to be converged\nmodel = model_PBE(lattice, atoms, positions; temperature=0.02, smearing=Smearing.Gaussian(),\n magnetic_moments)\nbasis = PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])\n\nscfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))\nsave_scfres(\"scfres.jld2\", scfres);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"scfres.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The scfres.jld2 file could now be transferred to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"using DFTK\nusing JLD2\nloaded = load_scfres(\"scfres.jld2\")\npropertynames(loaded)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"loaded.energies","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres(\"scfres.jld2\")) directly from the stored data.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that both load_scfres and save_scfres work by transferring all data to/from the master process, which performs the IO operations without parallelisation. Since this can become slow, both functions support optional arguments to speed up the processing. An overview:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"save_scfres(\"scfres.jld2\", scfres; save_ψ=false) avoids saving the Bloch wave, which is usually faster and saves storage space.\nload_scfres(\"scfres.jld2\", basis) avoids reconstructing the basis from the file, but uses the passed basis instead. This save the time of constructing the basis twice and allows to specify parallelisation options (via the passed basis). Usually this is useful for continuing a calculation on a supercomputer or cluster.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"See also the discussion on Input and output formats on JLD2 files.","category":"page"},{"location":"tricks/scf_checkpoints/#Checkpointing-of-SCF-calculations","page":"Saving SCF results on disk and SCF checkpoints","title":"Checkpointing of SCF calculations","text":"","category":"section"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"The easiest way to enable checkpointing is to use the kwargs_scf_checkpoints function, which does two things. (1) It sets up checkpointing using the ScfSaveCheckpoints callback and (2) if a checkpoint file is detected, the stored density is used to continue the calculation instead of the usual atomic-orbital based guess. In practice this is done by modifying the keyword arguments passed to # self_consistent_field appropriately, e.g. by using the density or orbitals from the checkpoint file. For example:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\nscfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Notice that the ρ argument is now passed to kwargsscfcheckpoints instead. If we run in the same folder the SCF again (here using a tighter tolerance), the calculation just continues.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))\nscfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Since only the density is stored in a checkpoint (and not the Bloch waves), the first step needs a slightly elevated number of diagonalizations. Notice, that reconstructing the checkpointargs in this second call is important as the checkpointargs now contain different data, such that the SCF continues from the checkpoint. By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which can be changed using the filename keyword argument of kwargs_scf_checkpoints. Note that the file is not deleted by DFTK, so it is your responsibility to clean it up. Further note that warnings or errors will arise if you try to use a checkpoint, which is incompatible with your calculation.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"We can also inspect the checkpoint file manually using the load_scfres function and use it manually to continue the calculation:","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"oldstate = load_scfres(\"dftk_scf_checkpoint.jld2\")\nscfres = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);\nnothing #hide","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"Some details on what happens under the hood in this mechanism: When using the kwargs_scf_checkpoints function, the ScfSaveCheckpoints callback is employed during the SCF, which causes the density to be stored to the JLD2 file in every iteration. When reading the file, the kwargs_scf_checkpoints transparently patches away the ψ and ρ keyword arguments and replaces them by the data obtained from the file. For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"(Cleanup files generated by this notebook)","category":"page"},{"location":"tricks/scf_checkpoints/","page":"Saving SCF results on disk and SCF checkpoints","title":"Saving SCF results on disk and SCF checkpoints","text":"rm(\"dftk_scf_checkpoint.jld2\")\nrm(\"scfres.jld2\")","category":"page"},{"location":"api/#API-reference","page":"API reference","title":"API reference","text":"","category":"section"},{"location":"api/","page":"API reference","title":"API reference","text":"This page provides a plain list of all documented functions, structs, modules and macros in DFTK. Note that this list is neither structured, complete nor particularly clean, so it only provides rough orientation at the moment. The best reference is the code itself.","category":"page"},{"location":"api/","page":"API reference","title":"API reference","text":"Modules = [DFTK, DFTK.Smearing]","category":"page"},{"location":"api/#DFTK.timer","page":"API reference","title":"DFTK.timer","text":"TimerOutput object used to store DFTK timings.\n\n\n\n\n\n","category":"constant"},{"location":"api/#DFTK.AbstractArchitecture","page":"API reference","title":"DFTK.AbstractArchitecture","text":"Abstract supertype for architectures supported by DFTK.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveBands","page":"API reference","title":"DFTK.AdaptiveBands","text":"Dynamically adapt number of bands to be converged to ensure that the orbitals of lowest occupation are occupied to at most occupation_threshold. To obtain rapid convergence of the eigensolver a gap between the eigenvalues of the last occupied orbital and the last computed (but not converged) orbital of gap_min is ensured.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AdaptiveDiagtol","page":"API reference","title":"DFTK.AdaptiveDiagtol","text":"Algorithm for the tolerance used for the next diagonalization. This function takes ρ_rm next - ρ_rm in and multiplies it with ratio_ρdiff to get the next diagtol, ensuring additionally that the returned value is between diagtol_min and diagtol_max and never increases.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Applyχ0Model","page":"API reference","title":"DFTK.Applyχ0Model","text":"Full χ0 application, optionally dropping terms or disabling Sternheimer. All keyword arguments passed to apply_χ0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicLocal","page":"API reference","title":"DFTK.AtomicLocal","text":"Atomic local potential defined by model.atoms.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.AtomicNonlocal","page":"API reference","title":"DFTK.AtomicNonlocal","text":"Nonlocal term coming from norm-conserving pseudopotentials in Kleinmann-Bylander form. textEnergy = _a _ij _n f_n braketψ_nrm proj_ai D_ij braketrm proj_ajψ_n\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupAbinit","page":"API reference","title":"DFTK.BlowupAbinit","text":"Blow-up function as used in Abinit.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupCHV","page":"API reference","title":"DFTK.BlowupCHV","text":"Blow-up function as proposed in arXiv:2210.00442. The blow-up order of the function is fixed to ensure C^2 regularity of the energies bands away from crossings and Lipschitz continuity at crossings.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.BlowupIdentity","page":"API reference","title":"DFTK.BlowupIdentity","text":"Default blow-up corresponding to the standard kinetic energies.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DFTKCalculator-Tuple{DFTK.DFTKParameters}","page":"API reference","title":"DFTK.DFTKCalculator","text":"DFTKCalculator(\n params::DFTK.DFTKParameters\n) -> DFTKCalculator\n\n\nConstruct a AtomsCalculators compatible calculator for DFTK. The model_kwargs are passed onto the Model constructor, the basis_kwargs to the PlaneWaveBasis constructor, the scf_kwargs to self_consistent_field. At the very least the DFT functionals and the Ecut needs to be specified.\n\nBy default the calculator preserves the symmetries that are stored inside the state (the basis is re-built, but symmetries are fixed and not re-computed).\n\nExample\n\njulia> DFTKCalculator(; model_kwargs=(; functionals=[:lda_x, :lda_c_vwn]),\n basis_kwargs=(; Ecut=10, kgrid=(2, 2, 2)),\n scf_kwargs=(; tol=1e-4))\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.DielectricMixing","page":"API reference","title":"DFTK.DielectricMixing","text":"We use a simplification of the Resta model and set χ_0(q) = fracC_0 G^24π (1 - C_0 G^2 k_TF^2) where C_0 = 1 - ε_r with ε_r being the macroscopic relative permittivity. We neglect K_textxc, such that J^-1 frack_TF^2 - C_0 G^2ε_r k_TF^2 - C_0 G^2\n\nBy default it assumes a relative permittivity of 10 (similar to Silicon). εr == 1 is equal to SimpleMixing and εr == Inf to KerkerMixing. The mixing is applied to ρ and ρ_textspin in the same way.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DielectricModel","page":"API reference","title":"DFTK.DielectricModel","text":"A localised dielectric model for χ_0:\n\nsqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\n\nwhere C_0 = 1 - ε_r, L(r) is a real-space localization function and otherwise the same conventions are used as in DielectricMixing.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.DivAgradOperator","page":"API reference","title":"DFTK.DivAgradOperator","text":"Nonlocal \"divAgrad\" operator -½ (A ) where A is a scalar field on the real-space grid. The -½ is included, such that this operator is a generalisation of the kinetic energy operator (which is obtained for A=1).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ElementCohenBergstresser-Tuple{Any}","page":"API reference","title":"DFTK.ElementCohenBergstresser","text":"ElementCohenBergstresser(\n key;\n lattice_constant\n) -> ElementCohenBergstresser\n\n\nElement where the interaction with electrons is modelled as in CohenBergstresser1966. Only the homonuclear lattices of the diamond structure are implemented (i.e. Si, Ge, Sn).\n\nkey may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementCoulomb-Tuple{Any}","page":"API reference","title":"DFTK.ElementCoulomb","text":"ElementCoulomb(key; mass) -> ElementCoulomb\n\n\nElement interacting with electrons via a bare Coulomb potential (for all-electron calculations) key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementGaussian-Tuple{Any, Any}","page":"API reference","title":"DFTK.ElementGaussian","text":"ElementGaussian(α, L; symbol) -> ElementGaussian\n\n\nElement interacting with electrons via a Gaussian potential. Symbol is non-mandatory.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ElementPsp-Tuple{Any}","page":"API reference","title":"DFTK.ElementPsp","text":"ElementPsp(key; psp, mass)\n\n\nElement interacting with electrons via a pseudopotential model. key may be an element symbol (like :Si), an atomic number (e.g. 14) or an element name (e.g. \"silicon\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Energies","page":"API reference","title":"DFTK.Energies","text":"A simple struct to contain a vector of energies, and utilities to print them in a nice format.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Entropy","page":"API reference","title":"DFTK.Entropy","text":"Entropy term -TS, where S is the electronic entropy. Turns the energy E into the free energy F=E-TS. This is in particular useful because the free energy, not the energy, is minimized at self-consistency.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Ewald","page":"API reference","title":"DFTK.Ewald","text":"Ewald term: electrostatic energy per unit cell of the array of point charges defined by model.atoms in a uniform background of compensating charge yielding net neutrality.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExplicitKpoints","page":"API reference","title":"DFTK.ExplicitKpoints","text":"Explicitly define the k-points along which to perform BZ sampling. (Useful for bandstructure calculations)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromFourier","page":"API reference","title":"DFTK.ExternalFromFourier","text":"External potential from the (unnormalized) Fourier coefficients V(G) G is passed in cartesian coordinates\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromReal","page":"API reference","title":"DFTK.ExternalFromReal","text":"External potential from an analytic function V (in cartesian coordinates). No low-pass filtering is performed.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ExternalFromValues","page":"API reference","title":"DFTK.ExternalFromValues","text":"External potential given as values.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FermiTwoStage","page":"API reference","title":"DFTK.FermiTwoStage","text":"Two-stage Fermi level finding algorithm starting from a Gaussian-smearing guess.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FixedBands","page":"API reference","title":"DFTK.FixedBands","text":"In each SCF step converge exactly n_bands_converge, computing along the way exactly n_bands_compute (usually a few more to ease convergence in systems with small gaps).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.FourierMultiplication","page":"API reference","title":"DFTK.FourierMultiplication","text":"Fourier space multiplication, like a kinetic energy term:\n\n(Hψ)(G) = rm multiplier(G) ψ(G)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.GPU-Union{Tuple{Type{T}}, Tuple{T}} where T<:AbstractArray","page":"API reference","title":"DFTK.GPU","text":"Construct a particular GPU architecture by passing the ArrayType\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.GaussianWannierProjection","page":"API reference","title":"DFTK.GaussianWannierProjection","text":"A Gaussian-shaped initial guess. Can be used as an approximation of an s- or σ-like orbital.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Hartree","page":"API reference","title":"DFTK.Hartree","text":"Hartree term: for a decaying potential V the energy would be\n\n12 ρ(x)ρ(y)V(x-y) dxdy\n\nwith the integral on x in the unit cell and of y in the whole space. For the Coulomb potential with periodic boundary conditions, this is rather\n\n12 ρ(x)ρ(y) G(x-y) dx dy\n\nwhere G is the Green's function of the periodic Laplacian with zero mean (-Δ G = _R 4π δ_R, integral of G zero on a unit cell).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.HydrogenicWannierProjection","page":"API reference","title":"DFTK.HydrogenicWannierProjection","text":"A hydrogenic initial guess.\n\nα is the diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerDosMixing","page":"API reference","title":"DFTK.KerkerDosMixing","text":"The same as KerkerMixing, but the Thomas-Fermi wavevector is computed from the current density of states at the Fermi level.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.KerkerMixing","page":"API reference","title":"DFTK.KerkerMixing","text":"Kerker mixing: J^-1 fracG^2k_TF^2 + G^2 where k_TF is the Thomas-Fermi wave vector. For spin-polarized calculations by default the spin density is not preconditioned. Unless a non-default value for ΔDOS_Ω is specified. This value should roughly be the expected difference in density of states (per unit volume) between spin-up and spin-down.\n\nNotes:\n\nAbinit calls 1k_TF the dielectric screening length (parameter dielng)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kinetic","page":"API reference","title":"DFTK.Kinetic","text":"Kinetic energy:\n\n12 _n f_n ψ_n^2 * rm blowup(-iΨ_n)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Kpoint","page":"API reference","title":"DFTK.Kpoint","text":"Discretization information for k-point-dependent quantities such as orbitals. More generally, a k-point is a block of the Hamiltonian; eg collinear spin is treated by doubling the number of kpoints.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LazyHcat","page":"API reference","title":"DFTK.LazyHcat","text":"Simple wrapper to represent a matrix formed by the concatenation of column blocks: it is mostly equivalent to hcat, but doesn't allocate the full matrix. LazyHcat only supports a few multiplication routines: furthermore, a multiplication involving this structure will always yield a plain array (and not a LazyHcat structure). LazyHcat is a lightweight subset of BlockArrays.jl's functionalities, but has the advantage to be able to store GPU Arrays (BlockArrays is heavily built on Julia's CPU Array).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LdosModel","page":"API reference","title":"DFTK.LdosModel","text":"Represents the LDOS-based χ_0 model\n\nχ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\n\nwhere D_textloc is the local density of states and D the density of states. For details see Herbst, Levitt 2020.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.LibxcDensities-Tuple{Any, Integer, Any, Any}","page":"API reference","title":"DFTK.LibxcDensities","text":"LibxcDensities(\n basis,\n max_derivative::Integer,\n ρ,\n τ\n) -> DFTK.LibxcDensities\n\n\nCompute density in real space and its derivatives starting from ρ\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LocalNonlinearity","page":"API reference","title":"DFTK.LocalNonlinearity","text":"Local nonlinearity, with energy ∫f(ρ) where ρ is the density\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Magnetic","page":"API reference","title":"DFTK.Magnetic","text":"Magnetic term A(-i). It is assumed (but not checked) that A = 0.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.MagneticFieldOperator","page":"API reference","title":"DFTK.MagneticFieldOperator","text":"Magnetic field operator A⋅(-i∇).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Model-Tuple{AtomsBase.AbstractSystem}","page":"API reference","title":"DFTK.Model","text":"Model(system::AbstractSystem; kwargs...)\n\nAtomsBase-compatible Model constructor. Sets structural information (atoms, positions, lattice, n_electrons etc.) from the passed system.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{AbstractMatrix{T}}, Tuple{T}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}}, Tuple{AbstractMatrix{T}, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(lattice, atoms, positions; n_electrons, magnetic_moments, terms, temperature,\n smearing, spin_polarization, symmetries)\n\nCreates the physical specification of a model (without any discretization information).\n\nn_electrons is taken from atoms if not specified.\n\nspin_polarization is :none by default (paired electrons) unless any of the elements has a non-zero initial magnetic moment. In this case the spin_polarization will be :collinear.\n\nmagnetic_moments is only used to determine the symmetry and the spin_polarization; it is not stored inside the datastructure.\n\nsmearing is Fermi-Dirac if temperature is non-zero, none otherwise\n\nThe symmetries kwarg allows (a) to pass true / false to enable / disable the automatic determination of lattice symmetries or (b) to pass an explicit list of symmetry operations to use for lowering the computational effort. The default behaviour is equal to true, namely that the code checks the specified model in form of the Hamiltonian terms, lattice, atoms and magnetic_moments parameters and from these automatically determines a set of symmetries it can safely use. If you want to pass custom symmetry operations (e.g. a reduced or extended set) use the symmetry_operations function. Notice that this may lead to wrong results if e.g. the external potential breaks some of the passed symmetries. Use false to turn off symmetries completely.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Model-Union{Tuple{Model}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.Model","text":"Model(model; [lattice, positions, atoms, kwargs...])\nModel{T}(model; [lattice, positions, atoms, kwargs...])\n\nConstruct an identical model to model with the option to change some of the contained parameters. This constructor is useful for changing the data type in the model or for changing lattice or positions in geometry/lattice optimisations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.MonkhorstPack","page":"API reference","title":"DFTK.MonkhorstPack","text":"Perform BZ sampling employing a Monkhorst-Pack grid.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NbandsAlgorithm","page":"API reference","title":"DFTK.NbandsAlgorithm","text":"NbandsAlgorithm subtypes determine how many bands to compute and converge in each SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NonlocalOperator","page":"API reference","title":"DFTK.NonlocalOperator","text":"Nonlocal operator in Fourier space in Kleinman-Bylander format, defined by its projectors P matrix and coupling terms D: Hψ = PDP' ψ.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.NoopOperator","page":"API reference","title":"DFTK.NoopOperator","text":"Noop operation: don't do anything. Useful for energy terms that don't depend on the orbitals at all (eg nuclei-nuclei interaction).\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PairwisePotential-Tuple{Any, Any}","page":"API reference","title":"DFTK.PairwisePotential","text":"PairwisePotential(\n V,\n params;\n max_radius\n) -> PairwisePotential\n\n\nPairwise terms: Pairwise potential between nuclei, e.g., Van der Waals potentials, such as Lennard—Jones terms. The potential is dependent on the distance between to atomic positions and the pairwise atomic types: For a distance d between to atoms A and B, the potential is V(d, params[(A, B)]). The parameters max_radius is of 100 by default, and gives the maximum distance (in Cartesian coordinates) between nuclei for which we consider interactions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"A plane-wave discretized Model. Normalization conventions:\n\nThings that are expressed in the G basis are normalized so that if x is the vector, then the actual function is sum_G x_G e_G with e_G(x) = e^iG x sqrt(Omega), where Omega is the unit cell volume. This is so that, eg norm(ψ) = 1 gives the correct normalization. This also holds for the density and the potentials.\nQuantities expressed on the real-space grid are in actual values.\n\nifft and fft convert between these representations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PlaneWaveBasis-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a new basis identical to basis, but with a new k-point grid, e.g. an MonkhorstPack or a ExplicitKpoints grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PlaneWaveBasis-Union{Tuple{Model{T}}, Tuple{T}} where T<:Real","page":"API reference","title":"DFTK.PlaneWaveBasis","text":"Creates a PlaneWaveBasis using the kinetic energy cutoff Ecut and a k-point grid. By default a MonkhorstPack grid is employed, which can be specified as a MonkhorstPack object or by simply passing a vector of three integers as the kgrid. Optionally kshift allows to specify a shift (0 or 1/2 in each direction). If not specified a grid is generated using kgrid_from_maximal_spacing with a maximal spacing of 2π * 0.022 per Bohr.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PreconditionerNone","page":"API reference","title":"DFTK.PreconditionerNone","text":"No preconditioning.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PreconditionerTPA","page":"API reference","title":"DFTK.PreconditionerTPA","text":"(Simplified version of) Tetter-Payne-Allan preconditioning.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspCorrection","page":"API reference","title":"DFTK.PspCorrection","text":"Pseudopotential correction energy. TODO discuss the need for this.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.PspHgh-Tuple{Any}","page":"API reference","title":"DFTK.PspHgh","text":"PspHgh(path[, identifier, description])\n\nConstruct a Hartwigsen, Goedecker, Teter, Hutter separable dual-space Gaussian pseudopotential (1998) from file.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.PspUpf-Tuple{Any}","page":"API reference","title":"DFTK.PspUpf","text":"PspUpf(path[, identifier])\n\nConstruct a Unified Pseudopotential Format pseudopotential from file.\n\nDoes not support:\n\nFully-realtivistic / spin-orbit pseudos\nBare Coulomb / all-electron potentials\nSemilocal potentials\nUltrasoft potentials\nProjector-augmented wave potentials\nGIPAW reconstruction data\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.RealFourierOperator","page":"API reference","title":"DFTK.RealFourierOperator","text":"Linear operators that act on tuples (real, fourier) The main entry point is apply!(out, op, in) which performs the operation out += op*in where out and in are named tuples (; real, fourier). They also implement mul! and Matrix(op) for exploratory use.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.RealSpaceMultiplication","page":"API reference","title":"DFTK.RealSpaceMultiplication","text":"Real space multiplication by a potential:\n\n(Hψ)(r) = V(r) ψ(r)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceDensity","page":"API reference","title":"DFTK.ScfConvergenceDensity","text":"Flag convergence by using the L2Norm of the density change in one SCF step.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceEnergy","page":"API reference","title":"DFTK.ScfConvergenceEnergy","text":"Flag convergence as soon as total energy change drops below a tolerance.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfConvergenceForce","page":"API reference","title":"DFTK.ScfConvergenceForce","text":"Flag convergence on the change in cartesian force between two iterations.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfDefaultCallback","page":"API reference","title":"DFTK.ScfDefaultCallback","text":"Default callback function for self_consistent_field methods, which prints a convergence table.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.ScfSaveCheckpoints","page":"API reference","title":"DFTK.ScfSaveCheckpoints","text":"Adds checkpointing to a DFTK self-consistent field calculation. The checkpointing file is silently overwritten. Requires the package for writing the output file (usually JLD2) to be loaded.\n\nfilename: Name of the checkpointing file.\ncompress: Should compression be used on writing (rarely useful)\nsave_ψ: Should the bands also be saved (noteworthy additional cost ... use carefully)\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.SimpleMixing","page":"API reference","title":"DFTK.SimpleMixing","text":"Simple mixing: J^-1 1\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.TermNoop","page":"API reference","title":"DFTK.TermNoop","text":"A term with a constant zero energy.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.Xc","page":"API reference","title":"DFTK.Xc","text":"Exchange-correlation term, defined by a list of functionals and usually evaluated through libxc.\n\n\n\n\n\n","category":"type"},{"location":"api/#DFTK.χ0Mixing","page":"API reference","title":"DFTK.χ0Mixing","text":"Generic mixing function using a model for the susceptibility composed of the sum of the χ0terms. For valid χ0terms See the subtypes of χ0Model. The dielectric model is solved in real space using a GMRES. Either the full kernel (RPA=false) or only the Hartree kernel (RPA=true) are employed. verbose=true lets the GMRES run in verbose mode (useful for debugging).\n\n\n\n\n\n","category":"type"},{"location":"api/#AbstractFFTs.fft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.fft!","text":"fft!(\n f_fourier::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_real::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of fft!. NOTE: If kpt is given, not only f_fourier but also f_real is overwritten.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.fft-Union{Tuple{U}, Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray{U}}} where {T, U}","page":"API reference","title":"AbstractFFTs.fft","text":"fft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_real::AbstractArray{U}\n) -> Any\n\n\nfft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_real)\n\nPerform an FFT to obtain the Fourier representation of f_real. If kpt is given, the coefficients are truncated to the k-dependent spherical basis set.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft!-Tuple{AbstractArray{T, 3} where T, PlaneWaveBasis, AbstractArray{T, 3} where T}","page":"API reference","title":"AbstractFFTs.ifft!","text":"ifft!(\n f_real::AbstractArray{T, 3} where T,\n basis::PlaneWaveBasis,\n f_fourier::AbstractArray{T, 3} where T\n) -> Any\n\n\nIn-place version of ifft.\n\n\n\n\n\n","category":"method"},{"location":"api/#AbstractFFTs.ifft-Tuple{PlaneWaveBasis, AbstractArray}","page":"API reference","title":"AbstractFFTs.ifft","text":"ifft(basis::PlaneWaveBasis, f_fourier::AbstractArray) -> Any\n\n\nifft(basis::PlaneWaveBasis, [kpt::Kpoint, ] f_fourier)\n\nPerform an iFFT to obtain the quantity defined by f_fourier defined on the k-dependent spherical basis set (if kpt is given) or the k-independent cubic (if it is not) on the real-space grid.\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_mass-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_mass","text":"atomic_mass(el::DFTK.Element) -> Any\n\n\nReturn the atomic mass of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_symbol-Tuple{DFTK.Element}","page":"API reference","title":"AtomsBase.atomic_symbol","text":"atomic_symbol(_::DFTK.Element) -> Any\n\n\nChemical symbol corresponding to an element\n\n\n\n\n\n","category":"method"},{"location":"api/#AtomsBase.atomic_system","page":"API reference","title":"AtomsBase.atomic_system","text":"atomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector\n) -> AtomsBase.FlexibleSystem\natomic_system(\n lattice::AbstractMatrix{<:Number},\n atoms::Vector{<:DFTK.Element},\n positions::AbstractVector,\n magnetic_moments::AbstractVector\n) -> AtomsBase.FlexibleSystem\n\n\natomic_system(model::DFTK.Model, magnetic_moments=[])\natomic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#AtomsBase.periodic_system","page":"API reference","title":"AtomsBase.periodic_system","text":"periodic_system(model::Model) -> AtomsBase.FlexibleSystem\nperiodic_system(\n model::Model,\n magnetic_moments\n) -> AtomsBase.FlexibleSystem\n\n\nperiodic_system(model::DFTK.Model, magnetic_moments=[])\nperiodic_system(lattice, atoms, positions, magnetic_moments=[])\n\nConstruct an AtomsBase atomic system from a DFTK model and associated magnetic moments or from the usual lattice, atoms and positions list used in DFTK plus magnetic moments.\n\n\n\n\n\n","category":"function"},{"location":"api/#Brillouin.KPaths.irrfbz_path","page":"API reference","title":"Brillouin.KPaths.irrfbz_path","text":"irrfbz_path(\n model::Model;\n ...\n) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}\nirrfbz_path(\n model::Model,\n magnetic_moments;\n dim,\n space_group_number\n) -> Union{Brillouin.KPaths.KPath{3}, Brillouin.KPaths.KPath{2}, Brillouin.KPaths.KPath{1}}\n\n\nExtract the high-symmetry k-point path corresponding to the passed model using Brillouin. Uses the conventions described in the reference work by Cracknell, Davies, Miller, and Love (CDML). Of note, this has minor differences to the k-path reference (Y. Himuma et. al. Comput. Mater. Sci. 128, 140 (2017)) underlying the path-choices of Brillouin.jl, specifically for oA and mC Bravais types.\n\nIf the cell is a supercell of a smaller primitive cell, the standard k-path of the associated primitive cell is returned. So, the high-symmetry k points are those of the primitive cell Brillouin zone, not those of the supercell Brillouin zone.\n\nThe dim argument allows to artificially truncate the dimension of the employed model, e.g. allowing to plot a 2D bandstructure of a 3D model (useful for example for plotting band structures of sheets with dim=2).\n\nDue to lacking support in Spglib.jl for two-dimensional lattices it is (a) assumed that model.lattice is a conventional lattice and (b) required to pass the space group number using the space_group_number keyword argument.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.CROP","page":"API reference","title":"DFTK.CROP","text":"CROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real\n) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}\nCROP(\n f,\n x0,\n m::Int64,\n max_iter::Int64,\n tol::Real,\n warming\n) -> NamedTuple{(:fixpoint, :converged), <:Tuple{Any, Any}}\n\n\nCROP-accelerated root-finding iteration for f, starting from x0 and keeping a history of m steps. Optionally warming specifies the number of non-accelerated steps to perform for warming up the history.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.G_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}\n\n\nG_vectors(basis::PlaneWaveBasis)\nG_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of wave vectors G in reduced (integer) coordinates of a basis or a k-point kpt.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors-Tuple{Union{Tuple, AbstractVector}}","page":"API reference","title":"DFTK.G_vectors","text":"G_vectors(fft_size::Union{Tuple, AbstractVector}) -> Any\n\n\nG_vectors(fft_size::Tuple)\n\nThe wave vectors G in reduced (integer) coordinates for a cubic basis set of given sizes.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.G_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.G_vectors_cart","text":"G_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nG_vectors_cart(basis::PlaneWaveBasis)\nG_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G vectors of a given basis or kpt, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors","text":"Gplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint) -> Any\n\n\nGplusk_vectors(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_cart-Tuple{PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_cart","text":"Gplusk_vectors_cart(\n basis::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nGplusk_vectors_cart(basis::PlaneWaveBasis, kpt::Kpoint)\n\nThe list of G + k vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Gplusk_vectors_in_supercell-Tuple{PlaneWaveBasis, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.Gplusk_vectors_in_supercell","text":"Gplusk_vectors_in_supercell(\n basis::PlaneWaveBasis,\n basis_supercell::PlaneWaveBasis,\n kpt::Kpoint\n) -> Any\n\n\nMaps all k+G vectors of an given basis as G vectors of the supercell basis, in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.HybridMixing-Tuple{}","page":"API reference","title":"DFTK.HybridMixing","text":"HybridMixing(\n;\n εr,\n kTF,\n localization,\n adjust_temperature,\n kwargs...\n) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D) \n + sqrtL(x) textIFFT fracC_0 G^24π (1 - C_0 G^2 k_TF^2) textFFT sqrtL(x)\nendaligned\n\nwhere C_0 = 1 - ε_r, D_textloc is the local density of states, D is the density of states and the same convention for parameters are used as in DielectricMixing. Additionally there is the real-space localization function L(r). For details see Herbst, Levitt 2020.\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.IncreaseMixingTemperature-Tuple{}","page":"API reference","title":"DFTK.IncreaseMixingTemperature","text":"IncreaseMixingTemperature(\n;\n factor,\n above_ρdiff,\n temperature_max\n) -> DFTK.var\"#callback#688\"{DFTK.var\"#callback#687#689\"{Int64, Float64}}\n\n\nIncrease the temperature used for computing the SCF preconditioners. Initially the temperature is increased by a factor, which is then smoothly lowered towards the temperature used within the model as the SCF converges. Once the density change is below above_ρdiff the mixing temperature is equal to the model temperature.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.LdosMixing-Tuple{}","page":"API reference","title":"DFTK.LdosMixing","text":"LdosMixing(; adjust_temperature, kwargs...) -> χ0Mixing\n\n\nThe model for the susceptibility is\n\nbeginaligned\n χ_0(r r) = (-D_textloc(r) δ(r r) + D_textloc(r) D_textloc(r) D)\nendaligned\n\nwhere D_textloc is the local density of states, D is the density of states. For details see Herbst, Levitt 2020.\n\nImportant kwargs passed on to χ0Mixing\n\nRPA: Is the random-phase approximation used for the kernel (i.e. only Hartree kernel is used and not XC kernel)\nverbose: Run the GMRES in verbose mode.\nreltol: Relative tolerance for GMRES\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ScfAcceptImprovingStep-Tuple{}","page":"API reference","title":"DFTK.ScfAcceptImprovingStep","text":"ScfAcceptImprovingStep(\n;\n max_energy_change,\n max_relative_residual\n) -> DFTK.var\"#accept_step#778\"{Float64, Float64}\n\n\nAccept a step if the energy is at most increasing by max_energy and the residual is at most max_relative_residual times the residual in the previous step.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_K-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.apply_K","text":"apply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation) -> Any\n\n\napply_K(basis::PlaneWaveBasis, δψ, ψ, ρ, occupation)\n\nCompute the application of K defined at ψ to δψ. ρ is the density issued from ψ. δψ also generates a δρ, computed with compute_δρ.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_kernel-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.apply_kernel","text":"apply_kernel(\n basis::PlaneWaveBasis,\n δρ;\n RPA,\n kwargs...\n) -> Any\n\n\napply_kernel(basis::PlaneWaveBasis, δρ; kwargs...)\n\nComputes the potential response to a perturbation δρ in real space, as a 4D (i,j,k,σ) array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any, AbstractVecOrMat}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(\n symop::SymOp,\n basis,\n kpoint,\n ψk::AbstractVecOrMat\n) -> Tuple{Any, Any}\n\n\nApply a symmetry operation to eigenvectors ψk at a given kpoint to obtain an equivalent point in [-0.5, 0.5)^3 and associated eigenvectors (expressed in the basis of the new k-point).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_symop-Tuple{SymOp, Any, Any}","page":"API reference","title":"DFTK.apply_symop","text":"apply_symop(symop::SymOp, basis, ρin; kwargs...) -> Any\n\n\nApply a symmetry operation to a density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_Ω-Tuple{Any, Any, Hamiltonian, Any}","page":"API reference","title":"DFTK.apply_Ω","text":"apply_Ω(δψ, ψ, H::Hamiltonian, Λ) -> Any\n\n\napply_Ω(δψ, ψ, H::Hamiltonian, Λ)\n\nCompute the application of Ω defined at ψ to δψ. H is the Hamiltonian computed from ψ and Λ is the set of Rayleigh coefficients ψk' * Hk * ψk at each k-point.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.apply_χ0-Union{Tuple{TδV}, Tuple{T}, Tuple{Any, Any, Any, T, Any, AbstractArray{TδV}}} where {T, TδV}","page":"API reference","title":"DFTK.apply_χ0","text":"apply_χ0(\n ham,\n ψ,\n occupation,\n εF,\n eigenvalues,\n δV::AbstractArray{TδV};\n occupation_threshold,\n q,\n kwargs_sternheimer...\n) -> Any\n\n\nGet the density variation δρ corresponding to a potential variation δV.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.attach_psp-Tuple{AtomsBase.AbstractSystem, AbstractDict{Symbol, String}}","page":"API reference","title":"DFTK.attach_psp","text":"attach_psp(\n system::AtomsBase.AbstractSystem,\n pspmap::AbstractDict{Symbol, String}\n) -> AtomsBase.FlexibleSystem\n\n\nattach_psp(system::AbstractSystem, pspmap::AbstractDict{Symbol,String})\nattach_psp(system::AbstractSystem; psps::String...)\n\nReturn a new system with the pseudopotential property of all atoms set according to the passed pspmap, which maps from the atomic symbol to a pseudopotential identifier. Alternatively the mapping from atomic symbol to pseudopotential identifier can also be passed as keyword arguments. An empty string can be used to denote elements where the full Coulomb potential should be employed.\n\nExamples\n\nSelect pseudopotentials for all silicon and oxygen atoms in the system.\n\njulia> attach_psp(system, Dict(:Si => \"hgh/lda/si-q4\", :O => \"hgh/lda/o-q6\")\n\nSame thing but using the kwargs syntax:\n\njulia> attach_psp(system, Si=\"hgh/lda/si-q4\", O=\"hgh/lda/o-q6\")\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.band_data_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.band_data_to_dict","text":"band_data_to_dict(\n band_data::NamedTuple;\n kwargs...\n) -> Dict{String, Any}\n\n\nConvert a band computational result to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis, which are called from this function and the outputs merged. Note, that only the master process returns meaningful data. All other processors still return a dictionary (to simplify code in calling locations), but the data may be dummy.\n\nSome details on the conventions for the returned data:\n\nεF: Computed Fermi level (if present in band_data)\nlabels: A mapping of high-symmetry k-Point labels to the index in the \"kcoords\" vector of the corresponding k-Point.\neigenvalues, eigenvalues_error, occupation, residual_norms: (n_bands, n_kpoints, n_spin) arrays of the respective data.\nn_iter: (n_kpoints, n_spin) array of the number of iterations the diagonalization routine required.\nkpt_max_n_G: Maximal number of G-vectors used for any k-point.\nkpt_n_G_vectors: (n_kpoints, n_spin) array, the number of valid G-vectors for each k-point, i.e. the extend along the first axis of ψ where data is valid.\nkpt_G_vectors: (3, max_n_G, n_kpoints, n_spin) array of the integer (reduced) coordinates of the G-points used for each k-point.\nψ: (max_n_G, n_bands, n_kpoints, n_spin) arrays where max_n_G is the maximal number of G-vectors used for any k-point. The data is zero-padded, i.e. for k-points which have less G-vectors than maxnG, then there are tailing zeros.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_fft_plans!-Tuple{Array{ComplexF64}}","page":"API reference","title":"DFTK.build_fft_plans!","text":"build_fft_plans!(\n tmp::Array{ComplexF64}\n) -> Tuple{FFTW.cFFTWPlan{ComplexF64, -1, true}, FFTW.cFFTWPlan{ComplexF64, -1, false}, Any, Any}\n\n\nPlan a FFT of type T and size fft_size, spending some time on finding an optimal algorithm. (Inplace, out-of-place) x (forward, backward) FFT plans are returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_form_factors-Union{Tuple{TT}, Tuple{Any, AbstractArray{StaticArraysCore.SVector{3, TT}, 1}}} where TT","page":"API reference","title":"DFTK.build_form_factors","text":"build_form_factors(\n psp,\n G_plus_k::AbstractArray{StaticArraysCore.SArray{Tuple{3}, TT, 1, 3}, 1}\n) -> Matrix{T} where T<:(Complex{_A} where _A)\n\n\nBuild form factors (Fourier transforms of projectors) for an atom centered at 0.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.build_projection_vectors-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Kpoint, Any, Any}} where T","page":"API reference","title":"DFTK.build_projection_vectors","text":"build_projection_vectors(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kpt::Kpoint,\n psps,\n psp_positions\n) -> Any\n\n\nBuild projection vectors for a atoms array generated by term_nonlocal\n\nbeginaligned\nH_rm at = sum_ij C_ij ketrm proj_i brarm proj_j \nH_rm per = sum_R sum_ij C_ij ketrm proj_i(x-R) brarm proj_j(x-R)\nendaligned\n\nbeginaligned\nbrakete_k(G) middle H_rm pere_k(G)\n = ldots \n = frac1Ω sum_ij C_ij widehatrm proj_i(k+G) widehatrm proj_j^*(k+G)\nendaligned\n\nwhere widehatrm proj_i(p) = _ℝ^3 rm proj_i(r) e^-ipr dr.\n\nWe store frac1sqrt Ω widehatrm proj_i(k+G) in proj_vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Tuple{NamedTuple}","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(scfres::NamedTuple) -> NamedTuple\n\n\nTranspose all data from a given self-consistent-field result from unit cell to supercell conventions. The parameters to adapt are the following:\n\nbasis_supercell and ψ_supercell are computed by the routines above.\nThe supercell occupations vector is the concatenation of all input occupations vectors.\nThe supercell density is computed with supercell occupations and ψ_supercell.\nSupercell energies are the multiplication of input energies by the number of unit cells in the supercell.\n\nOther parameters stay untouched.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n basis::PlaneWaveBasis{T, VT} where VT<:Real\n) -> PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}\n\n\nConstruct a plane-wave basis whose unit cell is the supercell associated to an input basis k-grid. All other parameters are modified so that the respective physical systems associated to both basis are equivalent.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cell_to_supercell-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T<:Real","page":"API reference","title":"DFTK.cell_to_supercell","text":"cell_to_supercell(\n ψ,\n basis::PlaneWaveBasis{T<:Real, VT} where VT<:Real,\n basis_supercell::PlaneWaveBasis{T<:Real, VT} where VT<:Real\n) -> Any\n\n\nRe-organize Bloch waves computed in a given basis as Bloch waves of the associated supercell basis. The output ψ_supercell have a single component at Γ-point, such that ψ_supercell[Γ][:, k+n] contains ψ[k][:, n], within normalization on the supercell.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cg!-Union{Tuple{T}, Tuple{AbstractVector{T}, LinearMaps.LinearMap{T}, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.cg!","text":"cg!(\n x::AbstractArray{T, 1},\n A::LinearMaps.LinearMap{T},\n b::AbstractArray{T, 1};\n precon,\n proj,\n callback,\n tol,\n maxiter,\n miniter\n) -> NamedTuple{(:x, :converged, :tol, :residual_norm, :n_iter, :maxiter, :stage), <:Tuple{AbstractVector, Bool, Float64, Any, Int64, Int64, Symbol}}\n\n\nImplementation of the conjugate gradient method which allows for preconditioning and projection operations along iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_ionic-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_ionic","text":"charge_ionic(el::DFTK.Element) -> Int64\n\n\nReturn the total ionic charge of an atom type (nuclear charge - core electrons)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.charge_nuclear-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.charge_nuclear","text":"charge_nuclear(_::DFTK.Element) -> Int64\n\n\nReturn the total nuclear charge of an atom type\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cis2pi-Tuple{Any}","page":"API reference","title":"DFTK.cis2pi","text":"cis2pi(x) -> Any\n\n\nFunction to compute exp(2π i x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_amn_kpoint-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_amn_kpoint","text":"compute_amn_kpoint(\n basis::PlaneWaveBasis,\n kpt,\n ψk,\n projections,\n n_bands\n) -> Any\n\n\nCompute the starting matrix for Wannierization.\n\nWannierization searches for a unitary matrix U_m_n. As a starting point for the search, we can provide an initial guess function g for the shape of the Wannier functions, based on what we expect from knowledge of the problem or physical intuition. This starting matrix is called A_k_mn, and is computed as follows: A_k_mn = langle ψ_m^k g^textper_n rangle. The matrix will be orthonormalized by the chosen Wannier program, we don't need to do so ourselves.\n\nCenters are to be given in lattice coordinates and G_vectors in reduced coordinates. The dot product is computed in the Fourier space.\n\nGiven an orbital g_n, the periodized orbital is defined by : g^per_n = sumlimits_R in rm lattice g_n( cdot - R). The Fourier coefficient of g^per_n at any G is given by the value of the Fourier transform of g_n in G.\n\nEach projection is a callable object that accepts the basis and some p-points as an argument, and returns the Fourier transform of g_n at the p-points.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{Any, Brillouin.KPaths.KPath}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis_or_scfres,\n kpath::Brillouin.KPaths.KPath;\n kline_density,\n kwargs...\n) -> NamedTuple\n\n\nCompute band data along a specific Brillouin.KPath using a kline_density, the number of k-points per inverse bohrs (i.e. overall in units of length).\n\nIf not given, the path is determined automatically by inspecting the Model. If you are using spin, you should pass the magnetic_moments as a kwarg to ensure these are taken into account when determining the path.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{NamedTuple, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n scfres::NamedTuple,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Any, Any, Vector{T} where T<:NamedTuple}}\n\n\nCompute band data starting from SCF results. εF and ρ from the scfres are forwarded to the band computation and n_bands is by default selected as n_bands_scf + 5sqrt(n_bands_scf).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_bands-Tuple{PlaneWaveBasis, DFTK.AbstractKgrid}","page":"API reference","title":"DFTK.compute_bands","text":"compute_bands(\n basis::PlaneWaveBasis,\n kgrid::DFTK.AbstractKgrid;\n n_bands,\n n_extra,\n ρ,\n εF,\n eigensolver,\n tol,\n kwargs...\n) -> NamedTuple{(:basis, :ψ, :eigenvalues, :ρ, :εF, :occupation, :diagonalization), <:Tuple{PlaneWaveBasis{T, _A, Arch, _B, _C} where {T<:Real, _A<:Real, Arch<:DFTK.AbstractArchitecture, _B<:AbstractArray{StaticArraysCore.SVector{3, Int64}, 3}, _C<:AbstractArray{StaticArraysCore.SVector{3, _A}, 3}}, Any, Any, Any, Nothing, Nothing, Vector{T} where T<:NamedTuple}}\n\n\nCompute n_bands eigenvalues and Bloch waves at the k-Points specified by the kgrid. All kwargs not specified below are passed to diagonalize_all_kblocks:\n\nkgrid: A custom kgrid to perform the band computation, e.g. a new MonkhorstPack grid.\ntol The default tolerance for the eigensolver is substantially lower than for SCF computations. Increase if higher accuracy desired.\neigensolver: The diagonalisation method to be employed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_current-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_current","text":"compute_current(\n basis::PlaneWaveBasis,\n ψ,\n occupation\n) -> Vector\n\n\nComputes the probability (not charge) current, _n f_n Im(ψ_n ψ_n).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_density","text":"compute_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n occupation_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\ncompute_density(basis::PlaneWaveBasis, ψ::AbstractVector, occupation::AbstractVector)\n\nCompute the density for a wave function ψ discretized on the plane-wave grid basis, where the individual k-points are occupied according to occupation. ψ should be one coefficient matrix per k-point. It is possible to ask only for occupations higher than a certain level to be computed by using an optional occupation_threshold. By default all occupation numbers are considered.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dos-Tuple{Any, Any, Any}","page":"API reference","title":"DFTK.compute_dos","text":"compute_dos(\n ε,\n basis,\n eigenvalues;\n smearing,\n temperature\n) -> Any\n\n\nTotal density of states at energy ε\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_dynmat","text":"compute_dynmat(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n occupation;\n q,\n ρ,\n ham,\n εF,\n eigenvalues,\n kwargs...\n) -> Any\n\n\nCompute the dynamical matrix in the form of a 3n_rm atoms3n_rm atoms tensor in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_dynmat_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_dynmat_cart","text":"compute_dynmat_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCartesian form of compute_dynmat.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_fft_size-Union{Tuple{T}, Tuple{Model{T}, Any}, Tuple{Model{T}, Any, Any}} where T","page":"API reference","title":"DFTK.compute_fft_size","text":"compute_fft_size(\n model::Model{T},\n Ecut;\n ...\n) -> Tuple{Vararg{Any, _A}} where _A\ncompute_fft_size(\n model::Model{T},\n Ecut,\n kgrid;\n ensure_smallprimes,\n algorithm,\n factors,\n kwargs...\n) -> Tuple{Vararg{Any, _A}} where _A\n\n\nDetermine the minimal grid size for the cubic basis set to be able to represent product of orbitals (with the default supersampling=2).\n\nOptionally optimize the grid afterwards for the FFT procedure by ensuring factorization into small primes.\n\nThe function will determine the smallest parallelepiped containing the wave vectors G^22 leq E_textcut textsupersampling^2. For an exact representation of the density resulting from wave functions represented in the spherical basis sets, supersampling should be at least 2.\n\nIf factors is not empty, ensure that the resulting fft_size contains all the factors\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_forces","text":"compute_forces(scfres) -> Any\n\n\nCompute the forces of an obtained SCF solution. Returns the forces wrt. the fractional lattice vectors. To get cartesian forces use compute_forces_cart. Returns a list of lists of forces (as SVector{3}) in the same order as the atoms and positions in the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_forces_cart-Tuple{PlaneWaveBasis, Any, Any}","page":"API reference","title":"DFTK.compute_forces_cart","text":"compute_forces_cart(\n basis::PlaneWaveBasis,\n ψ,\n occupation;\n kwargs...\n) -> Any\n\n\nCompute the cartesian forces of an obtained SCF solution in Hartree / Bohr. Returns a list of lists of forces [[force for atom in positions] for (element, positions) in atoms] which has the same structure as the atoms object passed to the underlying Model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_inverse_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_inverse_lattice","text":"compute_inverse_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the inverse of the lattice. Takes special care of 1D or 2D cases.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_kernel-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_kernel","text":"compute_kernel(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n kwargs...\n) -> Any\n\n\ncompute_kernel(basis::PlaneWaveBasis; kwargs...)\n\nComputes a matrix representation of the full response kernel (derivative of potential with respect to density) in real space. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks\n\nleft(beginarraycc\n K_αα K_αβ\n K_βα K_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_ldos-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.compute_ldos","text":"compute_ldos(\n ε,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues,\n ψ;\n smearing,\n temperature,\n weight_threshold\n) -> AbstractArray{_A, 4} where _A\n\n\nLocal density of states, in real space. weight_threshold is a threshold to screen away small contributions to the LDOS.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, Number}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n εF::Number;\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}\n\n\nCompute occupation given eigenvalues and Fermi level\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_occupation-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractVector, AbstractFermiAlgorithm}} where T","page":"API reference","title":"DFTK.compute_occupation","text":"compute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector;\n ...\n) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}\ncompute_occupation(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n eigenvalues::AbstractVector,\n fermialg::AbstractFermiAlgorithm;\n tol_n_elec,\n temperature,\n smearing\n) -> NamedTuple{(:occupation, :εF), <:Tuple{Any, Number}}\n\n\nCompute occupation and Fermi level given eigenvalues and using fermialg. The tol_n_elec gives the accuracy on the electron count which should be at least achieved.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_recip_lattice-Union{Tuple{AbstractMatrix{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.compute_recip_lattice","text":"compute_recip_lattice(lattice::AbstractArray{T, 2}) -> Any\n\n\nCompute the reciprocal lattice. We use the convention that the reciprocal lattice is the set of G vectors such that G ⋅ R ∈ 2π ℤ for all R in the lattice.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_stresses_cart-Tuple{Any}","page":"API reference","title":"DFTK.compute_stresses_cart","text":"compute_stresses_cart(scfres) -> Any\n\n\nCompute the stresses of an obtained SCF solution. The stress tensor is given by\n\nleft( beginarrayccc\nσ_xx σ_xy σ_xz \nσ_yx σ_yy σ_yz \nσ_zx σ_zy σ_zz\nright) = frac1Ω left fracdE (I+ϵ) * LdMright_ϵ=0\n\nwhere ϵ is the strain. See O. Nielsen, R. Martin Phys. Rev. B. 32, 3792 (1985) for details. In Voigt notation one would use the vector σ_xx σ_yy σ_zz σ_zy σ_zx σ_yx.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Tuple{PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpt_out::Kpoint\n) -> Any\n\n\nReturn a sparse matrix that maps quantities given on basis_in and kpt_in to quantities on basis_out and kpt_out.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_transfer_matrix-Tuple{PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.compute_transfer_matrix","text":"compute_transfer_matrix(\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Vector\n\n\nReturn a list of sparse matrices (one per k-point) that map quantities given in the basis_in basis to quantities given in the basis_out basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_unit_cell_volume-Tuple{Any}","page":"API reference","title":"DFTK.compute_unit_cell_volume","text":"compute_unit_cell_volume(lattice) -> Any\n\n\nCompute unit cell volume volume. In case of 1D or 2D case, the volume is the length/surface.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δHψ_αs-Tuple{PlaneWaveBasis, Vararg{Any, 4}}","page":"API reference","title":"DFTK.compute_δHψ_αs","text":"compute_δHψ_αs(basis::PlaneWaveBasis, ψ, α, s, q) -> Any\n\n\nAssemble the right-hand side term for the Sternheimer equation for all relevant quantities: Compute the perturbation of the Hamiltonian with respect to a variation of the local potential produced by a displacement of the atom s in the direction α.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δocc!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.compute_δocc!","text":"compute_δocc!(\n δocc,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n εF,\n ε,\n δHψ\n) -> NamedTuple{(:δocc, :δεF), <:Tuple{Any, Any}}\n\n\nCompute the derivatives of the occupations (and of the Fermi level). The derivatives of the occupations are in-place stored in δocc. The tuple (; δocc, δεF) is returned. It is assumed the passed δocc are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_δψ!-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 5}}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.compute_δψ!","text":"compute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ;\n ...\n)\ncompute_δψ!(\n δψ,\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n H,\n ψ,\n εF,\n ε,\n δHψ,\n ε_minus_q;\n ψ_extra,\n q,\n kwargs_sternheimer...\n)\n\n\nPerform in-place computations of the derivatives of the wave functions by solving a Sternheimer equation for each k-points. It is assumed the passed δψ are initialised to zero.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.compute_χ0-Tuple{Any}","page":"API reference","title":"DFTK.compute_χ0","text":"compute_χ0(ham; temperature) -> Any\n\n\nCompute the independent-particle susceptibility. Will blow up for large systems. For non-spin-polarized calculations the matrix dimension is prod(basis.fft_size) × prod(basis.fft_size) and for collinear spin-polarized cases it is 2prod(basis.fft_size) × 2prod(basis.fft_size). In this case the matrix has effectively 4 blocks, which are:\n\nleft(beginarraycc\n (χ_0)_αα (χ_0)_αβ \n (χ_0)_βα (χ_0)_ββ\nendarrayright)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.cos2pi-Tuple{Any}","page":"API reference","title":"DFTK.cos2pi","text":"cos2pi(x) -> Any\n\n\nFunction to compute cos(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{Any, Any}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psps, psp_positions) -> Any\n\n\ncount_n_proj(psps, psp_positions)\n\nNumber of projector functions for all angular momenta up to psp.lmax and for all atoms in the system, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp, l::Integer) -> Any\n\n\ncount_n_proj(psp, l)\n\nNumber of projector functions for angular momentum l, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj","text":"count_n_proj(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj(psp)\n\nNumber of projector functions for all angular momenta up to psp.lmax, including angular parts from -m:m.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp, Integer}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(\n psp::DFTK.NormConservingPsp,\n l::Integer\n) -> Any\n\n\ncount_n_proj_radial(psp, l)\n\nNumber of projector radial functions at angular momentum l.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.count_n_proj_radial-Tuple{DFTK.NormConservingPsp}","page":"API reference","title":"DFTK.count_n_proj_radial","text":"count_n_proj_radial(psp::DFTK.NormConservingPsp) -> Int64\n\n\ncount_n_proj_radial(psp)\n\nNumber of projector radial functions at all angular momenta up to psp.lmax.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.create_supercell-NTuple{4, Any}","page":"API reference","title":"DFTK.create_supercell","text":"create_supercell(\n lattice,\n atoms,\n positions,\n supercell_size\n) -> NamedTuple{(:lattice, :atoms, :positions), <:Tuple{Any, Any, Any}}\n\n\nConstruct a supercell of size supercell_size from a unit cell described by its lattice, atoms and their positions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.datadir_psp-Tuple{}","page":"API reference","title":"DFTK.datadir_psp","text":"datadir_psp() -> String\n\n\nReturn the data directory with pseudopotential files\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_fermialg-Tuple{DFTK.Smearing.SmearingFunction}","page":"API reference","title":"DFTK.default_fermialg","text":"default_fermialg(\n _::DFTK.Smearing.SmearingFunction\n) -> FermiBisection\n\n\nDefault selection of a Fermi level determination algorithm\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_symmetries-NTuple{6, Any}","page":"API reference","title":"DFTK.default_symmetries","text":"default_symmetries(\n lattice,\n atoms,\n positions,\n magnetic_moments,\n spin_polarization,\n terms;\n tol_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nDefault logic to determine the symmetry operations to be used in the model.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.default_wannier_centers-Tuple{Any}","page":"API reference","title":"DFTK.default_wannier_centers","text":"default_wannier_centers(n_wannier) -> Any\n\n\nDefault random Gaussian guess for maximally-localised wannier functions generated in reduced coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.determine_spin_polarization-Tuple{Any}","page":"API reference","title":"DFTK.determine_spin_polarization","text":"determine_spin_polarization(magnetic_moments) -> Symbol\n\n\n:none if no element has a magnetic moment, else :collinear or :full.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diagonalize_all_kblocks-Tuple{Any, Hamiltonian, Int64}","page":"API reference","title":"DFTK.diagonalize_all_kblocks","text":"diagonalize_all_kblocks(\n eigensolver,\n ham::Hamiltonian,\n nev_per_kpoint::Int64;\n ψguess,\n prec_type,\n interpolate_kpoints,\n tol,\n miniter,\n maxiter,\n n_conv_check\n) -> NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}\n\n\nFunction for diagonalising each k-Point blow of ham one step at a time. Some logic for interpolating between k-points is used if interpolate_kpoints is true and if no guesses are given. eigensolver is the iterative eigensolver that really does the work, operating on a single k-Block. eigensolver should support the API eigensolver(A, X0; prec, tol, maxiter) prec_type should be a function that returns a preconditioner when called as prec(ham, kpt)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.diameter-Tuple{AbstractMatrix}","page":"API reference","title":"DFTK.diameter","text":"diameter(lattice::AbstractMatrix) -> Any\n\n\nCompute the diameter of the unit cell\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.direct_minimization-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.direct_minimization","text":"direct_minimization(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n ψ,\n tol,\n is_converged,\n maxiter,\n prec_type,\n callback,\n optim_method,\n linesearch,\n kwargs...\n) -> Any\n\n\nComputes the ground state by direct minimization. kwargs... are passed to Optim.Options() and optim_method selects the optim approach which is employed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.disable_threading-Tuple{}","page":"API reference","title":"DFTK.disable_threading","text":"disable_threading() -> Union{Nothing, Bool}\n\n\nConvenience function to disable all threading in DFTK and assert that Julia threading is off as well.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.divergence_real-Tuple{Any, Any}","page":"API reference","title":"DFTK.divergence_real","text":"divergence_real(operand, basis) -> Any\n\n\nCompute divergence of an operand function, which returns the cartesian x,y,z components in real space when called with the arguments 1 to 3. The divergence is also returned as a real-space array.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, AbstractArray, Any}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges::AbstractArray,\n positions;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_ewald-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_ewald","text":"energy_forces_ewald(\n S,\n lattice::AbstractArray{T},\n charges,\n positions,\n q,\n ph_disp;\n η\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nCompute the electrostatic energy and forces. The energy is the electrostatic interaction energy per unit cell between point charges in a uniform background of compensating charge to yield net neutrality. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. charges and positions are the point charges and their positions (as an array of arrays) in fractional coordinates.\n\nFor now this function returns zero energy and force on non-3D systems. Use a pairwise potential term if you want to customise this treatment.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 4}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nStandard computation of energy and forces.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n kwargs...\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nComputation for phonons; required to build the dynamical matrix.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_forces_pairwise-Union{Tuple{T}, Tuple{Any, AbstractArray{T}, Vararg{Any, 6}}} where T","page":"API reference","title":"DFTK.energy_forces_pairwise","text":"energy_forces_pairwise(\n S,\n lattice::AbstractArray{T},\n symbols,\n positions,\n V,\n params,\n q,\n ph_disp;\n max_radius\n) -> NamedTuple{(:energy, :forces), <:Tuple{Any, Any}}\n\n\nCompute the pairwise energy and forces. The energy is the interaction energy per unit cell between atomic sites. The forces is the opposite of the derivative of the energy with respect to positions.\n\nlattice should contain the lattice vectors as columns. symbols and positions are the atomic elements and their positions (as an array of arrays) in fractional coordinates. V and params are the pairwise potential and its set of parameters (that depends on pairs of symbols).\n\nThe potential is expected to decrease quickly at infinity.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.energy_psp_correction-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.energy_psp_correction","text":"energy_psp_correction(\n lattice::AbstractArray{T, 2},\n atoms,\n atom_groups\n) -> Any\n\n\nCompute the correction term for properly modelling the interaction of the pseudopotential core with the compensating background charge induced by the Ewald term.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.enforce_real!-Tuple{Any, PlaneWaveBasis}","page":"API reference","title":"DFTK.enforce_real!","text":"enforce_real!(\n fourier_coeffs,\n basis::PlaneWaveBasis\n) -> AbstractArray\n\n\nEnsure its real-space equivalent of passed Fourier-space representation is entirely real by removing wavevectors G that don't have a -G counterpart in the basis.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.estimate_integer_lattice_bounds-Union{Tuple{T}, Tuple{AbstractMatrix{T}, Any}, Tuple{AbstractMatrix{T}, Any, Any}} where T","page":"API reference","title":"DFTK.estimate_integer_lattice_bounds","text":"estimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ;\n ...\n) -> Vector\nestimate_integer_lattice_bounds(\n M::AbstractArray{T, 2},\n δ,\n shift;\n tol\n) -> Vector\n\n\nEstimate integer bounds for dense space loops from a given inequality ||Mx|| ≤ δ. For 1D and 2D systems the limit will be zero in the auxiliary dimensions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_fourier-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_fourier","text":"eval_psp_density_core_fourier(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Any\n\n\neval_psp_density_core_fourier(psp, p)\n\nEvaluate the atomic core charge density in reciprocal space:\n\nbeginaligned\nρ_rm core(p) = _ℝ^3 ρ_rm core(r) e^-ipr dr \n = 4π _ℝ_+ ρ_rm core(r) fracsin(pr)ρr r^2 dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_core_real-Union{Tuple{T}, Tuple{DFTK.NormConservingPsp, T}} where T<:Real","page":"API reference","title":"DFTK.eval_psp_density_core_real","text":"eval_psp_density_core_real(\n _::DFTK.NormConservingPsp,\n _::Real\n) -> Any\n\n\neval_psp_density_core_real(psp, r)\n\nEvaluate the atomic core charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_fourier","text":"eval_psp_density_valence_fourier(\n psp::DFTK.NormConservingPsp,\n p::AbstractVector\n) -> Any\n\n\neval_psp_density_valence_fourier(psp, p)\n\nEvaluate the atomic valence charge density in reciprocal space:\n\nbeginaligned\nρ_rm val(p) = _ℝ^3 ρ_rm val(r) e^-ipr dr \n = 4π _ℝ_+ ρ_rm val(r) fracsin(pr)ρr r^2 dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_density_valence_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_density_valence_real","text":"eval_psp_density_valence_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_density_valence_real(psp, r)\n\nEvaluate the atomic valence charge density in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_energy_correction","page":"API reference","title":"DFTK.eval_psp_energy_correction","text":"eval_psp_energy_correction([T=Float64,] psp, n_electrons)\n\nEvaluate the energy correction to the Ewald electrostatic interaction energy of one unit cell, which is required compared the Ewald expression for point-like nuclei. n_electrons is the number of electrons per unit cell. This defines the uniform compensating background charge, which is assumed here.\n\nNotice: The returned result is the energy per unit cell and not the energy per volume. To obtain the latter, the caller needs to divide by the unit cell volume.\n\nThe energy correction is defined as the limit of the Fourier-transform of the local potential as p to 0, using the same correction as in the Fourier-transform of the local potential:\n\nlim_p to 0 4π N_rm elec _ℝ_+ (V(r) - C(r)) fracsin(pr)pr r^2 dr + FC(r)\n = 4π N_rm elec _ℝ_+ (V(r) + Zr) r^2 dr\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.eval_psp_local_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_fourier","text":"eval_psp_local_fourier(\n psp::DFTK.NormConservingPsp,\n p::AbstractVector\n) -> Any\n\n\neval_psp_local_fourier(psp, p)\n\nEvaluate the local part of the pseudopotential in reciprocal space:\n\nbeginaligned\nV_rm loc(p) = _ℝ^3 V_rm loc(r) e^-ipr dr \n = 4π _ℝ_+ V_rm loc(r) fracsin(pr)p r dr\nendaligned\n\nIn practice, the local potential should be corrected using a Coulomb-like term C(r) = -Zr to remove the long-range tail of V_rm loc(r) from the integral:\n\nbeginaligned\nV_rm loc(p) = _ℝ^3 (V_rm loc(r) - C(r)) e^-ipr dr + FC(r) \n = 4π _ℝ_+ (V_rm loc(r) + Zr) fracsin(pr)pr r^2 dr - Zp^2\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_local_real-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_local_real","text":"eval_psp_local_real(\n psp::DFTK.NormConservingPsp,\n r::AbstractVector\n) -> Any\n\n\neval_psp_local_real(psp, r)\n\nEvaluate the local part of the pseudopotential in real space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_fourier-Tuple{DFTK.NormConservingPsp, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_fourier","text":"eval_psp_projector_fourier(\n psp::DFTK.NormConservingPsp,\n p::AbstractVector\n)\n\n\neval_psp_projector_fourier(psp, i, l, p)\n\nEvaluate the radial part of the i-th projector for angular momentum l at the reciprocal vector with modulus p:\n\nbeginaligned\nrm proj(p) = _ℝ^3 rm proj_il(r) e^-ipr dr \n = 4π _ℝ_+ r^2 rm proj_il(r) j_l(pr) dr\nendaligned\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.eval_psp_projector_real-Tuple{DFTK.NormConservingPsp, Any, Any, AbstractVector}","page":"API reference","title":"DFTK.eval_psp_projector_real","text":"eval_psp_projector_real(\n psp::DFTK.NormConservingPsp,\n i,\n l,\n r::AbstractVector\n) -> Any\n\n\neval_psp_projector_real(psp, i, l, r)\n\nEvaluate the radial part of the i-th projector for angular momentum l in real-space at the vector with modulus r.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.filled_occupation-Tuple{Any}","page":"API reference","title":"DFTK.filled_occupation","text":"filled_occupation(model) -> Int64\n\n\nMaximal occupation of a state (2 for non-spin-polarized electrons, 1 otherwise).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.find_equivalent_kpt-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any}} where T","page":"API reference","title":"DFTK.find_equivalent_kpt","text":"find_equivalent_kpt(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n kcoord,\n spin;\n tol\n) -> NamedTuple{(:index, :ΔG), <:Tuple{Int64, Any}}\n\n\nFind the equivalent index of the coordinate kcoord ∈ ℝ³ in a list kcoords ∈ [-½, ½)³. ΔG is the vector of ℤ³ such that kcoords[index] = kcoord + ΔG.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.gather_kpts","text":"gather_kpts(\n basis::PlaneWaveBasis\n) -> Union{Nothing, PlaneWaveBasis}\n\n\nGather the distributed k-point data on the master process and return it as a PlaneWaveBasis. On the other (non-master) processes nothing is returned. The returned object should not be used for computations and only for debugging or to extract data for serialisation to disk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gather_kpts_block!-Union{Tuple{A}, Tuple{Any, PlaneWaveBasis, AbstractVector{A}}} where A","page":"API reference","title":"DFTK.gather_kpts_block!","text":"gather_kpts_block!(\n dest,\n basis::PlaneWaveBasis,\n kdata::AbstractArray{A, 1}\n) -> Any\n\n\nGather the distributed data of a quantity depending on k-Points on the master process and save it in dest as a dense (size(kdata[1])..., n_kpoints) array. On the other (non-master) processes nothing is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.gaussian_valence_charge_density_fourier-Union{Tuple{T}, Tuple{DFTK.Element, T}} where T<:Real","page":"API reference","title":"DFTK.gaussian_valence_charge_density_fourier","text":"gaussian_valence_charge_density_fourier(\n el::DFTK.Element,\n p::Real\n) -> Any\n\n\nGaussian valence charge density using Abinit's coefficient table, in Fourier space.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.guess_density","page":"API reference","title":"DFTK.guess_density","text":"guess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity;\n ...\n) -> Any\nguess_density(\n basis::PlaneWaveBasis,\n method::AtomicDensity,\n magnetic_moments;\n n_electrons\n) -> Any\n\n\nguess_density(basis::PlaneWaveBasis, method::DensityConstructionMethod,\n magnetic_moments=[]; n_electrons=basis.model.n_electrons)\n\nBuild a superposition of atomic densities (SAD) guess density or a rarndom guess density.\n\nThe guess atomic densities are taken as one of the following depending on the input method:\n\n-RandomDensity(): A random density, normalized to the number of electrons basis.model.n_electrons. Does not support magnetic moments. -ValenceDensityAuto(): A combination of the ValenceDensityGaussian and ValenceDensityPseudo methods where elements whose pseudopotentials provide numeric valence charge density data use them and elements without use Gaussians. -ValenceDensityGaussian(): Gaussians of length specified by atom_decay_length normalized for the correct number of electrons:\n\nhatρ(G) = Z_mathrmvalence expleft(-(2π textlength G)^2right)\n\nValenceDensityPseudo(): Numerical pseudo-atomic valence charge densities from the\n\npseudopotentials. Will fail if one or more elements in the system has a pseudopotential that does not have valence charge density data.\n\nWhen magnetic moments are provided, construct a symmetry-broken density guess. The magnetic moments should be specified in units of μ_B.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.hamiltonian_with_total_potential-Tuple{Hamiltonian, Any}","page":"API reference","title":"DFTK.hamiltonian_with_total_potential","text":"hamiltonian_with_total_potential(\n ham::Hamiltonian,\n V\n) -> Hamiltonian\n\n\nReturns a new Hamiltonian with local potential replaced by the given one\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.hankel-Union{Tuple{T}, Tuple{AbstractVector, AbstractVector, Integer, T}} where T<:Real","page":"API reference","title":"DFTK.hankel","text":"hankel(\n r::AbstractVector,\n r2_f::AbstractVector,\n l::Integer,\n p::Real\n) -> Any\n\n\nhankel(r, r2_f, l, p)\n\nCompute the Hankel transform\n\n Hf = 4pi int_0^infty r f(r) j_l(pr) r dr\n\nThe integration is performed by trapezoidal quadrature, and the function takes as input the radial grid r, the precomputed quantity r²f(r) r2_f, angular momentum / spherical bessel order l, and the Hankel coordinate p.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.has_core_density-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.has_core_density","text":"has_core_density(_::DFTK.Element) -> Any\n\n\nCheck presence of model core charge density (non-linear core correction).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.index_G_vectors-Tuple{Tuple, AbstractVector{<:Integer}}","page":"API reference","title":"DFTK.index_G_vectors","text":"index_G_vectors(\n fft_size::Tuple,\n G::AbstractVector{<:Integer}\n) -> Any\n\n\nReturn the index tuple I such that G_vectors(basis)[I] == G or the index i such that G_vectors(basis, kpoint)[i] == G. Returns nothing if outside the range of valid wave vectors.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Union{Tuple{T}, Tuple{AbstractArray{T, 4}, PlaneWaveBasis, PlaneWaveBasis}} where T","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in::AbstractArray{T, 4},\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> AbstractArray{T, 4} where T\n\n\nInterpolate a density expressed in a basis basis_in to a basis basis_out. This interpolation uses a very basic real-space algorithm, and makes a DWIM-y attempt to take into account the fact that basis_out can be a supercell of basis_in.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Union{Tuple{T}, Tuple{AbstractArray{T, 4}, Tuple{T, T, T} where T, Tuple{T, T, T} where T, Any, Any}} where T","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in::AbstractArray{T, 4},\n grid_in::Tuple{T, T, T} where T,\n grid_out::Tuple{T, T, T} where T,\n lattice_in,\n lattice_out\n) -> AbstractArray{T, 4} where T\n\n\nInterpolate a density in real space from one FFT grid to another, where lattice_in and lattice_out may be supercells of each other.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_density-Union{Tuple{T}, Tuple{AbstractArray{T, 4}, Tuple{T, T, T} where T}} where T","page":"API reference","title":"DFTK.interpolate_density","text":"interpolate_density(\n ρ_in::AbstractArray{T, 4},\n grid_out::Tuple{T, T, T} where T\n) -> AbstractArray{T, 4} where T\n\n\nInterpolate a density in real space from one FFT grid to another. Assumes the lattice is unchanged.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.interpolate_kpoint-Tuple{AbstractVecOrMat, PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.interpolate_kpoint","text":"interpolate_kpoint(\n data_in::AbstractVecOrMat,\n basis_in::PlaneWaveBasis,\n kpoint_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpoint_out::Kpoint\n) -> Any\n\n\nInterpolate some data from one k-point to another. The interpolation is fast, but not necessarily exact. Intended only to construct guesses for iterative solvers.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irfft-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, AbstractArray}} where T","page":"API reference","title":"DFTK.irfft","text":"irfft(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n f_fourier::AbstractArray\n) -> Any\n\n\nPerform a real valued iFFT; see ifft. Note that this function silently drops the imaginary part.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.irreducible_kcoords-Tuple{MonkhorstPack, AbstractVector{<:SymOp}}","page":"API reference","title":"DFTK.irreducible_kcoords","text":"irreducible_kcoords(\n kgrid::MonkhorstPack,\n symmetries::AbstractVector{<:SymOp};\n check_symmetry\n) -> Union{@NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}, kweights::Vector{Float64}}, @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Float64}}, kweights::Vector{Float64}}}\n\n\nConstruct the irreducible wedge given the crystal symmetries. Returns the list of k-point coordinates and the associated weights.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.is_metal-Tuple{Any, Any}","page":"API reference","title":"DFTK.is_metal","text":"is_metal(eigenvalues, εF; tol) -> Bool\n\n\nis_metal(eigenvalues, εF; tol)\n\nDetermine whether the provided bands indicate the material is a metal, i.e. where bands are cut by the Fermi level.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.k_to_equivalent_kpq_permutation-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.k_to_equivalent_kpq_permutation","text":"k_to_equivalent_kpq_permutation(\n basis::PlaneWaveBasis,\n qcoord\n) -> Vector\n\n\nReturn the indices of the kpoints shifted by q. That is for each kpoint of the basis: kpoints[ik].coordinate + q is equivalent to kpoints[indices[ik]].coordinate.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_maximal_spacing-Tuple{Any, Any}","page":"API reference","title":"DFTK.kgrid_from_maximal_spacing","text":"kgrid_from_maximal_spacing(\n lattice,\n spacing;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nBuild a MonkhorstPack grid to ensure kpoints are at most this spacing apart (in inverse Bohrs). A reasonable spacing is 0.13 inverse Bohrs (around 2π * 004 AA^-1).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kgrid_from_minimal_n_kpoints-Tuple{Any, Integer}","page":"API reference","title":"DFTK.kgrid_from_minimal_n_kpoints","text":"kgrid_from_minimal_n_kpoints(\n lattice,\n n_kpoints::Integer;\n kshift\n) -> Union{MonkhorstPack, Vector{Int64}}\n\n\nSelects a MonkhorstPack grid size which ensures that at least a n_kpoints total number of k-points are used. The distribution of k-points amongst coordinate directions is as uniformly as possible, trying to achieve an identical minimal spacing in all directions.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpath_get_kcoords-Union{Tuple{Brillouin.KPaths.KPathInterpolant{D}}, Tuple{D}} where D","page":"API reference","title":"DFTK.kpath_get_kcoords","text":"kpath_get_kcoords(\n kinter::Brillouin.KPaths.KPathInterpolant{D}\n) -> Vector\n\n\nReturn kpoint coordinates in reduced coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kpq_equivalent_blochwave_to_kpq-NTuple{4, Any}","page":"API reference","title":"DFTK.kpq_equivalent_blochwave_to_kpq","text":"kpq_equivalent_blochwave_to_kpq(\n basis,\n kpt,\n q,\n ψk_plus_q_equivalent\n) -> NamedTuple{(:kpt, :ψk), <:Tuple{Kpoint, Any}}\n\n\nCreate the Fourier expansion of ψ_k+q from ψ_k+q, where k+q is in basis.kpoints. while k+q may or may not be inside.\n\nIf ΔG k+q - (k+q), then we have that\n\n _G hatu_k+q(G) e^i(k+q+G)r = _G hatu_k+q(G-ΔG) e^i(k+q+ΔG+G)r\n\nhence\n\n u_k+q(G) = u_k+q(G + ΔG)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.krange_spin-Tuple{PlaneWaveBasis, Integer}","page":"API reference","title":"DFTK.krange_spin","text":"krange_spin(basis::PlaneWaveBasis, spin::Integer) -> Any\n\n\nReturn the index range of k-points that have a particular spin component.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.kwargs_scf_checkpoints-Tuple{DFTK.AbstractBasis}","page":"API reference","title":"DFTK.kwargs_scf_checkpoints","text":"kwargs_scf_checkpoints(\n basis::DFTK.AbstractBasis;\n filename,\n callback,\n diagtolalg,\n ρ,\n ψ,\n save_ψ,\n kwargs...\n) -> NamedTuple{(:callback, :diagtolalg, :ψ, :ρ), <:Tuple{ComposedFunction{ScfDefaultCallback, ScfSaveCheckpoints}, AdaptiveDiagtol, Any, Any}}\n\n\nTransparently handle checkpointing by either returning kwargs for self_consistent_field, which start checkpointing (if no checkpoint file is present) or that continue a checkpointed run (if a checkpoint file can be loaded). filename is the location where the checkpoint is saved, save_ψ determines whether orbitals are saved in the checkpoint as well. The latter is discouraged, since generally slow.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.list_psp","page":"API reference","title":"DFTK.list_psp","text":"list_psp(; ...) -> Any\nlist_psp(element; family, functional, core) -> Any\n\n\nlist_psp(element; functional, family, core)\n\nList the pseudopotential files known to DFTK. Allows various ways to restrict the displayed files.\n\nExamples\n\njulia> list_psp(; family=\"hgh\")\n\nwill list all HGH-type pseudopotentials and\n\njulia> list_psp(; family=\"hgh\", functional=\"lda\")\n\nwill only list those for LDA (also known as Pade in this context) and\n\njulia> list_psp(:O, core=:semicore)\n\nwill list all oxygen semicore pseudopotentials known to DFTK.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.load_psp-Tuple{AbstractString}","page":"API reference","title":"DFTK.load_psp","text":"load_psp(\n key::AbstractString;\n kwargs...\n) -> Union{PspHgh{Float64}, PspUpf{_A, Interpolations.Extrapolation{T, 1, ITPT, IT, Interpolations.Throw{Nothing}}} where {_A, T, ITPT, IT}}\n\n\nLoad a pseudopotential file from the library of pseudopotentials. The file is searched in the directory datadir_psp() and by the key. If the key is a path to a valid file, the extension is used to determine the type of the pseudopotential file format and a respective class is returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.load_scfres","page":"API reference","title":"DFTK.load_scfres","text":"load_scfres(filename::AbstractString; ...) -> Any\nload_scfres(\n filename::AbstractString,\n basis;\n skip_hamiltonian,\n strict\n) -> Any\n\n\nLoad back an scfres, which has previously been stored with save_scfres. Note the warning in save_scfres.\n\nIf basis is nothing, the basis is also loaded and reconstructed from the file, in which case architecture=CPU(). If a basis is passed, this one is used, which can be used to continue computation on a slightly different model or to avoid the cost of rebuilding the basis. If the stored basis and the passed basis are inconsistent (e.g. different FFT size, Ecut, k-points etc.) the load_scfres will error out.\n\nBy default the energies and ham (Hamiltonian object) are recomputed. To avoid this, set skip_hamiltonian=true. On errors the routine exits unless strict=false in which case it tries to recover from the file as much data as it can, but then the resulting scfres might not be fully consistent.\n\nwarning: No compatibility guarantees\nNo guarantees are made with respect to this function at this point. It may change incompatibly between DFTK versions (including patch versions) or stop working / be removed in the future.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.model_DFT-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}, Xc}","page":"API reference","title":"DFTK.model_DFT","text":"model_DFT(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector},\n xc::Xc;\n extra_terms,\n kwargs...\n) -> Model\n\n\nBuild a DFT model from the specified atoms, with the specified functionals.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_LDA-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_LDA","text":"model_LDA(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an LDA model (Perdew & Wang parametrization) from the specified atoms. https://doi.org/10.1103/PhysRevB.45.13244\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_PBE-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_PBE","text":"model_PBE(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild an PBE-GGA model from the specified atoms. https://doi.org/10.1103/PhysRevLett.77.3865\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_SCAN-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_SCAN","text":"model_SCAN(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n kwargs...\n) -> Model\n\n\nBuild a SCAN meta-GGA model from the specified atoms. https://doi.org/10.1103/PhysRevLett.115.036402\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.model_atomic-Tuple{AbstractMatrix, Vector{<:DFTK.Element}, Vector{<:AbstractVector}}","page":"API reference","title":"DFTK.model_atomic","text":"model_atomic(\n lattice::AbstractMatrix,\n atoms::Vector{<:DFTK.Element},\n positions::Vector{<:AbstractVector};\n extra_terms,\n kinetic_blowup,\n kwargs...\n) -> Model\n\n\nConvenience constructor, which builds a standard atomic (kinetic + atomic potential) model. Use extra_terms to add additional terms.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.mpi_nprocs","page":"API reference","title":"DFTK.mpi_nprocs","text":"mpi_nprocs() -> Int64\nmpi_nprocs(comm) -> Int64\n\n\nNumber of processors used in MPI. Can be called without ensuring initialization.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.multiply_ψ_by_blochwave-Tuple{PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.multiply_ψ_by_blochwave","text":"multiply_ψ_by_blochwave(\n basis::PlaneWaveBasis,\n ψ,\n f_real,\n q\n) -> Any\n\n\nmultiply_ψ_by_blochwave(basis::PlaneWaveBasis, ψ, f_real, q)\n\nReturn the Fourier coefficients for the Bloch waves f^rm real_q ψ_k-q in an element of basis.kpoints equivalent to k-q.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_core-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_core","text":"n_elec_core(el::DFTK.Element) -> Any\n\n\nReturn the number of core electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_elec_valence-Tuple{DFTK.Element}","page":"API reference","title":"DFTK.n_elec_valence","text":"n_elec_valence(el::DFTK.Element) -> Any\n\n\nReturn the number of valence electrons\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.n_electrons_from_atoms-Tuple{Any}","page":"API reference","title":"DFTK.n_electrons_from_atoms","text":"n_electrons_from_atoms(atoms) -> Any\n\n\nNumber of valence electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.newton-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.newton","text":"newton(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ0;\n tol,\n tol_cg,\n maxiter,\n callback,\n is_converged\n) -> NamedTuple{(:ham, :basis, :energies, :converged, :ρ, :eigenvalues, :occupation, :εF, :n_iter, :ψ, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis, Energies, Any, AbstractArray{_A, 4} where _A, Vector{Any}, Vector, Nothing, Int64, Any, Symbol, String, UInt64}}\n\n\nnewton(basis::PlaneWaveBasis{T}, ψ0;\n tol=1e-6, tol_cg=tol / 100, maxiter=20, callback=ScfDefaultCallback(),\n is_converged=ScfConvergenceDensity(tol))\n\nNewton algorithm. Be careful that the starting point needs to be not too far from the solution.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_compatible_fft_size-Tuple{Int64}","page":"API reference","title":"DFTK.next_compatible_fft_size","text":"next_compatible_fft_size(\n size::Int64;\n smallprimes,\n factors\n) -> Int64\n\n\nFind the next compatible FFT size Sizes must (a) be a product of small primes only and (b) contain the factors. If smallprimes is empty (a) is skipped.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.next_density","page":"API reference","title":"DFTK.next_density","text":"next_density(\n ham::Hamiltonian;\n ...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Float64}}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm;\n ...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}\nnext_density(\n ham::Hamiltonian,\n nbandsalg::DFTK.NbandsAlgorithm,\n fermialg::AbstractFermiAlgorithm;\n eigensolver,\n ψ,\n eigenvalues,\n occupation,\n kwargs...\n) -> NamedTuple{(:ψ, :eigenvalues, :occupation, :εF, :ρout, :diagonalization, :n_bands_converge, :occupation_threshold), <:Tuple{Vector, Vector, Vector, Number, AbstractArray{_A, 4} where _A, NamedTuple{(:λ, :X, :residual_norms, :n_iter, :converged, :n_matvec), <:Tuple{Vector, Vector, Vector, Vector, Union{Missing, Bool}, Any}}, Int64, Any}}\n\n\nObtain new density ρ by diagonalizing ham. Follows the policy imposed by the bands data structure to determine and adjust the number of bands to be computed.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.norm2-Tuple{Any}","page":"API reference","title":"DFTK.norm2","text":"norm2(G) -> Any\n\n\nSquare of the ℓ²-norm.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.norm_cplx-Tuple{Any}","page":"API reference","title":"DFTK.norm_cplx","text":"norm_cplx(x) -> Any\n\n\nComplex-analytic extension of LinearAlgebra.norm(x) from real to complex inputs. Needed for phonons as we want to perform a matrix-vector product f'(x)·h, where f is a real-to-real function and h a complex vector. To do this using automatic differentiation, we can extend analytically f to accept complex inputs, then differentiate t -> f(x+t·h). This will fail if non-analytic functions like norm are used for complex inputs, and therefore we have to redefine it.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.normalize_kpoint_coordinate-Tuple{Real}","page":"API reference","title":"DFTK.normalize_kpoint_coordinate","text":"normalize_kpoint_coordinate(x::Real) -> Any\n\n\nBring k-point coordinates into the range [-0.5, 0.5)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.overlap_Mmn_k_kpb-Tuple{PlaneWaveBasis, Vararg{Any, 5}}","page":"API reference","title":"DFTK.overlap_Mmn_k_kpb","text":"overlap_Mmn_k_kpb(\n basis::PlaneWaveBasis,\n ψ,\n ik,\n ik_plus_b,\n G_shift,\n n_bands\n) -> Any\n\n\nComputes the matrix M^kb_mn = langle u_mk u_nk+b rangle for given k.\n\nG_shift is the \"shifting\" vector, correction due to the periodicity conditions imposed on k to ψ_k. It is non zero if k_plus_b is taken in another unit cell of the reciprocal lattice. We use here that: u_n(k + G_rm shift)(r) = e^-i*langle G_rm shiftr rangle u_nk.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.pcut_psp_local-Union{Tuple{PspHgh{T}}, Tuple{T}} where T","page":"API reference","title":"DFTK.pcut_psp_local","text":"pcut_psp_local(psp::PspHgh{T}) -> Any\n\n\nEstimate an upper bound for the argument p after which abs(eval_psp_local_fourier(psp, p)) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.pcut_psp_projector-Union{Tuple{T}, Tuple{PspHgh{T}, Any, Any}} where T","page":"API reference","title":"DFTK.pcut_psp_projector","text":"pcut_psp_projector(psp::PspHgh{T}, i, l) -> Any\n\n\nEstimate an upper bound for the argument p after which eval_psp_projector_fourier(psp, p) is a strictly decreasing function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.phonon_modes-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any}} where T","page":"API reference","title":"DFTK.phonon_modes","text":"phonon_modes(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n dynmat\n) -> NamedTuple{(:frequencies, :vectors), <:Tuple{Any, Any}}\n\n\nSolve the eigenproblem for a dynamical matrix: returns the frequencies and eigenvectors (vectors).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.plot_bandstructure","page":"API reference","title":"DFTK.plot_bandstructure","text":"Compute and plot the band structure. Kwargs are like in compute_bands. Requires Plots.jl to be loaded to be defined and working properly. The unit used to plot the bands can be selected using the unit parameter. Like in the rest of DFTK Hartree is used by default. Another standard choices is unit=u\"eV\" (electron volts).\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.plot_dos","page":"API reference","title":"DFTK.plot_dos","text":"Plot the density of states over a reasonable range. Requires to load Plots.jl beforehand.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_local_polynomial","page":"API reference","title":"DFTK.psp_local_polynomial","text":"psp_local_polynomial(T, psp::PspHgh) -> Any\npsp_local_polynomial(T, psp::PspHgh, t) -> Any\n\n\nThe local potential of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) (t^2 exp(t^2 2)) where t = r_textloc p and Q is a polynomial of at most degree 8. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.psp_projector_polynomial","page":"API reference","title":"DFTK.psp_projector_polynomial","text":"psp_projector_polynomial(T, psp::PspHgh, i, l) -> Any\npsp_projector_polynomial(T, psp::PspHgh, i, l, t) -> Any\n\n\nThe nonlocal projectors of a HGH pseudopotentials in reciprocal space can be brought to the form Q(t) exp(-t^2 2) where t = r_l p and Q is a polynomial. This function returns Q.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.r_vectors-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors","text":"r_vectors(\n basis::PlaneWaveBasis\n) -> AbstractArray{StaticArraysCore.SVector{3, VT}, 3} where VT<:Real\n\n\nr_vectors(basis::PlaneWaveBasis)\n\nThe list of r vectors, in reduced coordinates. By convention, this is in [0,1)^3.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.r_vectors_cart-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.r_vectors_cart","text":"r_vectors_cart(basis::PlaneWaveBasis) -> Any\n\n\nr_vectors_cart(basis::PlaneWaveBasis)\n\nThe list of r vectors, in cartesian coordinates.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.radial_hydrogenic-Union{Tuple{T}, Tuple{AbstractVector{T}, Integer}, Tuple{AbstractVector{T}, Integer, Real}} where T<:Real","page":"API reference","title":"DFTK.radial_hydrogenic","text":"radial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer\n) -> Any\nradial_hydrogenic(\n r::AbstractArray{T<:Real, 1},\n n::Integer,\n α::Real\n) -> Any\n\n\nRadial functions from solutions of Hydrogenic Schrödinger equation. Same as Wannier90 user guide Table 3.3.\n\nArguments\n\nr: radial grid\nn: principal quantum number\nα: diffusivity, fracZa where Z is the atomic number and a is the Bohr radius.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.random_density-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Integer}} where T","page":"API reference","title":"DFTK.random_density","text":"random_density(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n n_electrons::Integer\n) -> Any\n\n\nBuild a random charge density normalized to the provided number of electrons.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.read_w90_nnkp-Tuple{String}","page":"API reference","title":"DFTK.read_w90_nnkp","text":"read_w90_nnkp(\n fileprefix::String\n) -> @NamedTuple{nntot::Int64, nnkpts::Vector{@NamedTuple{ik::Int64, ik_plus_b::Int64, G_shift::Vector{Int64}}}}\n\n\nRead the .nnkp file provided by the preprocessing routine of Wannier90 (i.e. \"wannier90.x -pp prefix\") Returns:\n\nthe array 'nnkpts' of k points, their respective nearest neighbors and associated shifing vectors (non zero if the neighbor is located in another cell).\nthe number 'nntot' of neighbors per k point.\n\nTODO: add the possibility to exclude bands\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.reducible_kcoords-Tuple{MonkhorstPack}","page":"API reference","title":"DFTK.reducible_kcoords","text":"reducible_kcoords(\n kgrid::MonkhorstPack\n) -> @NamedTuple{kcoords::Vector{StaticArraysCore.SVector{3, Rational{Int64}}}}\n\n\nConstruct the coordinates of the k-points in a (shifted) Monkhorst-Pack grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.run_wannier90","page":"API reference","title":"DFTK.run_wannier90","text":"Wannerize the obtained bands using wannier90. By default all converged bands from the scfres are employed (change with n_bands kwargs) and n_wannier = n_bands wannier functions are computed. Random Gaussians are used as guesses by default, can be changed using the projections kwarg. All keyword arguments supported by Wannier90 for the disentanglement may be added as keyword arguments. The function returns the fileprefix.\n\nwarning: Experimental feature\nCurrently this is an experimental feature, which has not yet been tested to full depth. The interface is considered unstable and may change incompatibly in the future. Use at your own risk and please report bugs in case you encounter any.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.save_bands-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_bands","text":"save_bands(\n filename::AbstractString,\n band_data::NamedTuple;\n save_ψ\n)\n\n\nWrite the computed bands to a file. On all processes, but the master one the filename is ignored. save_ψ determines whether the wavefunction is also saved or not. Note that this function can be both used on the results of compute_bands and self_consistent_field.\n\nwarning: Changes to data format reserved\nNo guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.save_scfres-Tuple{AbstractString, NamedTuple}","page":"API reference","title":"DFTK.save_scfres","text":"save_scfres(\n filename::AbstractString,\n scfres::NamedTuple;\n save_ψ,\n extra_data,\n compress,\n save_ρ\n) -> Any\n\n\nSave an scfres obtained from self_consistent_field to a file. On all processes but the master one the filename is ignored. The format is determined from the file extension. Currently the following file extensions are recognized and supported:\n\njld2: A JLD2 file. Stores the complete state and can be used (with load_scfres) to restart an SCF from a checkpoint or post-process an SCF solution. Note that this file is also a valid HDF5 file, which can thus similarly be read by external non-Julia libraries such as h5py or similar. See Saving SCF results on disk and SCF checkpoints for details.\nvts: A VTK file for visualisation e.g. in paraview. Stores the density, spin density, optionally bands and some metadata.\njson: A JSON file with basic information about the SCF run. Stores for example the number of iterations, occupations, some information about the basis, eigenvalues, Fermi level etc.\n\nKeyword arguments:\n\nsave_ψ: Save the orbitals as well (may lead to larger files). This is the default for jld2, but false for all other formats, where this is considerably more expensive.\nsave_ρ: Save the density as well (may lead to larger files). This is the default for all but json.\nextra_data: Additional data to place into the file. The data is just copied like fp[\"key\"] = value, where fp is a JLD2.JLDFile, WriteVTK.vtk_grid and so on.\ncompress: Apply compression to array data. Requires the CodecZlib package to be available.\n\nwarning: Changes to data format reserved\nNo guarantees are made with respect to the format of the keys at this point. We may change this incompatibly between DFTK versions (including patch versions). In particular changes with respect to the ψ structure are planned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scatter_kpts_block-Tuple{PlaneWaveBasis, Union{Nothing, AbstractArray}}","page":"API reference","title":"DFTK.scatter_kpts_block","text":"scatter_kpts_block(\n basis::PlaneWaveBasis,\n data::Union{Nothing, AbstractArray}\n) -> Any\n\n\nScatter the data of a quantity depending on k-Points from the master process to the child processes and return it as a Vector{Array}, where the outer vector is a list over all k-points. On non-master processes nothing may be passed.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_anderson_solver","page":"API reference","title":"DFTK.scf_anderson_solver","text":"scf_anderson_solver(\n;\n ...\n) -> DFTK.var\"#anderson#695\"{DFTK.var\"#anderson#694#696\"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, Int64}}\nscf_anderson_solver(\n m;\n kwargs...\n) -> DFTK.var\"#anderson#695\"{DFTK.var\"#anderson#694#696\"{Base.Pairs{Symbol, Union{}, Tuple{}, @NamedTuple{}}, _A}} where _A\n\n\nCreate a simple anderson-accelerated SCF solver. m specifies the number of steps to keep the history of.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scf_damping_quadratic_model-Tuple{Any, Any}","page":"API reference","title":"DFTK.scf_damping_quadratic_model","text":"scf_damping_quadratic_model(\n info,\n info_next;\n modeltol\n) -> NamedTuple{(:α, :relerror), <:Tuple{Any, Any}}\n\n\nUse the two iteration states info and info_next to find a damping value from a quadratic model for the SCF energy. Returns nothing if the constructed model is not considered trustworthy, else returns the suggested damping.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.scf_damping_solver","page":"API reference","title":"DFTK.scf_damping_solver","text":"scf_damping_solver(\n\n) -> DFTK.var\"#fp_solver#691\"{DFTK.var\"#fp_solver#690#692\"}\nscf_damping_solver(\n β\n) -> DFTK.var\"#fp_solver#691\"{DFTK.var\"#fp_solver#690#692\"}\n\n\nCreate a damped SCF solver updating the density as x = β * x_new + (1 - β) * x\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.scfres_to_dict-Tuple{NamedTuple}","page":"API reference","title":"DFTK.scfres_to_dict","text":"scfres_to_dict(\n scfres::NamedTuple;\n kwargs...\n) -> Dict{String, Any}\n\n\nConvert an scfres to a dictionary representation. Intended to give a condensed set of results and useful metadata for post processing. See also the todict function for the Model and the PlaneWaveBasis as well as the band_data_to_dict functions, which are called by this function and their outputs merged. Only the master process returns meaningful data.\n\nSome details on the conventions for the returned data:\n\nρ: (fftsize[1], fftsize[2], fftsize[3], nspin) array of density on real-space grid.\nenergies: Dictionary / subdirectory containing the energy terms\nconverged: Has the SCF reached convergence\nnorm_Δρ: Most recent change in ρ during an SCF step\noccupation_threshold: Threshold below which orbitals are considered unoccupied\nnbandsconverge: Number of bands that have been fully converged numerically.\nn_iter: Number of iterations.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.select_eigenpairs_all_kblocks-Tuple{Any, Any}","page":"API reference","title":"DFTK.select_eigenpairs_all_kblocks","text":"select_eigenpairs_all_kblocks(eigres, range) -> NamedTuple\n\n\nFunction to select a subset of eigenpairs on each k-Point. Works on the Tuple returned by diagonalize_all_kblocks.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.self_consistent_field-Union{Tuple{PlaneWaveBasis{T, VT} where VT<:Real}, Tuple{T}} where T","page":"API reference","title":"DFTK.self_consistent_field","text":"self_consistent_field(\n basis::PlaneWaveBasis{T, VT} where VT<:Real;\n ρ,\n ψ,\n tol,\n is_converged,\n maxiter,\n mixing,\n damping,\n solver,\n eigensolver,\n diagtolalg,\n nbandsalg,\n fermialg,\n callback,\n compute_consistent_energies,\n response\n) -> NamedTuple{(:ham, :basis, :energies, :ρ, :eigenvalues, :occupation, :εF, :ψ, :response, :converged, :occupation_threshold, :α, :n_iter, :n_bands_converge, :diagonalization, :stage, :algorithm, :runtime_ns), <:Tuple{Hamiltonian, PlaneWaveBasis{T, VT} where {T<:ForwardDiff.Dual, VT<:Real}, Energies, Vararg{Any, 15}}}\n\n\nself_consistent_field(basis; [tol, mixing, damping, ρ, ψ])\n\nSolve the Kohn-Sham equations with a density-based SCF algorithm using damped, preconditioned iterations where ρ_textnext = α P^-1 (ρ_textout - ρ_textin).\n\nOverview of parameters:\n\nρ: Initial density\nψ: Initial orbitals\ntol: Tolerance for the density change (ρ_textout - ρ_textin) to flag convergence. Default is 1e-6.\nis_converged: Convergence control callback. Typical objects passed here are ScfConvergenceDensity(tol) (the default), ScfConvergenceEnergy(tol) or ScfConvergenceForce(tol).\nmaxiter: Maximal number of SCF iterations\nmixing: Mixing method, which determines the preconditioner P^-1 in the above equation. Typical mixings are LdosMixing, KerkerMixing, SimpleMixing or DielectricMixing. Default is LdosMixing()\ndamping: Damping parameter α in the above equation. Default is 0.8.\nnbandsalg: By default DFTK uses nbandsalg=AdaptiveBands(model), which adaptively determines the number of bands to compute. If you want to influence this algorithm or use a predefined number of bands in each SCF step, pass a FixedBands or AdaptiveBands. Beware that with non-zero temperature, the convergence of the SCF algorithm may be limited by the default_occupation_threshold() parameter. For highly accurate calculations we thus recommend increasing the occupation_threshold of the AdaptiveBands.\ncallback: Function called at each SCF iteration. Usually takes care of printing the intermediate state.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.simpson","page":"API reference","title":"DFTK.simpson","text":"simpson(x, y)\n\nIntegrate y(x) over x using Simpson's method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.sin2pi-Tuple{Any}","page":"API reference","title":"DFTK.sin2pi","text":"sin2pi(x) -> Any\n\n\nFunction to compute sin(2π x)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK-Union{Tuple{T}, Tuple{PlaneWaveBasis{T, VT} where VT<:Real, Any, Any, Any}} where T","page":"API reference","title":"DFTK.solve_ΩplusK","text":"solve_ΩplusK(\n basis::PlaneWaveBasis{T, VT} where VT<:Real,\n ψ,\n rhs,\n occupation;\n callback,\n tol\n) -> NamedTuple{(:δψ, :converged, :tol, :residual_norm, :n_iter), <:Tuple{Any, Bool, Float64, Any, Int64}}\n\n\nsolve_ΩplusK(basis::PlaneWaveBasis{T}, ψ, res, occupation;\n tol=1e-10, verbose=false) where {T}\n\nReturn δψ where (Ω+K) δψ = rhs\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.solve_ΩplusK_split-Union{Tuple{T}, Tuple{Hamiltonian, AbstractArray{T}, Vararg{Any, 5}}} where T","page":"API reference","title":"DFTK.solve_ΩplusK_split","text":"solve_ΩplusK_split(\n ham::Hamiltonian,\n ρ::AbstractArray{T},\n ψ,\n occupation,\n εF,\n eigenvalues,\n rhs;\n tol,\n tol_sternheimer,\n verbose,\n occupation_threshold,\n q,\n kwargs...\n)\n\n\nSolve the problem (Ω+K) δψ = rhs using a split algorithm, where rhs is typically -δHextψ (the negative matvec of an external perturbation with the SCF orbitals ψ) and δψ is the corresponding total variation in the orbitals ψ. Additionally returns: - δρ: Total variation in density) - δHψ: Total variation in Hamiltonian applied to orbitals - δeigenvalues: Total variation in eigenvalues - δVind: Change in potential induced by δρ (the term needed on top of δHextψ to get δHψ).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spglib_standardize_cell-Union{Tuple{T}, Tuple{AbstractArray{T}, Any, Any}, Tuple{AbstractArray{T}, Any, Any, Any}} where T","page":"API reference","title":"DFTK.spglib_standardize_cell","text":"spglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions;\n ...\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\nspglib_standardize_cell(\n lattice::AbstractArray{T},\n atom_groups,\n positions,\n magnetic_moments;\n correct_symmetry,\n primitive,\n tol_symmetry\n) -> NamedTuple{(:lattice, :atom_groups, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\n\n\nReturns crystallographic conventional cell according to the International Table of Crystallography Vol A (ITA) in case primitive=false. If primitive=true the primitive lattice is returned in the convention of the reference work of Cracknell, Davies, Miller, and Love (CDML). Of note this has minor differences to the primitive setting choice made in the ITA.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.sphericalbesselj_fast-Union{Tuple{T}, Tuple{Integer, T}} where T","page":"API reference","title":"DFTK.sphericalbesselj_fast","text":"sphericalbesselj_fast(l::Integer, x) -> Any\n\n\nsphericalbesselj_fast(l::Integer, x::Number)\n\nReturns the spherical Bessel function of the first kind jl(x). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Besselfunction#SphericalBesselfunctions) and with SpecialFunctions.sphericalbesselj. Specialized for integer 0 <= l <= 5.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.spin_components-Tuple{Symbol}","page":"API reference","title":"DFTK.spin_components","text":"spin_components(\n spin_polarization::Symbol\n) -> Union{Bool, Tuple{Symbol}, Tuple{Symbol, Symbol}}\n\n\nExplicit spin components of the KS orbitals and the density\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.split_evenly-Tuple{Any, Any}","page":"API reference","title":"DFTK.split_evenly","text":"split_evenly(itr, N) -> Any\n\n\nSplit an iterable evenly into N chunks, which will be returned.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.standardize_atoms","page":"API reference","title":"DFTK.standardize_atoms","text":"standardize_atoms(\n lattice,\n atoms,\n positions;\n ...\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\nstandardize_atoms(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n kwargs...\n) -> NamedTuple{(:lattice, :atoms, :positions, :magnetic_moments), <:Tuple{Matrix, Any, Any, Vector{StaticArraysCore.SVector{3, Float64}}}}\n\n\nApply various standardisations to a lattice and a list of atoms. It uses spglib to detect symmetries (within tol_symmetry), then cleans up the lattice according to the symmetries (unless correct_symmetry is false) and returns the resulting standard lattice and atoms. If primitive is true (default) the primitive unit cell is returned, else the conventional unit cell is returned.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetries_preserving_kgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_kgrid","text":"symmetries_preserving_kgrid(symmetries, kcoords) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete BZ grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetries_preserving_rgrid-Tuple{Any, Any}","page":"API reference","title":"DFTK.symmetries_preserving_rgrid","text":"symmetries_preserving_rgrid(symmetries, fft_size) -> Any\n\n\nFilter out the symmetry operations that don't respect the symmetries of the discrete real-space grid\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_forces-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_forces","text":"symmetrize_forces(model::Model, forces; symmetries)\n\n\nSymmetrize the forces in reduced coordinates, forces given as an array forces[iel][α,i].\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_stresses-Tuple{Model, Any}","page":"API reference","title":"DFTK.symmetrize_stresses","text":"symmetrize_stresses(model::Model, stresses; symmetries)\n\n\nSymmetrize the stress tensor, given as a Matrix in cartesian coordinates\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetrize_ρ-Union{Tuple{T}, Tuple{Any, AbstractArray{T}}} where T","page":"API reference","title":"DFTK.symmetrize_ρ","text":"symmetrize_ρ(\n basis,\n ρ::AbstractArray{T};\n symmetries,\n do_lowpass\n) -> Any\n\n\nSymmetrize a density by applying all the basis (by default) symmetries and forming the average.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.symmetry_operations","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n lattice,\n atoms,\n positions;\n ...\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\nsymmetry_operations(\n lattice,\n atoms,\n positions,\n magnetic_moments;\n tol_symmetry,\n check_symmetry\n) -> Union{Vector{SymOp{Bool}}, Vector{SymOp{Float64}}}\n\n\nReturn the symmetries given an atomic structure with optionally designated magnetic moments on each of the atoms. The symmetries are determined using spglib.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.symmetry_operations-Tuple{Integer}","page":"API reference","title":"DFTK.symmetry_operations","text":"symmetry_operations(\n hall_number::Integer\n) -> Vector{SymOp{Float64}}\n\n\nReturn the Symmetry operations given a hall_number.\n\nThis function allows to directly access to the space group operations in the spglib database. To specify the space group type with a specific choice, hall_number is used.\n\nThe definition of hall_number is found at Space group type.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.synchronize_device-Tuple{DFTK.AbstractArchitecture}","page":"API reference","title":"DFTK.synchronize_device","text":"synchronize_device(_::DFTK.AbstractArchitecture)\n\n\nSynchronize data and finish all operations on the execution stream of the device. This needs to be called explicitly before a task finishes (e.g. in an @spawn block).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_cpu-Tuple{AbstractArray}","page":"API reference","title":"DFTK.to_cpu","text":"to_cpu(x::AbstractArray) -> Array\n\n\nTransfer an array from a device (typically a GPU) to the CPU.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.to_device-Tuple{DFTK.CPU, Any}","page":"API reference","title":"DFTK.to_device","text":"to_device(_::DFTK.CPU, x) -> Any\n\n\nTransfer an array to a particular device (typically a GPU)\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Energies}","page":"API reference","title":"DFTK.todict","text":"todict(energies::Energies) -> Dict\n\n\nConvert an Energies struct to a dictionary representation\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{Model}","page":"API reference","title":"DFTK.todict","text":"todict(model::Model) -> Dict{String, Any}\n\n\nConvert a Model struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.).\n\nSome details on the conventions for the returned data:\n\nlattice, recip_lattice: Always a zero-padded 3x3 matrix, independent on the actual dimension\natomicpositions, atomicpositions_cart: Atom positions in fractional or cartesian coordinates, respectively.\natomic_symbols: Atomic symbols if known.\nterms: Some rough information on the terms used for the computation.\nn_electrons: Number of electrons, may be missing if εF is fixed instead\nεF: Fixed Fermi level to use, may be missing if n_electronis is specified instead.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.todict-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.todict","text":"todict(basis::PlaneWaveBasis) -> Dict{String, Any}\n\n\nConvert a PlaneWaveBasis struct to a dictionary representation. Intended to give a condensed set of useful metadata to post-processing scripts or for storing computational results (e.g. bands, bloch waves etc.). As such the function is lossy and might not keep all data consistently. Returns the same result on all MPI processors. See also the todict function for the Model, which is called from this one to merge the data of both outputs.\n\nSome details on the conventions for the returned data:\n\ndvol: Volume element for real-space integration\nvariational: Is the k-point specific basis (for ψ) variationally consistent with the basis for ρ.\nkweights: Weights for the k-points, summing to 1.0\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.total_local_potential-Tuple{Hamiltonian}","page":"API reference","title":"DFTK.total_local_potential","text":"total_local_potential(ham::Hamiltonian) -> Any\n\n\nGet the total local potential of the given Hamiltonian, in real space in the spin components.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave-Tuple{Any, PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.transfer_blochwave","text":"transfer_blochwave(\n ψ_in,\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Vector\n\n\nTransfer Bloch wave between two basis sets. Limited feature set.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Tuple{Any, PlaneWaveBasis, Any, Any, Any}","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis::PlaneWaveBasis,\n kpt_in,\n kpt_out,\n ΔG\n) -> Any\n\n\nTransfer an array ψk_in expanded on kpt_in, and produce ψ(r) e^i ΔGr expanded on kpt_out. It is mostly useful for phonons. Beware: ψk_out can lose information if the shift ΔG is large or if the G_vectors differ between k-points.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_blochwave_kpt-Tuple{Any, PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.transfer_blochwave_kpt","text":"transfer_blochwave_kpt(\n ψk_in,\n basis_in::PlaneWaveBasis,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpt_out::Kpoint\n) -> Any\n\n\nTransfer an array ψk defined on basisin k-point kptin to basisout k-point kptout.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_density-Union{Tuple{T}, Tuple{Any, PlaneWaveBasis{T, VT} where VT<:Real, PlaneWaveBasis{T, VT} where VT<:Real}} where T","page":"API reference","title":"DFTK.transfer_density","text":"transfer_density(\n ρ_in,\n basis_in::PlaneWaveBasis{T, VT} where VT<:Real,\n basis_out::PlaneWaveBasis{T, VT} where VT<:Real\n) -> Any\n\n\nTransfer density (in real space) between two basis sets.\n\nThis function is fast by transferring only the Fourier coefficients from the small basis to the big basis.\n\nNote that this implies that for even-sized small FFT grids doing the transfer small -> big -> small is not an identity (as the small basis has an unmatched Fourier component and the identity c_G = c_-G^ast does not fully hold).\n\nNote further that for the direction big -> small employing this function does not give the same answer as using first transfer_blochwave and then compute_density.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Tuple{PlaneWaveBasis, Kpoint, PlaneWaveBasis, Kpoint}","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis,\n kpt_in::Kpoint,\n basis_out::PlaneWaveBasis,\n kpt_out::Kpoint\n) -> Tuple{Any, Any}\n\n\nCompute the index mapping between two bases. Returns two arrays idcs_in and idcs_out such that ψkout[idcs_out] = ψkin[idcs_in] does the transfer from ψkin (defined on basis_in and kpt_in) to ψkout (defined on basis_out and kpt_out).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.transfer_mapping-Tuple{PlaneWaveBasis, PlaneWaveBasis}","page":"API reference","title":"DFTK.transfer_mapping","text":"transfer_mapping(\n basis_in::PlaneWaveBasis,\n basis_out::PlaneWaveBasis\n) -> Base.Iterators.Zip{Tuple{Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}, Array{CartesianIndices{3, Tuple{UnitRange{Int64}, UnitRange{Int64}, UnitRange{Int64}}}, 3}}}\n\n\nCompute the index mapping between the global grids of two bases. Returns an iterator of 8 pairs (block_in, block_out). Iterated over these pairs x_out_fourier[block_out, :] = x_in_fourier[block_in, :] does the transfer from the Fourier coefficients x_in_fourier (defined on basis_in) to x_out_fourier (defined on basis_out, equally provided as Fourier coefficients).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.trapezoidal","page":"API reference","title":"DFTK.trapezoidal","text":"trapezoidal(x, y)\n\nIntegrate y(x) over x using trapezoidal method quadrature.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.unfold_bz-Tuple{PlaneWaveBasis}","page":"API reference","title":"DFTK.unfold_bz","text":"unfold_bz(basis::PlaneWaveBasis) -> PlaneWaveBasis\n\n\n\" Convert a basis into one that doesn't use BZ symmetry. This is mainly useful for debug purposes (e.g. in cases we don't want to bother thinking about symmetries).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.versioninfo","page":"API reference","title":"DFTK.versioninfo","text":"versioninfo()\nversioninfo(io::IO)\n\n\nDFTK.versioninfo([io::IO=stdout])\n\nSummary of version and configuration of DFTK and its key dependencies.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.weighted_ksum-Tuple{PlaneWaveBasis, Any}","page":"API reference","title":"DFTK.weighted_ksum","text":"weighted_ksum(basis::PlaneWaveBasis, array) -> Any\n\n\nSum an array over kpoints, taking weights into account\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_eig-Tuple{String, Any}","page":"API reference","title":"DFTK.write_w90_eig","text":"write_w90_eig(fileprefix::String, eigenvalues; n_bands)\n\n\nWrite the eigenvalues in a format readable by Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_w90_win-Tuple{String, PlaneWaveBasis}","page":"API reference","title":"DFTK.write_w90_win","text":"write_w90_win(\n fileprefix::String,\n basis::PlaneWaveBasis;\n bands_plot,\n wannier_plot,\n kwargs...\n)\n\n\nWrite a win file at the indicated prefix. Parameters to Wannier90 can be added as kwargs: e.g. num_iter=500.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.write_wannier90_files-Tuple{Any, Any}","page":"API reference","title":"DFTK.write_wannier90_files","text":"write_wannier90_files(\n preprocess_call,\n scfres;\n n_bands,\n n_wannier,\n projections,\n fileprefix,\n wannier_plot,\n kwargs...\n)\n\n\nShared file writing code for Wannier.jl and Wannier90.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.ylm_real-Union{Tuple{T}, Tuple{Integer, Integer, AbstractVector{T}}} where T","page":"API reference","title":"DFTK.ylm_real","text":"ylm_real(\n l::Integer,\n m::Integer,\n rvec::AbstractArray{T, 1}\n) -> Any\n\n\nReturns the (l,m) real spherical harmonic Ylm(r). Consistent with [wikipedia](https://en.wikipedia.org/wiki/Tableofsphericalharmonics#Realsphericalharmonics).\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.zeros_like","page":"API reference","title":"DFTK.zeros_like","text":"zeros_like(X::AbstractArray) -> Any\nzeros_like(\n X::AbstractArray,\n T::Type,\n dims::Integer...\n) -> Any\n\n\nCreate an array of same \"array type\" as X filled with zeros, minimizing the number of allocations. This unifies CPU and GPU code, as the output will always be on the same device as the input.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.@timing-Tuple","page":"API reference","title":"DFTK.@timing","text":"Shortened version of the @timeit macro from TimerOutputs, which writes to the DFTK timer.\n\n\n\n\n\n","category":"macro"},{"location":"api/#DFTK.Smearing.A-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.A","text":"A term in the Hermite delta expansion\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.H-Tuple{Any, Any}","page":"API reference","title":"DFTK.Smearing.H","text":"Standard Hermite function using physicist's convention.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.entropy-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.entropy","text":"Entropy. Note that this is a function of the energy x, not of occupation(x). This function satisfies s' = x f' (see https://www.vasp.at/vasp-workshop/k-points.pdf p. 12 and https://arxiv.org/pdf/1805.07144.pdf p. 18.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation","page":"API reference","title":"DFTK.Smearing.occupation","text":"occupation(S::SmearingFunction, x)\n\nOccupation at x, where in practice x = (ε - εF) / temperature. If temperature is zero, (ε-εF)/temperature = ±∞. The occupation function is required to give 1 and 0 respectively in these cases.\n\n\n\n\n\n","category":"function"},{"location":"api/#DFTK.Smearing.occupation_derivative-Tuple{DFTK.Smearing.SmearingFunction, Any}","page":"API reference","title":"DFTK.Smearing.occupation_derivative","text":"Derivative of the occupation function, approximation to minus the delta function.\n\n\n\n\n\n","category":"method"},{"location":"api/#DFTK.Smearing.occupation_divided_difference-Tuple{DFTK.Smearing.SmearingFunction, Vararg{Any, 4}}","page":"API reference","title":"DFTK.Smearing.occupation_divided_difference","text":"(f(x) - f(y))/(x - y), computed stably in the case where x and y are close\n\n\n\n\n\n","category":"method"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"EditURL = \"../../../examples/supercells.jl\"","category":"page"},{"location":"examples/supercells/#Creating-and-modelling-metallic-supercells","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"section"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"In this section we will be concerned with modelling supercells of aluminium. When dealing with periodic problems there is no unique definition of the lattice: Clearly any duplication of the lattice along an axis is also a valid repetitive unit to describe exactly the same system. This is exactly what a supercell is: An n-fold repetition along one of the axes of the original lattice.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"The following code achieves this for aluminium:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"using DFTK\nusing LinearAlgebra\nusing ASEconvert\n\nfunction aluminium_setup(repeat=1; Ecut=7.0, kgrid=[2, 2, 2])\n a = 7.65339\n lattice = a * Matrix(I, 3, 3)\n Al = ElementPsp(:Al; psp=load_psp(\"hgh/lda/al-q3\"))\n atoms = [Al, Al, Al, Al]\n positions = [[0.0, 0.0, 0.0], [0.0, 0.5, 0.5], [0.5, 0.0, 0.5], [0.5, 0.5, 0.0]]\n unit_cell = periodic_system(lattice, atoms, positions)\n\n # Make supercell in ASE:\n # We convert our lattice to the conventions used in ASE, make the supercell\n # and then convert back ...\n supercell_ase = convert_ase(unit_cell) * pytuple((repeat, 1, 1))\n supercell = pyconvert(AbstractSystem, supercell_ase)\n\n # Unfortunately right now the conversion to ASE drops the pseudopotential information,\n # so we need to reattach it:\n supercell = attach_psp(supercell; Al=\"hgh/lda/al-q3\")\n\n # Construct an LDA model and discretise\n # Note: We disable symmetries explicitly here. Otherwise the problem sizes\n # we are able to run on the CI are too simple to observe the numerical\n # instabilities we want to trigger here.\n model = model_LDA(supercell; temperature=1e-3, symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid)\nend;\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As part of the code we are using a routine inside the ASE, the atomistic simulation environment for creating the supercell and make use of the two-way interoperability of DFTK and ASE. For more details on this aspect see the documentation on Input and output formats.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"Write an example supercell structure to a file to plot it:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"setup = aluminium_setup(5)\nconvert_ase(periodic_system(setup.model)).write(\"al_supercell.png\")","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"As we will see in this notebook the modelling of a system generally becomes harder if the system becomes larger.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"This sounds like a trivial statement as per se the cost per SCF step increases as the system (and thus N) gets larger.\nBut there is more to it: If one is not careful also the number of SCF iterations increases as the system gets larger.\nThe aim of a proper computational treatment of such supercells is therefore to ensure that the number of SCF iterations remains constant when the system size increases.","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For achieving the latter DFTK by default employs the LdosMixing preconditioner [HL2021] during the SCF iterations. This mixing approach is completely parameter free, but still automatically adapts to the treated system in order to efficiently prevent charge sloshing. As a result, modelling aluminium slabs indeed takes roughly the same number of SCF iterations irrespective of the supercell size:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"[HL2021]: ","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"M. F. Herbst and A. Levitt. Black-box inhomogeneous preconditioning for self-consistent field iterations in density functional theory. J. Phys. Cond. Matt 33 085503 (2021). ArXiv:2009.01665","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(2); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"When switching off explicitly the LdosMixing, by selecting mixing=SimpleMixing(), the performance of number of required SCF steps starts to increase as we increase the size of the modelled problem:","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(1); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"self_consistent_field(aluminium_setup(4); tol=1e-4, mixing=SimpleMixing());\nnothing #hide","category":"page"},{"location":"examples/supercells/","page":"Creating and modelling metallic supercells","title":"Creating and modelling metallic supercells","text":"For completion let us note that the more traditional mixing=KerkerMixing() approach would also help in this particular setting to obtain a constant number of SCF iterations for an increasing system size (try it!). In contrast to LdosMixing, however, KerkerMixing is only suitable to model bulk metallic system (like the case we are considering here). When modelling metallic surfaces or mixtures of metals and insulators, KerkerMixing fails, while LdosMixing still works well. See the Modelling a gallium arsenide surface example or [HL2021] for details. Due to the general applicability of LdosMixing this method is the default mixing approach in DFTK.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"EditURL = \"../../../examples/compare_solvers.jl\"","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-DFT-solvers","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"We compare four different approaches for solving the DFT minimisation problem, namely a density-based SCF, a potential-based SCF, direct minimisation and Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"First we setup our problem","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"using DFTK\nusing LinearAlgebra\n\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=5, kgrid=[3, 3, 3])\n\n# Convergence we desire in the density\ntol = 1e-6","category":"page"},{"location":"examples/compare_solvers/#Density-based-self-consistent-field","page":"Comparison of DFT solvers","title":"Density-based self-consistent field","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scf = self_consistent_field(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Potential-based-SCF","page":"Comparison of DFT solvers","title":"Potential-based SCF","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_scfv = DFTK.scf_potential_mixing(basis; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Direct-minimization","page":"Comparison of DFT solvers","title":"Direct minimization","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Note: Unlike the other algorithms, tolerance for this one is in the energy, thus we square the density tolerance value to be roughly equivalent.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_dm = direct_minimization(basis; tol=tol^2);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Newton-algorithm","page":"Comparison of DFT solvers","title":"Newton algorithm","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Start not too far from the solution to ensure convergence: We run first a very crude SCF to get close and then switch to Newton.","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"scfres_start = self_consistent_field(basis; tol=0.5);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"Remove the virtual orbitals (which Newton cannot treat yet)","category":"page"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"ψ = DFTK.select_occupied_orbitals(basis, scfres_start.ψ, scfres_start.occupation).ψ\nscfres_newton = newton(basis, ψ; tol);\nnothing #hide","category":"page"},{"location":"examples/compare_solvers/#Comparison-of-results","page":"Comparison of DFT solvers","title":"Comparison of results","text":"","category":"section"},{"location":"examples/compare_solvers/","page":"Comparison of DFT solvers","title":"Comparison of DFT solvers","text":"println(\"|ρ_newton - ρ_scf| = \", norm(scfres_newton.ρ - scfres_scf.ρ))\nprintln(\"|ρ_newton - ρ_scfv| = \", norm(scfres_newton.ρ - scfres_scfv.ρ))\nprintln(\"|ρ_newton - ρ_dm| = \", norm(scfres_newton.ρ - scfres_dm.ρ))","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"EditURL = \"tutorial.jl\"","category":"page"},{"location":"guide/tutorial/#Tutorial","page":"Tutorial","title":"Tutorial","text":"","category":"section"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"(Image: ) (Image: )","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"This document provides an overview of the structure of the code and how to access basic information about calculations. Basic familiarity with the concepts of plane-wave density functional theory is assumed throughout. Feel free to take a look at the Periodic problems or the Introductory resources chapters for some introductory material on the topic.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"note: Convergence parameters in the documentation\nWe use rough parameters in order to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"For our discussion we will use the classic example of computing the LDA ground state of the silicon crystal. Performing such a calculation roughly proceeds in three steps.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\n# 1. Define lattice and atomic positions\na = 5.431u\"angstrom\" # Silicon lattice constant\nlattice = a / 2 * [[0 1 1.]; # Silicon lattice vectors\n [1 0 1.]; # specified column by column\n [1 1 0.]];\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"By default, all numbers passed as arguments are assumed to be in atomic units. Quantities such as temperature, energy cutoffs, lattice vectors, and the k-point grid spacing can optionally be annotated with Unitful units, which are automatically converted to the atomic units used internally. For more details, see the Unitful package documentation and the UnitfulAtomic.jl package.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"# Load HGH pseudopotential for Silicon\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n\n# Specify type and positions of atoms\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# 2. Select model and basis\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 7 # kinetic energy cutoff\n# Ecut = 190.5u\"eV\" # Could also use eV or other energy-compatible units\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\n# Note the implicit passing of keyword arguments here:\n# this is equivalent to PlaneWaveBasis(model; Ecut=Ecut, kgrid=kgrid)\n\n# 3. Run the SCF procedure to obtain the ground state\nscfres = self_consistent_field(basis, tol=1e-5);\nnothing #hide","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"That's it! Now you can get various quantities from the result of the SCF. For instance, the different components of the energy:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"scfres.energies","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Eigenvalues:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"stack(scfres.eigenvalues)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"eigenvalues is an array (indexed by k-points) of arrays (indexed by eigenvalue number).","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"The resulting matrix is 7 (number of computed eigenvalues) by 8 (number of irreducible k-points). There are 7 eigenvalues per k-point because there are 4 occupied states in the system (4 valence electrons per silicon atom, two atoms per unit cell, and paired spins), and the eigensolver gives itself some breathing room by computing some extra states (see the bands argument to self_consistent_field as well as the AdaptiveBands documentation). There are only 8 k-points (instead of 4x4x4) because symmetry has been used to reduce the amount of computations to just the irreducible k-points (see Crystal symmetries for details).","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can check the occupations ...","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"stack(scfres.occupation)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"... and density, where we use that the density objects in DFTK are indexed as ρ[iσ, ix, iy, iz], i.e. first in the spin component and then in the 3-dimensional real-space grid.","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"rvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[1, :, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"We can also perform various postprocessing steps: We can get the Cartesian forces (in Hartree / Bohr):","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"compute_forces_cart(scfres)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"As expected, they are numerically zero in this highly symmetric configuration. We could also compute a band structure,","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_bandstructure(scfres; kline_density=10)","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"or plot a density of states, for which we increase the kgrid a bit to get smoother plots:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"bands = compute_bands(scfres, MonkhorstPack(6, 6, 6))\nplot_dos(bands; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"Note that directly employing the scfres also works, but the results are much cruder:","category":"page"},{"location":"guide/tutorial/","page":"Tutorial","title":"Tutorial","text":"plot_dos(scfres; temperature=1e-3, smearing=Smearing.FermiDirac())","category":"page"},{"location":"developer/style_guide/#Developer's-style-guide","page":"Developer's style guide","title":"Developer's style guide","text":"","category":"section"},{"location":"developer/style_guide/","page":"Developer's style guide","title":"Developer's style guide","text":"The following conventions are not strictly enforced in DFTK. The rule of thumb is readability over consistency.","category":"page"},{"location":"developer/style_guide/#Coding-and-formatting-conventions","page":"Developer's style guide","title":"Coding and formatting conventions","text":"","category":"section"},{"location":"developer/style_guide/","page":"Developer's style guide","title":"Developer's style guide","text":"Line lengths should be 92 characters.\nAvoid shortening variable names only for its own sake.\nNamed tuples should be explicit, i.e., (; var=val) over (var=val).\nUse NamedTuple unpacking to prevent ambiguities when getting multiple arguments from a function.\nEmpty callbacks should use identity.\nUse = to loop over a range but in to loop over elements.\nAlways format the where keyword with explicit braces: where {T <: Any}.\nDo not use implicit arguments in functions but explicit keyword.\nPrefix function name by _ if it is an internal helper function, which is not of general use and should thus be kept close to the vicinity of the calling function.","category":"page"},{"location":"#DFTK.jl:-The-density-functional-toolkit.","page":"Home","title":"DFTK.jl: The density-functional toolkit.","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"The density-functional toolkit, DFTK for short, is a library of Julia routines for playing with plane-wave density-functional theory (DFT) algorithms. In its basic formulation it solves periodic Kohn-Sham equations. The unique feature of the code is its emphasis on simplicity and flexibility with the goal of facilitating methodological development and interdisciplinary collaboration. In about 7k lines of pure Julia code we support a sizeable set of features. Our performance is of the same order of magnitude as much larger production codes such as Abinit, Quantum Espresso and VASP. DFTK's source code is publicly available on github.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you are new to density-functional theory or plane-wave methods, see our notes on Periodic problems and our collection of Introductory resources.","category":"page"},{"location":"","page":"Home","title":"Home","text":"Found a bug, missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"#getting-started","page":"Home","title":"Getting started","text":"","category":"section"},{"location":"","page":"Home","title":"Home","text":"First, new users should take a look at the Installation and Tutorial sections. Then, make your way through the various examples. An ideal starting point are the Examples on basic DFT calculations.","category":"page"},{"location":"","page":"Home","title":"Home","text":"note: Convergence parameters in the documentation\nIn the documentation we use very rough convergence parameters to be able to automatically generate this documentation very quickly. Therefore results are far from converged. Tighter thresholds and larger grids should be used for more realistic results.","category":"page"},{"location":"","page":"Home","title":"Home","text":"If you have an idea for an addition to the docs or see something wrong, please open an issue or pull request!","category":"page"},{"location":"developer/conventions/#Notation-and-conventions","page":"Notation and conventions","title":"Notation and conventions","text":"","category":"section"},{"location":"developer/conventions/#Usage-of-unicode-characters","page":"Notation and conventions","title":"Usage of unicode characters","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"DFTK liberally uses unicode characters to represent Greek characters (e.g. ψ, ρ, ε...). Make sure you use the proper Julia plugins to simplify typing them.","category":"page"},{"location":"developer/conventions/#symbol-conventions","page":"Notation and conventions","title":"Symbol conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Reciprocal-space vectors: k for vectors in the Brillouin zone, G for vectors of the reciprocal lattice, q for phonon vectors (i.e., vectors in the Brillouin zone characteristic of the crystal normal modes), p for general vectors.\nReal-space vectors: R for lattice vectors, r and x are usually used for unit for vectors in the unit cell or general real-space vectors, respectively. This convention is, however, less consistently applied.\nOmega is the unit cell, and Omega (or sometimes just Omega) is its volume.\nA are the real-space lattice vectors (model.lattice) and B the Brillouin zone lattice vectors (model.recip_lattice).\nThe Bloch waves are\npsi_nk(x) = e^ikcdot x u_nk(x)\nwhere n is the band index and k the k-point. In the code we sometimes use psi and u interchangeably.\nvarepsilon are the eigenvalues, varepsilon_F is the Fermi level.\nrho is the density.\nIn the code we use normalized plane waves:\ne_G(r) = frac 1 sqrtOmega e^i G cdot r\nY^l_m are the complex spherical harmonics, and Y_lm the real ones.\nj_l are the Bessel functions. In particular, j_0(x) = fracsin xx.","category":"page"},{"location":"developer/conventions/#Units","page":"Notation and conventions","title":"Units","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"In DFTK, atomic units are used throughout, most importantly lengths are in Bohr and energies in Hartree. See wikipedia for a list of conversion factors. Appropriate unit conversion can can be performed using the Unitful and UnitfulAtomic packages:","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful\nusing UnitfulAtomic\naustrip(10u\"eV\") # 10eV in Hartree","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"using Unitful: Å\nusing UnitfulAtomic\nauconvert(Å, 1.2) # 1.2 Bohr in Ångström","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Differing unit conventions\nDifferent electronic-structure codes use different unit conventions. For example for lattice vectors the common length units are Bohr (used by DFTK) and Ångström (used e.g. by ASE, 1Å ≈ 1.80 Bohr). When setting up a calculation for DFTK one needs to ensure to convert to Bohr and atomic units. When structures are provided as AtomsBase.jl-compatible objects, this unit conversion is automatically performed behind the scenes. See AtomsBase integration for details.","category":"page"},{"location":"developer/conventions/#conventions-lattice","page":"Notation and conventions","title":"Lattices and lattice vectors","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Both the real-space lattice (i.e. model.lattice) and reciprocal-space lattice (model.recip_lattice) contain the lattice vectors in columns. For example, model.lattice[:, 1] is the first real-space lattice vector. If 1D or 2D problems are to be treated these arrays are still 3 times 3 matrices, but contain two or one zero-columns, respectively. The real-space lattice vectors are sometimes referred to by A and the reciprocal-space lattice vectors by B = 2pi A^-T.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"warning: Row-major versus column-major storage order\nJulia stores matrices as column-major, but other languages (notably Python and C) use row-major ordering. Care therefore needs to be taken to properly transpose the unit cell matrices A before using it with DFTK. Calls through the supported third-party package AtomsIO handle such conversion automatically.","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"We use the convention that the unit cell in real space is 0 1)^3 in reduced coordinates and the unit cell in reciprocal space (the reducible Brillouin zone) is -12 12)^3.","category":"page"},{"location":"developer/conventions/#Reduced-and-cartesian-coordinates","page":"Notation and conventions","title":"Reduced and cartesian coordinates","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"Unless denoted otherwise the code uses reduced coordinates for reciprocal-space vectors such as k, G, q, p or real-space vectors like r and R (see Symbol conventions). One switches to Cartesian coordinates by","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"x_textcart = M x_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"where M is either A / model.lattice (for real-space vectors) or B / model.recip_lattice (for reciprocal-space vectors). A useful relationship is","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"b_textcart cdot a_textcart=2pi b_textred cdot a_textred","category":"page"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"if a and b are real-space and reciprocal-space vectors respectively. Other names for reduced coordinates are integer coordinates (usually for G-vectors) or fractional coordinates (usually for k-points).","category":"page"},{"location":"developer/conventions/#Normalization-conventions","page":"Notation and conventions","title":"Normalization conventions","text":"","category":"section"},{"location":"developer/conventions/","page":"Notation and conventions","title":"Notation and conventions","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points and in reciprocal space its coefficients are ell^2-normalized, see the discussion in section PlaneWaveBasis and plane-wave discretisations where this is demonstrated.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"EditURL = \"../../../examples/energy_cutoff_smearing.jl\"","category":"page"},{"location":"examples/energy_cutoff_smearing/#Energy-cutoff-smearing","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"","category":"section"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"A technique that has been employed in the literature to ensure smooth energy bands for finite Ecut values is energy cutoff smearing.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"As recalled in the Problems and plane-wave discretization section, the energy of periodic systems is computed by solving eigenvalue problems of the form","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"H_k u_k = ε_k u_k","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"for each k-point in the first Brillouin zone of the system. Each of these eigenvalue problem is discretized with a plane-wave basis mathcalB_k^E_c=x e^iG x G mathcalR^* k+G^2 2E_c whose size highly depends on the choice of k-point, cell size or cutoff energy rm E_c (the Ecut parameter of DFTK). As a result, energy bands computed along a k-path in the Brillouin zone or with respect to the system's unit cell volume - in the case of geometry optimization for example - display big irregularities when Ecut is taken too small.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Here is for example the variation of the ground state energy of face cubic centred (FCC) silicon with respect to its lattice parameter, around the experimental lattice constant.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"using DFTK\nusing Statistics\n\na0 = 10.26 # Experimental lattice constant of silicon in bohr\na_list = range(a0 - 1/2, a0 + 1/2; length=20)\n\nfunction compute_ground_state_energy(a; Ecut, kgrid, kinetic_blowup, kwargs...)\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n model = model_PBE(lattice, atoms, positions; kinetic_blowup)\n basis = PlaneWaveBasis(model; Ecut, kgrid)\n self_consistent_field(basis; callback=identity, kwargs...).energies.total\nend\n\nEcut = 5 # Very low Ecut to display big irregularities\nkgrid = (2, 2, 2) # Very sparse k-grid to speed up convergence\nE0_naive = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupIdentity(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"To be compared with the same computation for a high Ecut=100. The naive approximation of the energy is shifted for the legibility of the plot.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_ref = [-7.839775223322127, -7.843031658146996, -7.845961005280923,\n -7.848576991754026, -7.850892888614151, -7.852921532056932,\n -7.854675317792186, -7.85616622262217, -7.85740584131599,\n -7.858405359984107, -7.859175611288143, -7.859727053496513,\n -7.860069804791132, -7.860213631865354, -7.8601679947736915,\n -7.859942011410533, -7.859544518721661, -7.858984032385052,\n -7.858268793303855, -7.857406769423708]\n\nusing Plots\nshift = mean(abs.(E0_naive .- E0_ref))\np = plot(a_list, E0_naive .- shift, label=\"Ecut=5\", xlabel=\"lattice parameter a (bohr)\",\n ylabel=\"Ground state energy (Ha)\", color=1)\nplot!(p, a_list, E0_ref, label=\"Ecut=100\", color=2)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The problem of non-smoothness of the approximated energy is typically avoided by taking a large enough Ecut, at the cost of a high computation time. Another method consist in introducing a modified kinetic term defined through the data of a blow-up function, a method which is also referred to as \"energy cutoff smearing\". DFTK features energy cutoff smearing using the CHV blow-up function introduced in [CHV2022] that is mathematically ensured to provide C^2 regularity of the energy bands.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"[CHV2022]: ","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Éric Cancès, Muhammad Hassan and Laurent Vidal Modified-operator method for the calculation of band diagrams of crystalline materials, 2022. arXiv preprint.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"Let us lauch the computation again with the modified kinetic term.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"E0_modified = compute_ground_state_energy.(a_list; kinetic_blowup=BlowupCHV(), Ecut, kgrid);\nnothing #hide","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"note: Abinit energy cutoff smearing option\nFor the sake of completeness, DFTK also provides the blow-up function BlowupAbinit proposed in the Abinit quantum chemistry code. This function depends on a parameter Ecutsm fixed by the user (see Abinit user guide). For the right choice of Ecutsm, BlowupAbinit corresponds to the BlowupCHV approach with coefficients ensuring C^1 regularity. To choose BlowupAbinit, pass kinetic_blowup=BlowupAbinit(Ecutsm) to the model constructors.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"We can know compare the approximation of the energy as well as the estimated lattice constant for each strategy.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"estimate_a0(E0_values) = a_list[findmin(E0_values)[2]]\na0_naive, a0_ref, a0_modified = estimate_a0.([E0_naive, E0_ref, E0_modified])\n\nshift = mean(abs.(E0_modified .- E0_ref)) # Shift for legibility of the plot\nplot!(p, a_list, E0_modified .- shift, label=\"Ecut=5 + BlowupCHV\", color=3)\nvline!(p, [a0], label=\"experimental a0\", linestyle=:dash, linecolor=:black)\nvline!(p, [a0_naive], label=\"a0 Ecut=5\", linestyle=:dash, color=1)\nvline!(p, [a0_ref], label=\"a0 Ecut=100\", linestyle=:dash, color=2)\nvline!(p, [a0_modified], label=\"a0 Ecut=5 + BlowupCHV\", linestyle=:dash, color=3)","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"The smoothed curve obtained with the modified kinetic term allow to clearly designate a minimal value of the energy with respect to the lattice parameter a, even with the low Ecut=5 Ha.","category":"page"},{"location":"examples/energy_cutoff_smearing/","page":"Energy cutoff smearing","title":"Energy cutoff smearing","text":"println(\"Error of approximation of the reference a0 with modified kinetic term:\"*\n \" $(round((a0_modified - a0_ref)*100/a0_ref, digits=5))%\")","category":"page"},{"location":"developer/data_structures/#Data-structures","page":"Data structures","title":"Data structures","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using DFTK\na = 10.26 # Silicon lattice constant in Bohr\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nmodel = model_LDA(lattice, atoms, positions)\nkgrid = [4, 4, 4]\nEcut = 15\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis; tol=1e-4);","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"In this section we assume a calculation of silicon LDA model in the setup described in Tutorial.","category":"page"},{"location":"developer/data_structures/#Model-datastructure","page":"Data structures","title":"Model datastructure","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The physical model to be solved is defined by the Model datastructure. It contains the unit cell, number of electrons, atoms, type of spin polarization and temperature. Each atom has an atomic type (Element) specifying the number of valence electrons and the potential (or pseudopotential) it creates with respect to the electrons. The Model structure also contains the list of energy terms defining the energy functional to be minimised during the SCF. For the silicon example above, we used an LDA model, which consists of the following terms[2]:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[2]: If you are not familiar with Julia syntax, typeof.(model.term_types) is equivalent to [typeof(t) for t in model.term_types].","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"typeof.(model.term_types)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"DFTK computes energies for all terms of the model individually, which are available in scfres.energies:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"scfres.energies","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For now the following energy terms are available in DFTK:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Kinetic energy\nLocal potential energy, either given by analytic potentials or specified by the type of atoms.\nNonlocal potential energy, for norm-conserving pseudopotentials\nNuclei energies (Ewald or pseudopotential correction)\nHartree energy\nExchange-correlation energy\nPower nonlinearities (useful for Gross-Pitaevskii type models)\nMagnetic field energy\nEntropy term","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Custom types can be added if needed. For examples see the definition of the above terms in the src/terms directory.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"By mixing and matching these terms, the user can create custom models not limited to DFT. Convenience constructors are provided for common cases:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"model_LDA: LDA model using the Teter parametrisation\nmodel_DFT: Assemble a DFT model using any of the LDA or GGA functionals of the libxc library, for example: model_DFT(lattice, atoms, positions, [:gga_x_pbe, :gga_c_pbe]) model_DFT(lattice, atoms, positions, :lda_xc_teter93) where the latter is equivalent to model_LDA. Specifying no functional is the reduced Hartree-Fock model: model_DFT(lattice, atoms, positions, [])\nmodel_atomic: A linear model, which contains no electron-electron interaction (neither Hartree nor XC term).","category":"page"},{"location":"developer/data_structures/#PlaneWaveBasis-and-plane-wave-discretisations","page":"Data structures","title":"PlaneWaveBasis and plane-wave discretisations","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis datastructure handles the discretization of a given Model in a plane-wave basis. In plane-wave methods the discretization is twofold: Once the k-point grid, which determines the sampling inside the Brillouin zone and on top of that a finite plane-wave grid to discretise the lattice-periodic functions. The former aspect is controlled by the kgrid argument of PlaneWaveBasis, the latter is controlled by the cutoff energy parameter Ecut:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"PlaneWaveBasis(model; Ecut, kgrid)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The PlaneWaveBasis by default uses symmetry to reduce the number of k-points explicitly treated. For details see Crystal symmetries.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"As mentioned, the periodic parts of Bloch waves are expanded in a set of normalized plane waves e_G:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"beginaligned\n psi_k(x) = e^i k cdot x u_k(x)\n = sum_G in mathcal R^* c_G e^i k cdot x e_G(x)\nendaligned","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where mathcal R^* is the set of reciprocal lattice vectors. The c_G are ell^2-normalized. The summation is truncated to a \"spherical\", k-dependent basis set","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":" S_k = leftG in mathcal R^* middle\n frac 1 2 k+ G^2 le E_textcutright","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"where E_textcut is the cutoff energy.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Densities involve terms like psi_k^2 = u_k^2 and therefore products e_-G e_G for G G in S_k. To represent these we use a \"cubic\", k-independent basis set large enough to contain the set G-G G G in S_k. We can obtain the coefficients of densities on the e_G basis by a convolution, which can be performed efficiently with FFTs (see ifft and fft functions). Potentials are discretized on this same set.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The normalization conventions used in the code is that quantities stored in reciprocal space are coefficients in the e_G basis, and quantities stored in real space use real physical values. This means for instance that wavefunctions in the real space grid are normalized as fracOmegaN sum_r psi(r)^2 = 1 where N is the number of grid points.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"For example let us check the normalization of the first eigenfunction at the first k-point in reciprocal space:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψtest = scfres.ψ[1][:, 1]\nsum(abs2.(ψtest))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"We now perform an IFFT to get ψ in real space. The k-point has to be passed because ψ is expressed on the k-dependent basis. Again the function is normalised:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ψreal = ifft(basis, basis.kpoints[1], ψtest)\nsum(abs2.(ψreal)) * basis.dvol","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of k points of the basis can be obtained with basis.kpoints.","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"basis.kpoints","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The G vectors of the \"spherical\", k-dependent grid can be obtained with G_vectors:","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"[length(G_vectors(basis, kpoint)) for kpoint in basis.kpoints]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"ik = 1\nG_vectors(basis, basis.kpoints[ik])[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"The list of G vectors (Fourier modes) of the \"cubic\", k-independent basis set can be obtained similarly with G_vectors(basis).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(G_vectors(basis)), prod(basis.fft_size)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(G_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Analogously the list of r vectors (real-space grid) can be obtained with r_vectors(basis):","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"length(r_vectors(basis))","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"collect(r_vectors(basis))[1:4]","category":"page"},{"location":"developer/data_structures/#Accessing-Bloch-waves-and-densities","page":"Data structures","title":"Accessing Bloch waves and densities","text":"","category":"section"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Wavefunctions are stored in an array scfres.ψ as ψ[ik][iG, iband] where ik is the index of the k-point (in basis.kpoints), iG is the index of the plane wave (in G_vectors(basis, basis.kpoints[ik])) and iband is the index of the band. Densities are stored in real space, as a 4-dimensional array (the third being the spin component).","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"using Plots # hide\nrvecs = collect(r_vectors(basis))[:, 1, 1] # slice along the x axis\nx = [r[1] for r in rvecs] # only keep the x coordinate\nplot(x, scfres.ρ[:, 1, 1, 1], label=\"\", xlabel=\"x\", ylabel=\"ρ\", marker=2)","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"G_energies = [sum(abs2.(model.recip_lattice * G)) ./ 2 for G in G_vectors(basis)][:]\nscatter(G_energies, abs.(fft(basis, scfres.ρ)[:]);\n yscale=:log10, ylims=(1e-12, 1), label=\"\", xlabel=\"Energy\", ylabel=\"|ρ|\")","category":"page"},{"location":"developer/data_structures/","page":"Data structures","title":"Data structures","text":"Note that the density has no components on wavevectors above a certain energy, because the wavefunctions are limited to frac 1 2k+G^2 E_rm cut.","category":"page"},{"location":"developer/gpu_computations/#GPU-computations","page":"GPU computations","title":"GPU computations","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Performing GPU computations in DFTK is still work in progress. The goal is to build on Julia's multiple dispatch to have the same code base for CPU and GPU. Our current approach is to aim at decent performance without writing any custom kernels at all, relying only on the high level functionalities implemented in the GPU packages.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"To go even further with this idea of unified code, we would also like to be able to support any type of GPU architecture: we do not want to hard-code the use of a specific architecture, say a NVIDIA CUDA GPU. DFTK does not rely on an architecture-specific package (CUDA, ROCm, OneAPI...) but rather uses GPUArrays, which is the counterpart of AbstractArray but for GPU arrays.","category":"page"},{"location":"developer/gpu_computations/#Current-implementation","page":"GPU computations","title":"Current implementation","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"For now, GPU computations are done by specializing the architecture keyword argument when creating the basis. architecture should be an initialized instance of the (non-exported) CPU and GPU structures. CPU does not require any argument, but GPU requires the type of array which will be used for GPU computations.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"PlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.CPU())\nPlaneWaveBasis(model; Ecut, kgrid, architecture = DFTK.GPU(CuArray))","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"note: GPU API is experimental\nIt is very likely that this API will change, based on the evolution of the Julia ecosystem concerning distributed architectures.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Not all terms can be used when doing GPU computations. As of January 2023 this concerns Anyonic, Magnetic and TermPairwisePotential. Similarly GPU features are not yet exhaustively tested, and it is likely that some aspects of the code such as automatic differentiation or stresses will not work.","category":"page"},{"location":"developer/gpu_computations/#Pitfalls","page":"GPU computations","title":"Pitfalls","text":"","category":"section"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"There are a few things to keep in mind when doing GPU programming in DFTK.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Transfers to and from a device can be done simply by converting an array to","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"an other type. However, hard-coding the new array type (such as writing CuArray(A) to move A to a CUDA GPU) is not cross-architecture, and can be confusing for developers working only on the CPU code. These data transfers should be done using the helper functions to_device and to_cpu which provide a level of abstraction while also allowing multiple architectures to be used.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"cuda_gpu = DFTK.GPU(CuArray)\ncpu_architecture = DFTK.CPU()\nA = rand(10) # A is on the CPU\nB = DFTK.to_device(cuda_gpu, A) # B is a copy of A on the CUDA GPU\nB .+= 1.\nC = DFTK.to_cpu(B) # C is a copy of B on the CPU\nD = DFTK.to_device(cpu_architecture, B) # Equivalent to the previous line, but\n # should be avoided as it is less clear","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Note: similar could also be used, but then a reference array (one which already lives on the device) needs to be available at call time. This was done previously, with helper functions to easily build new arrays on a given architecture: see for example zeros_like.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Functions which will get executed on the GPU should always have arguments","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"which are isbits (immutable and contains no references to other values). When using map, also make sure that every structure used is also isbits. For example, the following map will fail, as model contains strings and arrays which are not isbits.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n # model is not isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"However, the following map will run on a GPU, as the lattice is a static matrix.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"function map_lattice(model::Model, Gs::AbstractArray{Vec3})\n lattice = model.lattice # lattice is isbits\n map(Gs) do Gi\n model.lattice * Gi\n end\nend","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"List comprehensions should be avoided, as they always return a CPU Array.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Instead, we should use map which returns an array of the same type as the input one.","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"Sometimes, creating a new array or making a copy can be necessary to achieve good","category":"page"},{"location":"developer/gpu_computations/","page":"GPU computations","title":"GPU computations","text":"performance. For example, iterating through the columns of a matrix to compute their norms is not efficient, as a new kernel is launched for every column. Instead, it is better to build the vector containing these norms, as it is a vectorized operation and will be much faster on the GPU.","category":"page"},{"location":"features/#package-features","page":"DFTK features","title":"DFTK features","text":"","category":"section"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Standard methods and models:\nStandard DFT models (LDA, GGA, meta-GGA): Any functional from the libxc library\nNorm-conserving pseudopotentials: Goedecker-type (GTH, HGH) or numerical (in UPF pseudopotential format), see Pseudopotentials for details.\nBrillouin zone symmetry for k-point sampling using spglib\nStandard smearing functions (including Methfessel-Paxton and Marzari-Vanderbilt cold smearing)\nCollinear spin polarization for magnetic systems\nSelf-consistent field approaches including Kerker mixing, LDOS mixing, adaptive damping\nDirect minimization, Newton solver\nMulti-level threading (k-points eigenvectors, FFTs, linear algebra)\nMPI-based distributed parallelism (distribution over k-points)\nTreat systems of 1000 electrons\nGround-state properties and post-processing:\nTotal energy\nForces, stresses\nDensity of states (DOS), local density of states (LDOS)\nBand structures\nEasy access to all intermediate quantities (e.g. density, Bloch waves)\nUnique features\nSupport for arbitrary floating point types, including Float32 (single precision) or Double64 (from DoubleFloats.jl).\nForward-mode algorithmic differentiation (see Polarizability using automatic differentiation)\nFlexibility to build your own Kohn-Sham model: Anything from analytic potentials, linear Cohen-Bergstresser model, the Gross-Pitaevskii equation, Anyonic models, etc.\nAnalytic potentials (see Tutorial on periodic problems)\n1D / 2D / 3D systems (see Tutorial on periodic problems)\nThird-party integrations:\nSeamless integration with many standard Input and output formats.\nIntegration with ASE and AtomsBase for passing atomic structures (see AtomsBase integration).\nWannierization using Wannier.jl or Wannier90","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Runs out of the box on Linux, macOS and Windows","category":"page"},{"location":"features/","page":"DFTK features","title":"DFTK features","text":"Missing a feature? Look for an open issue or create a new one. Want to contribute? See our contributing notes.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"EditURL = \"../../../examples/atomsbase.jl\"","category":"page"},{"location":"examples/atomsbase/#AtomsBase-integration","page":"AtomsBase integration","title":"AtomsBase integration","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"AtomsBase.jl is a common interface for representing atomic structures in Julia. DFTK directly supports using such structures to run a calculation as is demonstrated here.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using DFTK","category":"page"},{"location":"examples/atomsbase/#Feeding-an-AtomsBase-AbstractSystem-to-DFTK","page":"AtomsBase integration","title":"Feeding an AtomsBase AbstractSystem to DFTK","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"In this example we construct a silicon system using the ase.build.bulk routine from the atomistic simulation environment (ASE), which is exposed by ASEconvert as an AtomsBase AbstractSystem.","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"# Construct bulk system and convert to an AbstractSystem\nusing ASEconvert\nsystem_ase = ase.build.bulk(\"Si\")\nsystem = pyconvert(AbstractSystem, system_ase)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"To use an AbstractSystem in DFTK, we attach pseudopotentials, construct a DFT model, discretise and solve:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"system = attach_psp(system; Si=\"hgh/lda/si-q4\")\n\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"If we did not want to use ASE we could of course use any other package which yields an AbstractSystem object. This includes:","category":"page"},{"location":"examples/atomsbase/#Reading-a-system-using-AtomsIO","page":"AtomsBase integration","title":"Reading a system using AtomsIO","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsIO\n\n# Read a file using [AtomsIO](https://github.com/mfherbst/AtomsIO.jl),\n# which directly yields an AbstractSystem.\nsystem = load_system(\"Si.extxyz\")\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"The same could be achieved using ExtXYZ by system = Atoms(read_frame(\"Si.extxyz\")), since the ExtXYZ.Atoms object is directly AtomsBase-compatible.","category":"page"},{"location":"examples/atomsbase/#Directly-setting-up-a-system-in-AtomsBase","page":"AtomsBase integration","title":"Directly setting up a system in AtomsBase","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"using AtomsBase\nusing Unitful\nusing UnitfulAtomic\n\n# Construct a system in the AtomsBase world\na = 10.26u\"bohr\" # Silicon lattice constant\nlattice = a / 2 * [[0, 1, 1.], # Lattice as vector of vectors\n [1, 0, 1.],\n [1, 1, 0.]]\natoms = [:Si => ones(3)/8, :Si => -ones(3)/8]\nsystem = periodic_system(atoms, lattice; fractional=true)\n\n# Now run the LDA calculation:\nsystem = attach_psp(system; Si=\"hgh/lda/si-q4\")\nmodel = model_LDA(system; temperature=1e-3)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[4, 4, 4])\nscfres = self_consistent_field(basis, tol=1e-4);\nnothing #hide","category":"page"},{"location":"examples/atomsbase/#Obtaining-an-AbstractSystem-from-DFTK-data","page":"AtomsBase integration","title":"Obtaining an AbstractSystem from DFTK data","text":"","category":"section"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"At any point we can also get back the DFTK model as an AtomsBase-compatible AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"second_system = atomic_system(model)","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"Similarly DFTK offers a method to the atomic_system and periodic_system functions (from AtomsBase), which enable a seamless conversion of the usual data structures for setting up DFTK calculations into an AbstractSystem:","category":"page"},{"location":"examples/atomsbase/","page":"AtomsBase integration","title":"AtomsBase integration","text":"lattice = 5.431u\"Å\" / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]];\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\nthird_system = atomic_system(lattice, atoms, positions)","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"EditURL = \"../../../examples/graphene.jl\"","category":"page"},{"location":"examples/graphene/#Graphene-band-structure","page":"Graphene band structure","title":"Graphene band structure","text":"","category":"section"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"This example plots the band structure of graphene, a 2D material. 2D band structures are not supported natively (yet), so we manually build a custom path in reciprocal space.","category":"page"},{"location":"examples/graphene/","page":"Graphene band structure","title":"Graphene band structure","text":"using DFTK\nusing Unitful\nusing UnitfulAtomic\nusing LinearAlgebra\nusing Plots\n\n# Define the convergence parameters (these should be increased in production)\nL = 20 # height of the simulation box\nkgrid = [6, 6, 1]\nEcut = 15\ntemperature = 1e-3\n\n# Define the geometry and pseudopotential\na = 4.66 # lattice constant\na1 = a*[1/2,-sqrt(3)/2, 0]\na2 = a*[1/2, sqrt(3)/2, 0]\na3 = L*[0 , 0 , 1]\nlattice = [a1 a2 a3]\nC1 = [1/3,-1/3,0.0] # in reduced coordinates\nC2 = -C1\npositions = [C1, C2]\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\n\n# Run SCF\nmodel = model_PBE(lattice, atoms, positions; temperature)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis)\n\n# Construct 2D path through Brillouin zone\nkpath = irrfbz_path(model; dim=2, space_group_number=13) # graphene space group number\nbands = compute_bands(scfres, kpath; kline_density=20)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"EditURL = \"../../../examples/forwarddiff.jl\"","category":"page"},{"location":"examples/forwarddiff/#Polarizability-using-automatic-differentiation","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"","category":"section"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"Simple example for computing properties using (forward-mode) automatic differentiation. For a more classical approach and more details about computing polarizabilities, see Polarizability by linear response.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"using DFTK\nusing LinearAlgebra\nusing ForwardDiff\n\n# Construct PlaneWaveBasis given a particular electric field strength\n# Again we take the example of a Helium atom.\nfunction make_basis(ε::T; a=10., Ecut=30) where {T}\n lattice=T(a) * I(3) # lattice is a cube of ``a`` Bohrs\n # Helium at the center of the box\n atoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\n positions = [[1/2, 1/2, 1/2]]\n\n model = model_DFT(lattice, atoms, positions, [:lda_x, :lda_c_vwn];\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\n PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1]) # No k-point sampling on isolated system\nend\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n @assert isdiag(basis.model.lattice)\n a = basis.model.lattice[1, 1]\n rr = [a * (r[1] - 1/2) for r in r_vectors(basis)]\n sum(rr .* ρ) * basis.dvol\nend\n\n# Function to compute the dipole for a given field strength\nfunction compute_dipole(ε; tol=1e-8, kwargs...)\n scfres = self_consistent_field(make_basis(ε; kwargs...); tol)\n dipole(scfres.basis, scfres.ρ)\nend;\nnothing #hide","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"With this in place we can compute the polarizability from finite differences (just like in the previous example):","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability_fd = let\n ε = 0.01\n (compute_dipole(ε) - compute_dipole(0.0)) / ε\nend","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"We do the same thing using automatic differentiation. Under the hood this uses custom rules to implicitly differentiate through the self-consistent field fixed-point problem.","category":"page"},{"location":"examples/forwarddiff/","page":"Polarizability using automatic differentiation","title":"Polarizability using automatic differentiation","text":"polarizability = ForwardDiff.derivative(compute_dipole, 0.0)\nprintln()\nprintln(\"Polarizability via ForwardDiff: $polarizability\")\nprintln(\"Polarizability via finite difference: $polarizability_fd\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"EditURL = \"../../../examples/polarizability.jl\"","category":"page"},{"location":"examples/polarizability/#Polarizability-by-linear-response","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute the polarizability of a Helium atom. The polarizability is defined as the change in dipole moment","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"μ = r ρ(r) dr","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"with respect to a small uniform electric field E = -x.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We compute this in two ways: first by finite differences (applying a finite electric field), then by linear response. Note that DFTK is not really adapted to isolated atoms because it uses periodic boundary conditions. Nevertheless we can simply embed the Helium atom in a large enough box (although this is computationally wasteful).","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As in other tests, this is not fully converged, convergence parameters were simply selected for fast execution on CI,","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using DFTK\nusing LinearAlgebra\n\na = 10.\nlattice = a * I(3) # cube of ``a`` bohrs\n# Helium at the center of the box\natoms = [ElementPsp(:He; psp=load_psp(\"hgh/lda/He-q2\"))]\npositions = [[1/2, 1/2, 1/2]]\n\n\nkgrid = [1, 1, 1] # no k-point sampling for an isolated system\nEcut = 30\ntol = 1e-8\n\n# dipole moment of a given density (assuming the current geometry)\nfunction dipole(basis, ρ)\n rr = [(r[1] - a/2) for r in r_vectors_cart(basis)]\n sum(rr .* ρ) * basis.dvol\nend;\nnothing #hide","category":"page"},{"location":"examples/polarizability/#Using-finite-differences","page":"Polarizability by linear response","title":"Using finite differences","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"We first compute the polarizability by finite differences. First compute the dipole moment at rest:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"model = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nres = self_consistent_field(basis; tol)\nμref = dipole(basis, res.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Then in a small uniform field:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"ε = .01\nmodel_ε = model_LDA(lattice, atoms, positions;\n extra_terms=[ExternalFromReal(r -> -ε * (r[1] - a/2))],\n symmetries=false)\nbasis_ε = PlaneWaveBasis(model_ε; Ecut, kgrid)\nres_ε = self_consistent_field(basis_ε; tol)\nμε = dipole(basis_ε, res_ε.ρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"polarizability = (με - μref) / ε\n\nprintln(\"Reference dipole: $μref\")\nprintln(\"Displaced dipole: $με\")\nprintln(\"Polarizability : $polarizability\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"The result on more converged grids is very close to published results. For example DOI 10.1039/C8CP03569E quotes 1.65 with LSDA and 1.38 with CCSD(T).","category":"page"},{"location":"examples/polarizability/#Using-linear-response","page":"Polarizability by linear response","title":"Using linear response","text":"","category":"section"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"Now we use linear response to compute this analytically; we refer to standard textbooks for the formalism. In the following, χ_0 is the independent-particle polarizability, and K the Hartree-exchange-correlation kernel. We denote with δV_rm ext an external perturbing potential (like in this case the uniform electric field). Then:","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = χ_0 δV = χ_0 (δV_rm ext + K δρ)","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"which implies","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"δρ = (1-χ_0 K)^-1 χ_0 δV_rm ext","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"From this we identify the polarizability operator to be χ = (1-χ_0 K)^-1 χ_0. Numerically, we apply χ to δV = -x by solving a linear equation (the Dyson equation) iteratively.","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"using KrylovKit\n\n# Apply ``(1- χ_0 K)``\nfunction dielectric_operator(δρ)\n δV = apply_kernel(basis, δρ; res.ρ)\n χ0δV = apply_χ0(res, δV)\n δρ - χ0δV\nend\n\n# `δVext` is the potential from a uniform field interacting with the dielectric dipole\n# of the density.\nδVext = [-(r[1] - a/2) for r in r_vectors_cart(basis)]\nδVext = cat(δVext; dims=4)\n\n# Apply ``χ_0`` once to get non-interacting dipole\nδρ_nointeract = apply_χ0(res, δVext)\n\n# Solve Dyson equation to get interacting dipole\nδρ = linsolve(dielectric_operator, δρ_nointeract, verbosity=3)[1]\n\nprintln(\"Non-interacting polarizability: $(dipole(basis, δρ_nointeract))\")\nprintln(\"Interacting polarizability: $(dipole(basis, δρ))\")","category":"page"},{"location":"examples/polarizability/","page":"Polarizability by linear response","title":"Polarizability by linear response","text":"As expected, the interacting polarizability matches the finite difference result. The non-interacting polarizability is higher.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"EditURL = \"../../../examples/input_output.jl\"","category":"page"},{"location":"examples/input_output/#Input-and-output-formats","page":"Input and output formats","title":"Input and output formats","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This section provides an overview of the input and output formats supported by DFTK, usually via integration with a third-party library.","category":"page"},{"location":"examples/input_output/#Reading-/-writing-files-supported-by-AtomsIO","page":"Input and output formats","title":"Reading / writing files supported by AtomsIO","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"AtomsIO is a Julia package which supports reading / writing atomistic structures from / to a large range of file formats. Supported formats include Crystallographic Information Framework (CIF), XYZ and extxyz files, ASE / Gromacs / LAMMPS / Amber trajectory files or input files of various other codes (e.g. Quantum Espresso, VASP, ABINIT, CASTEP, …). The full list of formats is is available in the AtomsIO documentation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The AtomsIO functionality is split into two packages. The main package, AtomsIO itself, only depends on packages, which are registered in the Julia General package registry. In contrast AtomsIOPython extends AtomsIO by parsers depending on python packages, which are automatically managed via PythonCall. While it thus provides the full set of supported IO formats, this also adds additional practical complications, so some users may choose not to use AtomsIOPython.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"As an example we start the calculation of a simple antiferromagnetic iron crystal using a Quantum-Espresso input file, Fe_afm.pwi. For more details about calculations on magnetic systems using collinear spin, see Collinear spin and magnetic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"First we parse the Quantum Espresso input file using AtomsIO, which reads the lattice, atomic positions and initial magnetisation from the input file and returns it as an AtomsBase AbstractSystem, the JuliaMolSim community standard for representing atomic systems.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using AtomsIO # Use Julia-only IO parsers\nusing AtomsIOPython # Use python-based IO parsers (e.g. ASE)\nsystem = load_system(\"Fe_afm.pwi\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Next we attach pseudopotential information, since currently the parser is not yet capable to read this information from the file.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using DFTK\nsystem = attach_psp(system, Fe=\"hgh/pbe/fe-q16.hgh\")","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Finally we make use of DFTK's AtomsBase integration to run the calculation.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"model = model_LDA(system; temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut=10, kgrid=(2, 2, 2))\nρ0 = guess_density(basis, system)\nscfres = self_consistent_field(basis, ρ=ρ0);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"warning: DFTK data formats are not yet fully matured\nThe data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.","category":"page"},{"location":"examples/input_output/#Writing-VTK-files-for-visualization","page":"Input and output formats","title":"Writing VTK files for visualization","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"For visualizing the density or the Kohn-Sham orbitals DFTK supports storing the result of an SCF calculations in the form of VTK files. These can afterwards be visualized using tools such as paraview. Using this feature requires the WriteVTK.jl Julia package.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using WriteVTK\nsave_scfres(\"iron_afm.vts\", scfres; save_ψ=true);\nnothing #hide","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This will save the iron calculation above into the file iron_afm.vts, using save_ψ=true to also include the KS orbitals.","category":"page"},{"location":"examples/input_output/#Parsable-data-export-using-json","page":"Input and output formats","title":"Parsable data-export using json","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Many structures in DFTK support the (unexported) todict function, which returns a simplified dictionary representation of the data.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"DFTK.todict(scfres.energies)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"This in turn can be easily written to disk using a JSON library. Currently we integrate most closely with JSON3, which is thus recommended.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nopen(\"iron_afm_energies.json\", \"w\") do io\n JSON3.pretty(io, DFTK.todict(scfres.energies))\nend\nprintln(read(\"iron_afm_energies.json\", String))","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Once JSON3 is loaded, additionally a convenience function for saving a summary of scfres objects using save_scfres is available:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JSON3\nsave_scfres(\"iron_afm.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Similarly a summary of the band data (occupations, eigenvalues, εF, etc.) for post-processing can be dumped using save_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"save_bands(\"iron_afm_scfres.json\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Notably this function works both for the results obtained by self_consistent_field as well as compute_bands:","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"bands = compute_bands(scfres, kline_density=10)\nsave_bands(\"iron_afm_bands.json\", bands)","category":"page"},{"location":"examples/input_output/#Writing-and-reading-JLD2-files","page":"Input and output formats","title":"Writing and reading JLD2 files","text":"","category":"section"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"The full state of a DFTK self-consistent field calculation can be stored on disk in form of an JLD2.jl file. This file can be read from other Julia scripts as well as other external codes supporting the HDF5 file format (since the JLD2 format is based on HDF5). This includes notably h5py to read DFTK output from python.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"using JLD2\nsave_scfres(\"iron_afm.jld2\", scfres)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Saving such JLD2 files supports some options, such as save_ψ=false, which avoids saving the Bloch waves (much faster and smaller files). Notice that JLD2 files can also be used with save_bands.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"Since such JLD2 can also be read by DFTK to start or continue a calculation, these can also be used for checkpointing or for transferring results to a different computer. See Saving SCF results on disk and SCF checkpoints for details.","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"(Cleanup files generated by this notebook.)","category":"page"},{"location":"examples/input_output/","page":"Input and output formats","title":"Input and output formats","text":"rm.([\"iron_afm.vts\", \"iron_afm.jld2\",\n \"iron_afm.json\", \"iron_afm_energies.json\", \"iron_afm_scfres.json\",\n \"iron_afm_bands.json\"])","category":"page"},{"location":"guide/introductory_resources/#introductory-resources","page":"Introductory resources","title":"Introductory resources","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"This page collects a bunch of articles, lecture notes, textbooks and recordings related to density-functional theory (DFT) and DFTK. Since DFTK aims for an interdisciplinary audience the level and scope of the referenced works varies. They are roughly ordered from beginner to advanced. For a list of articles dealing with novel research aspects achieved using DFTK, see Publications.","category":"page"},{"location":"guide/introductory_resources/#Workshop-material-and-tutorials","page":"Introductory resources","title":"Workshop material and tutorials","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFTK school 2022: Numerical methods for density-functional theory simulations: Summer school centred around the DFTK code and modern approaches to density-functional theory. See the programme and lecture notes, in particular:\nIntroduction to DFT\nIntroduction to periodic problems\nAnalysis of plane-wave DFT\nAnalysis of SCF convergence\nExercises","category":"page"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"DFT in a nutshell by Kieron Burke and Lucas Wagner: Short tutorial-style article introducing the basic DFT setting, basic equations and terminology. Great introduction from the physical / chemical perspective.\nWorkshop on mathematics and numerics of DFT: Two-day workshop at MIT centred around DFTK by M. F. Herbst, in particular the summary of DFT theory.","category":"page"},{"location":"guide/introductory_resources/#Textbooks","page":"Introductory resources","title":"Textbooks","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Electronic Structure: Basic theory and practical methods by R. M. Martin (Cambridge University Press, 2004): Standard textbook introducing most common methods of the field (lattices, pseudopotentials, DFT, ...) from the perspective of a physicist.\nA Mathematical Introduction to Electronic Structure Theory by L. Lin and J. Lu (SIAM, 2019): Monograph attacking DFT from a mathematical angle. Covers topics such as DFT, pseudos, SCF, response, ...","category":"page"},{"location":"guide/introductory_resources/#Recordings","page":"Introductory resources","title":"Recordings","text":"","category":"section"},{"location":"guide/introductory_resources/","page":"Introductory resources","title":"Introductory resources","text":"Julia for Materials Modelling by M. F. Herbst: One-hour talk providing an overview of materials modelling tools for Julia. Key features of DFTK are highlighted as part of the talk. Pluto notebooks\nDFTK: A Julian approach for simulating electrons in solids by M. F. Herbst: Pre-recorded talk for JuliaCon 2020. Assumes no knowledge about DFT and gives the broad picture of DFTK. Slides.\nJuliacon 2021 DFT workshop by M. F. Herbst: Three-hour workshop session at the 2021 Juliacon providing a mathematical look on DFT, SCF solution algorithms as well as the integration of DFTK into the Julia package ecosystem. Material starts to become a little outdated. Workshop material","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"EditURL = \"../../../examples/wannier.jl\"","category":"page"},{"location":"examples/wannier/#Wannierization-using-Wannier.jl-or-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"DFTK features an interface with the programs Wannier.jl and Wannier90, in order to compute maximally-localized Wannier functions (MLWFs) from an initial self consistent field calculation. All processes are handled by calling the routine wannier_model (for Wannier.jl) or run_wannier90 (for Wannier90).","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"warning: No guarantees on Wannier interface\nThis code is at an early stage and has so far not been fully tested. Bugs are likely and we welcome issues in case you find any!","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example shows how to obtain the MLWFs corresponding to the first five bands of graphene. Since the bands 2 to 11 are entangled, 15 bands are first computed to obtain 5 MLWFs by a disantanglement procedure.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using DFTK\nusing Plots\nusing Unitful\nusing UnitfulAtomic\n\nd = 10u\"Å\"\na = 2.641u\"Å\" # Graphene Lattice constant\nlattice = [a -a/2 0;\n 0 √3*a/2 0;\n 0 0 d]\n\nC = ElementPsp(:C; psp=load_psp(\"hgh/pbe/c-q4\"))\natoms = [C, C]\npositions = [[0.0, 0.0, 0.0], [1//3, 2//3, 0.0]]\nmodel = model_PBE(lattice, atoms, positions)\nbasis = PlaneWaveBasis(model; Ecut=15, kgrid=[5, 5, 1])\nnbandsalg = AdaptiveBands(basis.model; n_bands_converge=15)\nscfres = self_consistent_field(basis; nbandsalg, tol=1e-5);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Plot bandstructure of the system","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"bands = compute_bands(scfres; kline_density=10)\nplot_bandstructure(bands)","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier.jl","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier.jl","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Now we use the wannier_model routine to generate a Wannier.jl model that can be used to perform the wannierization procedure. For now, this model generation produces file in the Wannier90 convention, where all files are named with the same prefix and only differ by their extensions. By default all generated input and output files are stored in the subfolder \"wannierjl\" under the prefix \"wannier\" (i.e. \"wannierjl/wannier.win\", \"wannierjl/wannier.wout\", etc.). A different file prefix can be given with the keyword argument fileprefix as shown below.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We now produce a simple Wannier model for 5 MLFWs.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For a good MLWF, we need to provide initial projections that resemble the expected shape of the Wannier functions. Here we will use:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"3 bond-centered 2s hydrogenic orbitals for the expected σ bonds\n2 atom-centered 2pz hydrogenic orbitals for the expected π bands","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using Wannier # Needed to make Wannier.Model available","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"From chemical intuition, we know that the bonds with the lowest energy are:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"the 3 σ bonds,\nthe π and π* bonds.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We provide relevant initial projections to help Wannierization converge to functions with a similar shape.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 0, 0, C.Z)\npz_guess(center) = DFTK.HydrogenicWannierProjection(center, 2, 1, 0, C.Z)\nprojections = [\n # Note: fractional coordinates for the centers!\n # 3 bond-centered 2s hydrogenic orbitals to imitate σ bonds\n s_guess((positions[1] + positions[2]) / 2),\n s_guess((positions[1] + positions[2] + [0, -1, 0]) / 2),\n s_guess((positions[1] + positions[2] + [-1, -1, 0]) / 2),\n # 2 atom-centered 2pz hydrogenic orbitals\n pz_guess(positions[1]),\n pz_guess(positions[2]),\n]","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Wannierize:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"wannier_model = Wannier.Model(scfres;\n fileprefix=\"wannier/graphene\",\n n_bands=scfres.n_bands_converge,\n n_wannier=5,\n projections,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1) # maximum frozen window, for example 1 eV above Fermi level","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Once we have the wannier_model, we can use the functions in the Wannier.jl package:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Compute MLWF:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"U = disentangle(wannier_model, max_iter=200);\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Inspect localization before and after Wannierization:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"omega(wannier_model)\nomega(wannier_model, U)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Build a Wannier interpolation model:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"kpath = irrfbz_path(model)\ninterp_model = Wannier.InterpModel(wannier_model; kpath=kpath)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"And so on... Refer to the Wannier.jl documentation for further examples.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files when done.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"examples/wannier/#Custom-initial-guesses","page":"Wannierization using Wannier.jl or Wannier90","title":"Custom initial guesses","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can also provide custom initial guesses for Wannierization, by passing a callable function in the projections array. The function receives the basis and a list of points (fractional coordinates in reciprocal space), and returns the Fourier transform of the initial guess function evaluated at each point.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"For example, we could use Gaussians for the σ and pz guesses with the following code:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"s_guess(center) = DFTK.GaussianWannierProjection(center)\nfunction pz_guess(center)\n # Approximate with two Gaussians offset by 0.5 Å from the center of the atom\n offset = model.inv_lattice * [0, 0, austrip(0.5u\"Å\")]\n center1 = center + offset\n center2 = center - offset\n # Build the custom projector\n (basis, ps) -> DFTK.GaussianWannierProjection(center1)(basis, ps) - DFTK.GaussianWannierProjection(center2)(basis, ps)\nend\n# Feed to Wannier via the `projections` as before...","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"This example assumes that Wannier.jl version 0.3.2 is used, and may need to be updated to accomodate for changes in Wannier.jl.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"Note: Some parameters supported by Wannier90 may have to be passed to Wannier.jl differently, for example the max number of iterations is passed to disentangle in Wannier.jl, but as num_iter to run_wannier90.","category":"page"},{"location":"examples/wannier/#Wannierization-with-Wannier90","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization with Wannier90","text":"","category":"section"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"We can use the run_wannier90 routine to generate all required files and perform the wannierization procedure:","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"using wannier90_jll # Needed to make run_wannier90 available\nrun_wannier90(scfres;\n fileprefix=\"wannier/graphene\",\n n_wannier=5,\n projections,\n num_print_cycles=25,\n num_iter=200,\n #\n dis_win_max=19.0,\n dis_froz_max=ustrip(auconvert(u\"eV\", scfres.εF))+1, # 1 eV above Fermi level\n dis_num_iter=300,\n dis_mix_ratio=1.0,\n #\n wannier_plot=true,\n wannier_plot_format=\"cube\",\n wannier_plot_supercell=5,\n write_xyz=true,\n translate_home_cell=true,\n );\nnothing #hide","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"As can be observed standard optional arguments for the disentanglement can be passed directly to run_wannier90 as keyword arguments.","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"(Delete temporary files.)","category":"page"},{"location":"examples/wannier/","page":"Wannierization using Wannier.jl or Wannier90","title":"Wannierization using Wannier.jl or Wannier90","text":"rm(\"wannier\", recursive=true)","category":"page"},{"location":"developer/setup/#Developer-setup","page":"Developer setup","title":"Developer setup","text":"","category":"section"},{"location":"developer/setup/#Source-code-installation","page":"Developer setup","title":"Source code installation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you want to start developing DFTK it is highly recommended that you setup the sources in a way such that Julia can automatically keep track of your changes to the DFTK code files during your development. This means you should not Pkg.add your package, but use Pkg.develop instead. With this setup also tools such as Revise.jl can work properly. Note that using Revise.jl is highly recommended since this package automatically refreshes changes to the sources in an active Julia session (see its docs for more details).","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"To achieve such a setup you have two recommended options:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Clone DFTK into a location of your choice\n$ git clone https://github.com/JuliaMolSim/DFTK.jl /some/path/\nWhenever you want to use exactly this development version of DFTK in a Julia environment (e.g. the global one) add it as a develop package:\nimport Pkg\nPkg.develop(\"/some/path/\")\nTo run a script or start a Julia REPL using exactly this source tree as the DFTK version, use the --project flag of Julia, see this documentation for details. For example to start a Julia REPL with this version of DFTK use\n$ julia --project=/some/path/\nThe advantage of this method is that you can easily have multiple clones of DFTK with potentially different modifications made.\nAdd a development version of DFTK to the global Julia environment:\nimport Pkg\nPkg.develop(\"DFTK\")\nThis clones DFTK to the path ~/.julia/dev/DFTK\" (on Linux). Note that with this method you cannot install both the stable and the development version of DFTK into your global environment.","category":"page"},{"location":"developer/setup/#Disabling-precompilation","page":"Developer setup","title":"Disabling precompilation","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"For the best experience in using DFTK we employ PrecompileTools.jl to reduce the time to first SCF. However, spending the additional time for precompiling DFTK is usually not worth it during development. We therefore recommend disabling precompilation in a development setup. See the PrecompileTools documentation for detailed instructions how to do this.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"At the time of writing dropping a file LocalPreferences.toml in DFTK's root folder (next to the Project.toml) with the following contents is sufficient:","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"[DFTK]\nprecompile_workload = false","category":"page"},{"location":"developer/setup/#Running-the-tests","page":"Developer setup","title":"Running the tests","text":"","category":"section"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"We use TestItemRunner to manage the tests. It reduces the risk to have undefined behavior by preventing tests from being run in global scope.","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Moreover, it allows for greater flexibility by providing ways to launch a specific subset of the tests. For instance, to launch core functionality tests, one can use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using TestEnv # Optional: automatically installs required packages\nTestEnv.activate() # for tests in a temporary environment.\nusing TestItemRunner\ncd(\"test\") # By default, the following macro runs everything from the parent folder.\n@run_package_tests filter = ti -> :core ∈ ti.tags","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"Or to only run the tests of a particular file serialisation.jl use","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"@run_package_tests filter = ti -> occursin(\"serialisation.jl\", ti.filename)","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"If you need to write tests, note that you can create modules with @testsetup. To use a function my_function of a module MySetup in a @testitem, you can import it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using .MySetup: my_function","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"It is also possible to use functions from another module within a module. But for this the order of the modules in the setup keyword of @testitem is important: you have to add the module that will be used before the module using it. From the latter, you can then use it with","category":"page"},{"location":"developer/setup/","page":"Developer setup","title":"Developer setup","text":"using ..MySetup: my_function","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"EditURL = \"../../../examples/custom_potential.jl\"","category":"page"},{"location":"examples/custom_potential/#custom-potential","page":"Custom potential","title":"Custom potential","text":"","category":"section"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We solve the 1D Gross-Pitaevskii equation with a custom potential. This is similar to Gross-Pitaevskii equation in 1D example and we show how to define local potentials attached to atoms, which allows for instance to compute forces. The custom potential is actually already defined as ElementGaussian in DFTK, and could be used as is.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"using DFTK\nusing LinearAlgebra","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"First, we define a new element which represents a nucleus generating a Gaussian potential.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"struct CustomPotential <: DFTK.Element\n α # Prefactor\n L # Width of the Gaussian nucleus\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Some default values","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"CustomPotential() = CustomPotential(1.0, 0.5);\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We extend the two methods providing access to the real and Fourier representation of the potential to DFTK.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"function DFTK.local_potential_real(el::CustomPotential, r::Real)\n -el.α / (√(2π) * el.L) * exp(- (r / el.L)^2 / 2)\nend\nfunction DFTK.local_potential_fourier(el::CustomPotential, p::Real)\n # = ∫ V(r) exp(-ix⋅p) dx\n -el.α * exp(- (p * el.L)^2 / 2)\nend","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tip: Gaussian potentials and DFTK\nDFTK already implements CustomPotential in form of the DFTK.ElementGaussian, so this explicit re-implementation is only provided for demonstration purposes.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We set up the lattice. For a 1D case we supply two zero lattice vectors","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"In this example, we want to generate two Gaussian potentials generated by two \"nuclei\" localized at positions x_1 and x_2, that are expressed in 01) in fractional coordinates. x_1 - x_2 should be different from 05 to break symmetry and get nonzero forces.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"x1 = 0.2\nx2 = 0.8\npositions = [[x1, 0, 0], [x2, 0, 0]]\ngauss = CustomPotential()\natoms = [gauss, gauss];\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We setup a Gross-Pitaevskii model","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"C = 1.0\nα = 2;\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n AtomicLocal(),\n LocalNonlinearity(ρ -> C * ρ^α)]\nmodel = Model(lattice, atoms, positions; n_electrons, terms,\n spin_polarization=:spinless); # use \"spinless electrons\"\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"We discretize using a moderate Ecut and run a SCF algorithm to compute forces afterwards. As there is no ionic charge associated to gauss we have to specify a starting density and we choose to start from a zero density.","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"basis = PlaneWaveBasis(model; Ecut=500, kgrid=(1, 1, 1))\nρ = zeros(eltype(basis), basis.fft_size..., 1)\nscfres = self_consistent_field(basis; tol=1e-5, ρ)\nscfres.energies","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Computing the forces can then be done as usual:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"compute_forces(scfres)","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract the converged total local potential","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"tot_local_pot = DFTK.total_local_potential(scfres.ham)[:, 1, 1]; # use only dimension 1\nnothing #hide","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Extract other quantities before plotting them","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ρ = scfres.ρ[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1] # first k-point, all G components, first eigenvector","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/custom_potential/","page":"Custom potential","title":"Custom potential","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\n\nusing Plots\nx = a * vec(first.(DFTK.r_vectors(basis)))\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")\nplot!(p, x, tot_local_pot, label=\"tot local pot\")","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"EditURL = \"../../../examples/convergence_study.jl\"","category":"page"},{"location":"examples/convergence_study/#Performing-a-convergence-study","page":"Performing a convergence study","title":"Performing a convergence study","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This example shows how to perform a convergence study to find an appropriate discretisation parameters for the Brillouin zone (kgrid) and kinetic energy cutoff (Ecut), such that the simulation results are converged to a desired accuracy tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Such a convergence study is generally performed by starting with a reasonable base line value for kgrid and Ecut and then increasing these parameters (i.e. using finer discretisations) until a desired property (such as the energy) changes less than the tolerance.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"This procedure must be performed for each discretisation parameter. Beyond the Ecut and the kgrid also convergence in the smearing temperature or other numerical parameters should be checked. For simplicity we will neglect this aspect in this example and concentrate on Ecut and kgrid. Moreover we will restrict ourselves to using the same number of k-points in each dimension of the Brillouin zone.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the objective of this study we consider bulk platinum. For running the SCF conveniently we define a function:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using DFTK\nusing LinearAlgebra\nusing Statistics\n\nfunction run_scf(; a=5.0, Ecut, nkpt, tol)\n atoms = [ElementPsp(:Pt; psp=load_psp(\"hgh/lda/Pt-q10\"))]\n position = [zeros(3)]\n lattice = a * Matrix(I, 3, 3)\n\n model = model_LDA(lattice, atoms, position; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut, kgrid=(nkpt, nkpt, nkpt))\n println(\"nkpt = $nkpt Ecut = $Ecut\")\n self_consistent_field(basis; is_converged=ScfConvergenceEnergy(tol))\nend;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Moreover we define some parameters. To make the calculations run fast for the automatic generation of this documentation we target only a convergence to 1e-2. In practice smaller tolerances (and thus larger upper bounds for nkpts and Ecuts are likely needed.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-2 # Tolerance to which we target to converge\nnkpts = 1:7 # K-point range checked for convergence\nEcuts = 10:2:24; # Energy cutoff range checked for convergence\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"As the first step we converge in the number of k-points employed in each dimension of the Brillouin zone …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_kgrid(nkpts; Ecut, tol)\n energies = [run_scf(; nkpt, tol=tol/10, Ecut).energies.total for nkpt in nkpts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; nkpts=nkpts[1:end-1], errors, nkpt_conv=nkpts[iconv])\nend\nresult = converge_kgrid(nkpts; Ecut=mean(Ecuts), tol)\nnkpt_conv = result.nkpt_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot the obtained convergence:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"using Plots\nplot(result.nkpts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"k-grid\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"We continue to do the convergence in Ecut using the suggested k-point grid.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"function converge_Ecut(Ecuts; nkpt, tol)\n energies = [run_scf(; nkpt, tol=tol/100, Ecut).energies.total for Ecut in Ecuts]\n errors = abs.(energies[1:end-1] .- energies[end])\n iconv = findfirst(errors .< tol)\n (; Ecuts=Ecuts[1:end-1], errors, Ecut_conv=Ecuts[iconv])\nend\nresult = converge_Ecut(Ecuts; nkpt=nkpt_conv, tol)\nEcut_conv = result.Ecut_conv","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"… and plot it:","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"plot(result.Ecuts, result.errors, dpi=300, lw=3, m=:o, yaxis=:log,\n xlabel=\"Ecut\", ylabel=\"energy absolute error\")","category":"page"},{"location":"examples/convergence_study/#A-more-realistic-example.","page":"Performing a convergence study","title":"A more realistic example.","text":"","category":"section"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"Repeating the above exercise for more realistic settings, namely …","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"tol = 1e-4 # Tolerance to which we target to converge\nnkpts = 1:20 # K-point range checked for convergence\nEcuts = 20:1:50;\nnothing #hide","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"…one obtains the following two plots for the convergence in kpoints and Ecut.","category":"page"},{"location":"examples/convergence_study/","page":"Performing a convergence study","title":"Performing a convergence study","text":"\n","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"EditURL = \"../../../examples/collinear_magnetism.jl\"","category":"page"},{"location":"examples/collinear_magnetism/#Collinear-spin-and-magnetic-systems","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"","category":"section"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In this example we consider iron in the BCC phase. To show that this material is ferromagnetic we will model it once allowing collinear spin polarization and once without and compare the resulting SCF energies. In particular the ground state can only be found if collinear spins are allowed.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"First we setup BCC iron without spin polarization using a single iron atom inside the unit cell.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using DFTK\n\na = 5.42352 # Bohr\nlattice = a / 2 * [[-1 1 1];\n [ 1 -1 1];\n [ 1 1 -1]]\natoms = [ElementPsp(:Fe; psp=load_psp(\"hgh/lda/Fe-q8.hgh\"))]\npositions = [zeros(3)];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"To get the ground-state energy we use an LDA model and rather moderate discretisation parameters.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"kgrid = [3, 3, 3] # k-point grid (Regular Monkhorst-Pack grid)\nEcut = 15 # kinetic energy cutoff in Hartree\nmodel_nospin = model_LDA(lattice, atoms, positions, temperature=0.01)\nbasis_nospin = PlaneWaveBasis(model_nospin; kgrid, Ecut)\n\nscfres_nospin = self_consistent_field(basis_nospin; tol=1e-4, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres_nospin.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Since we did not specify any initial magnetic moment on the iron atom, DFTK will automatically assume that a calculation with only spin-paired electrons should be performed. As a result the obtained ground state features no spin-polarization.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Now we repeat the calculation, but give the iron atom an initial magnetic moment. For specifying the magnetic moment pass the desired excess of spin-up over spin-down electrons at each centre to the Model and the guess density functions. In this case we seek the state with as many spin-parallel d-electrons as possible. In our pseudopotential model the 8 valence electrons are 2 pair of s-electrons, 1 pair of d-electrons and 4 unpaired d-electrons giving a desired magnetic moment of 4 at the iron centre. The structure (i.e. pair mapping and order) of the magnetic_moments array needs to agree with the atoms array and 0 magnetic moments need to be specified as well.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"magnetic_moments = [4];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"tip: Units of the magnetisation and magnetic moments in DFTK\nUnlike all other quantities magnetisation and magnetic moments in DFTK are given in units of the Bohr magneton μ_B, which in atomic units has the value frac12. Since μ_B is (roughly) the magnetic moment of a single electron the advantage is that one can directly think of these quantities as the excess of spin-up electrons or spin-up electron density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We repeat the calculation using the same model as before. DFTK now detects the non-zero moment and switches to a collinear calculation.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"model = model_LDA(lattice, atoms, positions; magnetic_moments, temperature=0.01)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nρ0 = guess_density(basis, magnetic_moments)\nscfres = self_consistent_field(basis, tol=1e-6; ρ=ρ0, mixing=KerkerDosMixing());\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"scfres.energies","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: Model and magnetic moments\nDFTK does not store the magnetic_moments inside the Model, but only uses them to determine the lattice symmetries. This step was taken to keep Model (which contains the physical model) independent of the details of the numerical details such as the initial guess for the spin density.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"In direct comparison we notice the first, spin-paired calculation to be a little higher in energy","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"println(\"No magnetization: \", scfres_nospin.energies.total)\nprintln(\"Magnetic case: \", scfres.energies.total)\nprintln(\"Difference: \", scfres.energies.total - scfres_nospin.energies.total);\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Notice that with the small cutoffs we use to generate the online documentation the calculation is far from converged. With more realistic parameters a larger energy difference of about 0.1 Hartree is obtained.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"The spin polarization in the magnetic case is visible if we consider the occupation of the spin-up and spin-down Kohn-Sham orbitals. Especially for the d-orbitals these differ rather drastically. For example for the first k-point:","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"iup = 1\nidown = iup + length(scfres.basis.kpoints) ÷ 2\n@show scfres.occupation[iup][1:7]\n@show scfres.occupation[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the eigenvalues differ","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"@show scfres.eigenvalues[iup][1:7]\n@show scfres.eigenvalues[idown][1:7];\nnothing #hide","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"note: ``k``-points in collinear calculations\nFor collinear calculations the kpoints field of the PlaneWaveBasis object contains each k-point coordinate twice, once associated with spin-up and once with down-down. The list first contains all spin-up k-points and then all spin-down k-points, such that iup and idown index the same k-point, but differing spins.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"We can observe the spin-polarization by looking at the density of states (DOS) around the Fermi level, where the spin-up and spin-down DOS differ.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Plots\nbands_666 = compute_bands(scfres, MonkhorstPack(6, 6, 6)) # Increase kgrid to get nicer DOS.\nplot_dos(bands_666)","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Note that if same k-grid as SCF should be employed, a simple plot_dos(scfres) is sufficient.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"Similarly the band structure shows clear differences between both spin components.","category":"page"},{"location":"examples/collinear_magnetism/","page":"Collinear spin and magnetic systems","title":"Collinear spin and magnetic systems","text":"using Unitful\nusing UnitfulAtomic\nbands_kpath = compute_bands(scfres; kline_density=6)\nplot_bandstructure(bands_kpath)","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"EditURL = \"../../../examples/dielectric.jl\"","category":"page"},{"location":"examples/dielectric/#Eigenvalues-of-the-dielectric-matrix","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"","category":"section"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"We compute a few eigenvalues of the dielectric matrix (q=0, ω=0) iteratively.","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"using DFTK\nusing Plots\nusing KrylovKit\nusing Printf\n\n# Calculation parameters\nkgrid = [1, 1, 1]\nEcut = 5\n\n# Silicon lattice\na = 10.26\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Compute the dielectric operator without symmetries\nmodel = model_LDA(lattice, atoms, positions, symmetries=false)\nbasis = PlaneWaveBasis(model; Ecut, kgrid)\nscfres = self_consistent_field(basis, tol=1e-8);\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"Applying ε^ (1- χ_0 K) …","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"function eps_fun(δρ)\n δV = apply_kernel(basis, δρ; ρ=scfres.ρ)\n χ0δV = apply_χ0(scfres, δV)\n δρ - χ0δV\nend;\nnothing #hide","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"… eagerly diagonalizes the subspace matrix at each iteration","category":"page"},{"location":"examples/dielectric/","page":"Eigenvalues of the dielectric matrix","title":"Eigenvalues of the dielectric matrix","text":"eigsolve(eps_fun, randn(size(scfres.ρ)), 5, :LM; eager=true, verbosity=3);\nnothing #hide","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"EditURL = \"../../../examples/arbitrary_floattype.jl\"","category":"page"},{"location":"examples/arbitrary_floattype/#Arbitrary-floating-point-types","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"","category":"section"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"Since DFTK is completely generic in the floating-point type in its routines, there is no reason to perform the computation using double-precision arithmetic (i.e.Float64). Other floating-point types such as Float32 (single precision) are readily supported as well. On top of that we already reported[HLC2020] calculations in DFTK using elevated precision from DoubleFloats.jl or interval arithmetic using IntervalArithmetic.jl. In this example, however, we will concentrate on single-precision computations with Float32.","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"The setup of such a reduced-precision calculation is basically identical to the regular case, since Julia automatically compiles all routines of DFTK at the precision, which is used for the lattice vectors. Apart from setting up the model with an explicit cast of the lattice vectors to Float32, there is thus no change in user code required:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"[HLC2020]: M. F. Herbst, A. Levitt, E. Cancès. A posteriori error estimation for the non-self-consistent Kohn-Sham equations ArXiv 2004.13549","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"using DFTK\n\n# Setup silicon lattice\na = 10.263141334305942 # lattice constant in Bohr\nlattice = a / 2 .* [[0 1 1.]; [1 0 1.]; [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\n\n# Cast to Float32, setup model and basis\nmodel = model_LDA(lattice, atoms, positions)\nbasis = PlaneWaveBasis(convert(Model{Float32}, model), Ecut=7, kgrid=[4, 4, 4])\n\n# Run the SCF\nscfres = self_consistent_field(basis, tol=1e-3);\nnothing #hide","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"To check the calculation has really run in Float32, we check the energies and density are expressed in this floating-point type:","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"scfres.energies","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.energies.total)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"eltype(scfres.ρ)","category":"page"},{"location":"examples/arbitrary_floattype/","page":"Arbitrary floating-point types","title":"Arbitrary floating-point types","text":"note: Generic linear algebra routines\nFor more unusual floating-point types (like IntervalArithmetic or DoubleFloats), which are not directly supported in the standard LinearAlgebra and FFTW libraries one additional step is required: One needs to explicitly enable the generic versions of standard linear-algebra operations like cholesky or qr or standard fft operations, which DFTK requires. THis is done by loading the GenericLinearAlgebra package in the user script (i.e. just add ad using GenericLinearAlgebra next to your using DFTK call).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"EditURL = \"../../../examples/gross_pitaevskii.jl\"","category":"page"},{"location":"examples/gross_pitaevskii/#gross-pitaevskii","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"In this example we will use DFTK to solve the Gross-Pitaevskii equation, and use this opportunity to explore a few internals.","category":"page"},{"location":"examples/gross_pitaevskii/#The-model","page":"Gross-Pitaevskii equation in one dimension","title":"The model","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The Gross-Pitaevskii equation (GPE) is a simple non-linear equation used to model bosonic systems in a mean-field approach. Denoting by ψ the effective one-particle bosonic wave function, the time-independent GPE reads in atomic units:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":" H ψ = left(-frac12 Δ + V + 2 C ψ^2right) ψ = μ ψ qquad ψ_L^2 = 1","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"where C provides the strength of the boson-boson coupling. It's in particular a favorite model of applied mathematicians because it has a structure simpler than but similar to that of DFT, and displays interesting behavior (especially in higher dimensions with magnetic fields, see Gross-Pitaevskii equation with external magnetic field).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We wish to model this equation in 1D using DFTK. First we set up the lattice. For a 1D case we supply two zero lattice vectors,","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"a = 10\nlattice = a .* [[1 0 0.]; [0 0 0]; [0 0 0]];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"which is special cased in DFTK to support 1D models.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"For the potential term V we pick a harmonic potential. We use the function ExternalFromReal which uses cartesian coordinates ( see Lattices and lattice vectors).","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"pot(x) = (x - a/2)^2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We setup each energy term in sequence: kinetic, potential and nonlinear term. For the non-linearity we use the LocalNonlinearity(f) term of DFTK, with f(ρ) = C ρ^α. This object introduces an energy term C ρ(r)^α dr to the total energy functional, thus a potential term α C ρ^α-1. In our case we thus need the parameters","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"C = 1.0\nα = 2;\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"… and with this build the model","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using DFTK\nusing LinearAlgebra\n\nn_electrons = 1 # Increase this for fun\nterms = [Kinetic(),\n ExternalFromReal(r -> pot(r[1])),\n LocalNonlinearity(ρ -> C * ρ^α),\n]\nmodel = Model(lattice; n_electrons, terms, spin_polarization=:spinless); # spinless electrons\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We discretize using a moderate Ecut (For 1D values up to 5000 are completely fine) and run a direct minimization algorithm:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"basis = PlaneWaveBasis(model, Ecut=500, kgrid=(1, 1, 1))\nscfres = direct_minimization(basis, tol=1e-8) # This is a constrained preconditioned LBFGS\nscfres.energies","category":"page"},{"location":"examples/gross_pitaevskii/#Internals","page":"Gross-Pitaevskii equation in one dimension","title":"Internals","text":"","category":"section"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We use the opportunity to explore some of DFTK internals.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Extract the converged density and the obtained wave function:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ρ = real(scfres.ρ)[:, 1, 1, 1] # converged density, first spin component\nψ_fourier = scfres.ψ[1][:, 1]; # first k-point, all G components, first eigenvector\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Transform the wave function to real space and fix the phase:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ = ifft(basis, basis.kpoints[1], ψ_fourier)[:, 1, 1]\nψ /= (ψ[div(end, 2)] / abs(ψ[div(end, 2)]));\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Check whether ψ is normalised:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"x = a * vec(first.(DFTK.r_vectors(basis)))\nN = length(x)\ndx = a / N # real-space grid spacing\n@assert sum(abs2.(ψ)) * dx ≈ 1.0","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The density is simply built from ψ:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(scfres.ρ - abs2.(ψ))","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"We summarize the ground state in a nice plot:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"using Plots\n\np = plot(x, real.(ψ), label=\"real(ψ)\")\nplot!(p, x, imag.(ψ), label=\"imag(ψ)\")\nplot!(p, x, ρ, label=\"ρ\")","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"The energy_hamiltonian function can be used to get the energy and effective Hamiltonian (derivative of the energy with respect to the density matrix) of a particular state (ψ, occupation). The density ρ associated to this state is precomputed and passed to the routine as an optimization.","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"E, ham = energy_hamiltonian(basis, scfres.ψ, scfres.occupation; ρ=scfres.ρ)\n@assert E.total == scfres.energies.total","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Now the Hamiltonian contains all the blocks corresponding to k-points. Here, we just have one k-point:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H = ham.blocks[1];\nnothing #hide","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"H can be used as a linear operator (efficiently using FFTs), or converted to a dense matrix:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"ψ11 = scfres.ψ[1][:, 1] # first k-point, first eigenvector\nHmat = Array(H) # This is now just a plain Julia matrix,\n# which we can compute and store in this simple 1D example\n@assert norm(Hmat * ψ11 - H * ψ11) < 1e-10","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Let's check that ψ11 is indeed an eigenstate:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"norm(H * ψ11 - dot(ψ11, H * ψ11) * ψ11)","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"Build a finite-differences version of the GPE operator H, as a sanity check:","category":"page"},{"location":"examples/gross_pitaevskii/","page":"Gross-Pitaevskii equation in one dimension","title":"Gross-Pitaevskii equation in one dimension","text":"A = Array(Tridiagonal(-ones(N - 1), 2ones(N), -ones(N - 1)))\nA[1, end] = A[end, 1] = -1\nK = A / dx^2 / 2\nV = Diagonal(pot.(x) + C .* α .* (ρ.^(α-1)))\nH_findiff = K + V;\nmaximum(abs.(H_findiff*ψ - (dot(ψ, H_findiff*ψ) / dot(ψ, ψ)) * ψ))","category":"page"},{"location":"guide/installation/#Installation","page":"Installation","title":"Installation","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"In case you don't have a working Julia installation yet, first download the Julia binaries and follow the Julia installation instructions. At least Julia 1.9 is required for DFTK.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"Afterwards you can install DFTK like any other package in Julia. For example run in your Julia REPL terminal:","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add(\"DFTK\")","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"which will install the latest DFTK release. DFTK is continuously tested on Debian, Ubuntu, mac OS and Windows and should work on these operating systems out of the box. With this you are all set to run the code in the Tutorial or the examples directory.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"For obtaining a good user experience as well as peak performance some optional steps see the next sections on Recommended packages and Selecting the employed linear algebra and FFT backend. See also the details on Using DFTK on compute clusters if you are not installing DFTK on a laptop or workstation.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: DFTK version compatibility\nWe follow the usual semantic versioning conventions of Julia. Therefore all DFTK versions with the same minor (e.g. all 0.6.x) should be API compatible, while different minors (e.g. 0.7.y) might have breaking changes. These will also be announced in the release notes.","category":"page"},{"location":"guide/installation/#Optional:-Recommended-packages","page":"Installation","title":"Optional: Recommended packages","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"While not strictly speaking required to use DFTK it is usually convenient to install a couple of standard packages from the AtomsBase ecosystem to make working with DFT more convenient. Examples are","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"AtomsIO and AtomsIOPython, which allow you to read (and write) a large range of standard file formats for atomistic structures. In particular AtomsIO is lightweight and highly recommended.\nASEconvert, which integrates DFTK with a number of convenience features of the ASE, the atomistic simulation environment. See Creating and modelling metallic supercells for an example where ASE is used within a DFTK workflow.","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"You can install these packages using","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"import Pkg\nPkg.add([\"AtomsIO\", \"AtomsIOPython\", \"ASEconvert\"])","category":"page"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"tip: Python dependencies in Julia\nThere are two main packages to use Python dependencies from Julia, namely PythonCall and PyCall. These packages can be used side by side, but some care is needed. By installing AtomsIOPython and ASEconvert you indirectly install PythonCall which these two packages use to manage their third-party Python dependencies. This might cause complications if you plan on using PyCall-based packages (such as PyPlot) In contrast AtomsIO is free of any Python dependencies and can be safely installed in any case.","category":"page"},{"location":"guide/installation/#Optional:-Selecting-the-employed-linear-algebra-and-FFT-backend","page":"Installation","title":"Optional: Selecting the employed linear algebra and FFT backend","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"The default Julia setup uses the BLAS, LAPACK, MPI and FFT libraries shipped as part of the Julia package ecosystem. The default setup works, but to obtain peak performance for your hardware additional steps may be necessary, e.g. to employ the vendor-specific BLAS or FFT libraries. See the documentation of the MKL, FFTW, MPI and libblastrampoline packages for details on switching the underlying backend library. If you want to obtain a summary of the backend libraries currently employed by DFTK run the DFTK.versioninfo() command. See also Using DFTK on compute clusters, where some of this is explained in more details.","category":"page"},{"location":"guide/installation/#Installation-for-DFTK-development","page":"Installation","title":"Installation for DFTK development","text":"","category":"section"},{"location":"guide/installation/","page":"Installation","title":"Installation","text":"If you want to contribute to DFTK, see the Developer setup for some additional recommendations on how to setup Julia and DFTK.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"EditURL = \"../../../examples/pseudopotentials.jl\"","category":"page"},{"location":"examples/pseudopotentials/#Pseudopotentials","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"section"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"(Image: ) (Image: )","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we'll look at how to use various pseudopotential (PSP) formats in DFTK and discuss briefly the utility and importance of pseudopotentials.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Currently, DFTK supports norm-conserving (NC) PSPs in separable (Kleinman-Bylander) form. Two file formats can currently be read and used: analytical Hartwigsen-Goedecker-Hutter (HGH) PSPs and numeric Unified Pseudopotential Format (UPF) PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In brief, the pseudopotential approach replaces the all-electron atomic potential with an effective atomic potential. In this pseudopotential, tightly-bound core electrons are completely eliminated (\"frozen\") and chemically-active valence electron wavefunctions are replaced with smooth pseudo-wavefunctions whose Fourier representations decay quickly. Both these transformations aim at reducing the number of Fourier modes required to accurately represent the wavefunction of the system, greatly increasing computational efficiency.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Different PSP generation codes produce various file formats which contain the same general quantities required for pesudopotential evaluation. HGH PSPs are constructed from a fixed functional form based on Gaussians, and the files simply tablulate various coefficients fitted for a given element. UPF PSPs take a more flexible approach where the functional form used to generate the PSP is arbitrary, and the resulting functions are tabulated on a radial grid in the file. The UPF file format is documented on the Quantum Espresso Website.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"In this example, we will compare the convergence of an analytical HGH PSP with a modern numeric norm-conserving PSP in UPF format from PseudoDojo. Then, we will compare the bandstructure at the converged parameters calculated using the two PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"using DFTK\nusing Unitful\nusing Plots\nusing LazyArtifacts\nimport Main: @artifact_str # hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Here, we will use a Perdew-Wang LDA PSP from PseudoDojo, which is available in the JuliaMolSim PseudoLibrary. Directories in PseudoLibrary correspond to artifacts that you can load using artifact strings which evaluate to a filepath on your local machine where the artifact has been downloaded.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"note: Using the PseudoLibrary in your own calculations\nInstructions for using the PseudoLibrary in your own calculations can be found in its documentation.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"We load the HGH and UPF PSPs using load_psp, which determines the file format using the file extension. The artifact string literal resolves to the directory where the file is stored by the Artifacts system. So, if you have your own pseudopotential files, you can just provide the path to them as well.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"psp_hgh = load_psp(\"hgh/lda/si-q4.hgh\");\npsp_upf = load_psp(artifact\"pd_nc_sr_lda_standard_0.4.1_upf/Si.upf\");\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"First, we'll take a look at the energy cutoff convergence of these two pseudopotentials. For both pseudos, a reference energy is calculated with a cutoff of 140 Hartree, and SCF calculations are run at increasing cutoffs until 1 meV / atom convergence is reached.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The converged cutoffs are 26 Ha and 18 Ha for the HGH and UPF pseudos respectively. We see that the HGH pseudopotential is much harder, i.e. it requires a higher energy cutoff, than the UPF PSP. In general, numeric pseudopotentials tend to be softer than analytical pseudos because of the flexibility of sampling arbitrary functions on a grid.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"Next, to see that the different pseudopotentials give reasonbly similar results, we'll look at the bandstructures calculated using the HGH and UPF PSPs. Even though the convered cutoffs are higher, we perform these calculations with a cutoff of 12 Ha for both PSPs.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"function run_bands(psp)\n a = 10.26 # Silicon lattice constant in Bohr\n lattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\n Si = ElementPsp(:Si; psp)\n atoms = [Si, Si]\n positions = [ones(3)/8, -ones(3)/8]\n\n # These are (as you saw above) completely unconverged parameters\n model = model_LDA(lattice, atoms, positions; temperature=1e-2)\n basis = PlaneWaveBasis(model; Ecut=12, kgrid=(4, 4, 4))\n\n scfres = self_consistent_field(basis; tol=1e-4)\n bandplot = plot_bandstructure(compute_bands(scfres))\n (; scfres, bandplot)\nend;\nnothing #hide","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"The SCF and bandstructure calculations can then be performed using the two PSPs, where we notice in particular the difference in total energies.","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_hgh = run_bands(psp_hgh)\nresult_hgh.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"result_upf = run_bands(psp_upf)\nresult_upf.scfres.energies","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"But while total energies are not physical and thus allowed to differ, the bands (as an example for a physical quantity) are very similar for both pseudos:","category":"page"},{"location":"examples/pseudopotentials/","page":"Pseudopotentials","title":"Pseudopotentials","text":"plot(result_hgh.bandplot, result_upf.bandplot, titles=[\"HGH\" \"UPF\"], size=(800, 400))","category":"page"},{"location":"developer/symmetries/#Crystal-symmetries","page":"Crystal symmetries","title":"Crystal symmetries","text":"","category":"section"},{"location":"developer/symmetries/#Theory","page":"Crystal symmetries","title":"Theory","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"In this discussion we will only describe the situation for a monoatomic crystal mathcal C subset mathbb R^3, the extension being easy. A symmetry of the crystal is an orthogonal matrix W and a real-space vector w such that","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"W mathcalC + w = mathcalC","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries where W = 1 and w is a lattice vector are always assumed and ignored in the following.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can define a corresponding unitary operator U on L^2(mathbb R^3) with action","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":" (Uu)(x) = uleft( W x + w right)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We assume that the atomic potentials are radial and that any self-consistent potential also respects this symmetry, so that U commutes with the Hamiltonian.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This operator acts on a plane-wave as","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\n(U e^iqcdot x) (x) = e^iq cdot w e^i (W^T q) x\n= e^- i(S q) cdot tau e^i (S q) cdot x\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"where we set","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nS = W^T\ntau = -W^-1w\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"It follows that the Fourier transform satisfies","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"widehatUu(q) = e^- iq cdot tau widehat u(S^-1 q)","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(all of these equations being also valid in reduced coordinates). In particular, if e^ikcdot x u_k(x) is an eigenfunction, then by decomposing u_k over plane-waves e^i G cdot x one can see that e^i(S^T k) cdot x (U u_k)(x) is also an eigenfunction: we can choose","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"u_Sk = U u_k","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"This is used to reduce the computations needed. For a uniform sampling of the Brillouin zone (the reducible k-points), one can find a reduced set of k-points (the irreducible k-points) such that the eigenvectors at the reducible k-points can be deduced from those at the irreducible k-points.","category":"page"},{"location":"developer/symmetries/#Symmetrization","page":"Crystal symmetries","title":"Symmetrization","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Quantities that are calculated by summing over the reducible k points can be calculated by first summing over the irreducible k points and then symmetrizing. Let mathcalK_textreducible denote the reducible k-points sampling the Brillouin zone, mathcalS be the group of all crystal symmetries that leave this BZ mesh invariant (mathcalSmathcalK_textreducible = mathcalK_textreducible) and mathcalK be the irreducible k-points obtained from mathcalK_textreducible using the symmetries mathcalS. Clearly","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"mathcalK_textred = Sk S in mathcalS k in mathcalK","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let Q be a k-dependent quantity to sum (for instance, energies, densities, forces, etc). Q transforms in a particular way under symmetries: Q(Sk) = S(Q(k)) where the (linear) action of S on Q depends on the particular Q.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"beginaligned\nsum_k in mathcalK_textred Q(k)\n= sum_k in mathcalK sum_S text with Sk in mathcalK_textred S(Q(k)) \n= sum_k in mathcalK frac1N_mathcalSk sum_S in mathcalS S(Q(k))\n= frac1N_mathcalS sum_S in mathcalS\n left(sum_k in mathcalK fracN_mathcalSN_mathcalSk Q(k) right)\nendaligned","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Here, N_mathcalS = mathcalS is the total number of symmetry operations and N_mathcalSk denotes the number of operations such that leave k invariant. The latter operations form a subgroup of the group of all symmetry operations, sometimes called the small/little group of k. The factor fracN_mathcalSN_Sk, also equal to the ratio of number of reducible points encoded by this particular irreducible k to the total number of reducible points, determines the weight of each irreducible k point.","category":"page"},{"location":"developer/symmetries/#Example","page":"Crystal symmetries","title":"Example","text":"","category":"section"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using DFTK\na = 10.26\nlattice = a / 2 * [[0 1 1.];\n [1 0 1.];\n [1 1 0.]]\nSi = ElementPsp(:Si; psp=load_psp(\"hgh/lda/Si-q4\"))\natoms = [Si, Si]\npositions = [ones(3)/8, -ones(3)/8]\nEcut = 5\nkgrid = [4, 4, 4]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Let us demonstrate this in practice. We consider silicon, setup appropriately in the lattice, atoms and positions objects as in Tutorial and to reach a fast execution, we take a small Ecut of 5 and a [4, 4, 4] Monkhorst-Pack grid. First we perform the DFT calculation disabling symmetry handling","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_nosym = model_LDA(lattice, atoms, positions; symmetries=false)\nbasis_nosym = PlaneWaveBasis(model_nosym; Ecut, kgrid)\nscfres_nosym = @time self_consistent_field(basis_nosym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"and then redo it using symmetry (the default):","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"model_sym = model_LDA(lattice, atoms, positions)\nbasis_sym = PlaneWaveBasis(model_sym; Ecut, kgrid)\nscfres_sym = @time self_consistent_field(basis_sym, tol=1e-6)\nnothing # hide","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Clearly both yield the same energy but the version employing symmetry is faster, since less k-points are explicitly treated:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"(length(basis_sym.kpoints), length(basis_nosym.kpoints))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"Both SCFs would even agree in the convergence history if exact diagonalization was used for the eigensolver in each step of both SCFs. But since DFTK adjusts this diagtol value adaptively during the SCF to increase performance, a slightly different history is obtained. Try adding the keyword argument determine_diagtol=(args...; kwargs...) -> 1e-8 in each SCF call to fix the diagonalization tolerance to be 1e-8 for all SCF steps, which will result in an almost identical convergence history.","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"We can also explicitly verify both methods to yield the same density:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"using LinearAlgebra # hide\n(norm(scfres_sym.ρ - scfres_nosym.ρ),\n norm(values(scfres_sym.energies) .- values(scfres_nosym.energies)))","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The symmetries can be used to map reducible to irreducible points:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"ikpt_red = rand(1:length(basis_nosym.kpoints))\n# find a (non-unique) corresponding irreducible point in basis_nosym,\n# and the symmetry that relates them\nikpt_irred, symop = DFTK.unfold_mapping(basis_sym, basis_nosym.kpoints[ikpt_red])\n[basis_sym.kpoints[ikpt_irred].coordinate symop.S * basis_nosym.kpoints[ikpt_red].coordinate]","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"The eigenvalues match also:","category":"page"},{"location":"developer/symmetries/","page":"Crystal symmetries","title":"Crystal symmetries","text":"[scfres_sym.eigenvalues[ikpt_irred] scfres_nosym.eigenvalues[ikpt_red]]","category":"page"}] +} diff --git a/v0.6.17/siteinfo.js b/v0.6.17/siteinfo.js new file mode 100644 index 0000000000..f456f1395c --- /dev/null +++ b/v0.6.17/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.6.17"; diff --git a/v0.6.17/tricks/compute_clusters/index.html b/v0.6.17/tricks/compute_clusters/index.html new file mode 100644 index 0000000000..558d5bf8b3 --- /dev/null +++ b/v0.6.17/tricks/compute_clusters/index.html @@ -0,0 +1,117 @@ + +Using DFTK on compute clusters · DFTK.jl

    Using DFTK on compute clusters

    This chapter summarises a few tips and tricks for running on compute clusters. It assumes you have already installed Julia on the machine in question (see Julia downloads and Julia installation instructions).

    We will use EPFL's scitas clusters as examples, but the basic principles should apply to other systems as well.

    Julia depot path

    By default on Linux-based systems Julia puts all installed packages, including the binary packages into the path $HOME/.julia, which can easily take a few tens of GB. On many compute clusters the /home partition is on a shared filesystem (thus access is slower) and has a tight space quota. Usually it is therefore more advantageous to put Julia packages on a less persistent, faster filesystem. On many systems (such as EPFL scitas) this is the /scratch partition. In your ~/.bashrc or otherwise you should thus redirect the JULIA_DEPOT_PATH to be a subdirectory of /scratch.

    EPFL scitas. On scitas the right thing to do is to insert

    export JULIA_DEPOT_PATH="/scratch/$USER/.julia"

    into your ~/.bashrc.

    Installing DFTK into a local Julia environment

    When employing a compute cluster, it is often desirable to integrate with the matching cluster-specific libraries, such as vendor-specific versions of BLAS, LAPACK etc. This is easiest achieved by installing DFTK not into the global Julia environment, but instead bundle the installation and the cluster-specific configuration in a local, cluster-specific environment.

    On top of the discussion of the main Installation instructions, this requires one additional step, namely the use of a custom Julia package environment.

    Setting up a package environment. In the Julia REPL, create a new environment (essentially a new Julia project) using the following commands:

    import Pkg
    +Pkg.activate("path/to/new/environment")

    Replace path/to/new/environment with the directory where you wish to create the new environment. This will generate a folder containing Project.toml and Manifest.toml files. Both together provide a reproducible image of the packages you installed in your project. Once the activate call has been issued, you can than install packages as usual. E.g. use Pkg.add("DFTK") to install DFTK. The difference is that instead of tracking this in your global environment, the installations will be tracked in the local Project.toml and Manifest.toml files of the path/to/new/environment folder.

    To start a Julia shell directly with such this environment activated, run it as julia --project=path/to/new/environment.

    Updating an environment. Start Julia and activate the environment. Then run Pkg.update(), i.e.

    import Pkg
    +Pkg.activate("path/to/new/environment")
    +Pkg.update()

    For more information on Julia environments, see the respective documentation on Code loading and on Managing Environments.

    Setting up local preferences

    On cluster machines often highly optimised versions of BLAS, LAPACK, FFTW, MPI or other basic packages are provided by the cluster vendor or operator. These can be used with DFTK by configuring an appropriate LocalPreferences.toml file, which tells Julia where the cluster-specific libraries are located. The following sections explain how to generate such a LocalPreferences.toml specific for your cluster. Once this file has been generated and sits next to a Project.toml in a Julia environment, it ensures that the cluster-specific libraries are used instead of the default ones. Therefore this setup only needs to be done once per project.

    A useful way to check whether the setup has been successful and DFTK indeed employs the desired cluster-specific libraries provides the

    DFTK.versioninfo()

    command. It produces an output such as

    DFTK Version      0.6.16
    +Julia Version     1.10.0
    +FFTW.jl provider  fftw v3.3.10
    +
    +BLAS.get_config()
    +  LinearAlgebra.BLAS.LBTConfig
    +  Libraries:
    +  └ [ILP64] libopenblas64_.so
    +
    +MPI.versioninfo()
    +  MPIPreferences:
    +    binary:  MPICH_jll
    +    abi:     MPICH
    +
    +  Package versions
    +    MPI.jl:             0.20.19
    +    MPIPreferences.jl:  0.1.10
    +    MPICH_jll:          4.1.2+1
    +
    +  Library information:
    +    libmpi:  /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so
    +    libmpi dlpath:  /home/mfh/.julia/artifacts/0ed4137b58af5c5e3797cb0c400e60ed7c308bae/lib/libmpi.so
    +
    +[...]

    which thus specifies in one overview the details of the employed BLAS, LAPACK, FFTW, MPI, etc. libraries.

    Switching to MKL for BLAS and FFT

    The MKL Julia package provides the Intel MKL library as a BLAS backend in Julia. To use fully use it you need to do two things:

    1. Add a using MKL to your scripts.
    2. Configure a LocalPreferences.jl to employ the MKL also for FFT operations: to do so run the following Julia script:
      using MKL
      +using FFTW
      +FFTW.set_provider!("mkl")

    Switching to the system-provided MPI library

    To use a system-provided MPI library, load the required modules. On scitas that is

    module load gcc
    +module load openmpi

    Afterwards follow the MPI system binary instructions and execute

    using MPIPreferences
    +MPIPreferences.use_system_binary()

    Running slurm jobs

    This example shows how to run a DFTK calculation on a slurm-based system such as scitas. We use the MKL for FFTW and BLAS and the system-provided MPI. This setup will create five files LocalPreferences.toml, Project.toml, dftk.jl, silicon.extxyz and job.sh.

    At the time of writing (Dec 2023) following the setup indicated above leads to this LocalPreferences.toml file:

    [FFTW]
    +provider = "mkl"
    +
    +[MPIPreferences]
    +__clear__ = ["preloads_env_switch"]
    +_format = "1.0"
    +abi = "OpenMPI"
    +binary = "system"
    +cclibs = []
    +libmpi = "libmpi"
    +mpiexec = "mpiexec"
    +preloads = []

    We place this into a folder next to a Project.toml to define our project:

    [deps]
    +AtomsIO = "1692102d-eeb4-4df9-807b-c9517f998d44"
    +DFTK = "acf6eb54-70d9-11e9-0013-234b7a5f5337"
    +FFTW = "7a1cc6ca-52ef-59f5-83cd-3a7055c09341"
    +MKL = "33e6dc65-8f57-5167-99aa-e5a354878fb2"
    +MPIPreferences = "3da0fdf6-3ccc-4f1b-acd9-58baa6c99267"

    We additionally create a small file dftk.jl to run an MPI-parallelised calculation from a passed structure

    using MKL
    +using DFTK
    +using AtomsIO
    +
    +disable_threading()  # Threading and MPI not compatible
    +
    +function main(structure, pseudos; Ecut, kspacing)
    +    if mpi_master()
    +        println("DEPOT_PATH=$DEPOT_PATH")
    +        println(DFTK.versioninfo())
    +        println()
    +    end
    +
    +    system = attach_psp(load_system(structure); pseudos...)
    +    model  = model_PBE(system; temperature=1e-3, smearing=Smearing.MarzariVanderbilt())
    +
    +    kgrid = kgrid_from_minimal_spacing(model, kspacing)
    +    basis = PlaneWaveBasis(model; Ecut, kgrid)
    +
    +    if mpi_master()
    +        println()
    +        show(stdout, MIME("text/plain"), basis)
    +        println()
    +        flush(stdout)
    +    end
    +
    +    DFTK.reset_timer!(DFTK.timer)
    +    scfres = self_consistent_field(basis)
    +    println(DFTK.timer)
    +
    +    if mpi_master()
    +        show(stdout, MIME("text/plain"), scfres.energies)
    +    end
    +end

    and we dump the structure file silicon.extxyz with content

    2
    +pbc=[T, T, T] Lattice="0.00000000 2.71467909 2.71467909 2.71467909 0.00000000 2.71467909 2.71467909 2.71467909 0.00000000" Properties=species:S:1:pos:R:3
    +Si         0.67866977       0.67866977       0.67866977
    +Si        -0.67866977      -0.67866977      -0.67866977

    Finally the jobscript job.sh for a slurm job looks like this:

    #!/bin/bash
    +# This is the block interpreted by slurm and used as a Job submission script.
    +# The actual julia payload is in dftk.jl
    +# In this case it sets the parameters for running with 2 MPI processes using a maximal
    +# wall time of 2 hours.
    +
    +#SBATCH --time 2:00:00
    +#SBATCH --nodes 1
    +#SBATCH --ntasks 2
    +#SBATCH --cpus-per-task 1
    +
    +# Now comes the setup of the environment on the cluster node (the "jobscript")
    +
    +# IMPORTANT: Set Julia's depot path to be a local scratch
    +# direction (not your home !).
    +export JULIA_DEPOT_PATH="/scratch/$USER/.julia"
    +
    +# Load modules to setup julia (this is specific to EPFL scitas systems)
    +module purge
    +module load gcc
    +module load openmpi
    +module load julia
    +
    +# Run the actual payload of Julia using 1 thread. Use the name of this
    +# file as an include to make everything self-contained.
    +srun julia -t 1 --project -e '
    +    include("dftk.jl")
    +    pseudos = (; Si="hgh/pbe/si-q4.hgh" )
    +    main("silicon.extxyz",
    +         pseudos;
    +         Ecut=10,
    +         kspacing=0.3,
    + )
    +'

    Using DFTK via the Aiida workflow engine

    A preliminary integration of DFTK with the Aiida high-throughput workflow engine is available via the aiida-dftk plugin. This can be a useful alternative if many similar DFTK calculations should be run.

    diff --git a/v0.6.17/tricks/parallelization/index.html b/v0.6.17/tricks/parallelization/index.html new file mode 100644 index 0000000000..08c4c5b84c --- /dev/null +++ b/v0.6.17/tricks/parallelization/index.html @@ -0,0 +1,52 @@ + +Timings and parallelization · DFTK.jl

    Timings and parallelization

    This section summarizes the options DFTK offers to monitor and influence performance of the code.

    Timing measurements

    By default DFTK uses TimerOutputs.jl to record timings, memory allocations and the number of calls for selected routines inside the code. These numbers are accessible in the object DFTK.timer. Since the timings are automatically accumulated inside this datastructure, any timing measurement should first reset this timer before running the calculation of interest.

    For example to measure the timing of an SCF:

    DFTK.reset_timer!(DFTK.timer)
    +scfres = self_consistent_field(basis, tol=1e-5)
    +
    +DFTK.timer
     ────────────────────────────────────────────────────────────────────────────────
    +                                        Time                    Allocations      
    +                               ───────────────────────   ────────────────────────
    +       Tot / % measured:            290ms /  53.4%           86.2MiB /  77.7%    
    +
    + Section               ncalls     time    %tot     avg     alloc    %tot      avg
    + ────────────────────────────────────────────────────────────────────────────────
    + self_consistent_field      1    155ms   99.9%   155ms   66.9MiB  100.0%  66.9MiB
    +   LOBPCG                  27   65.3ms   42.2%  2.42ms   17.4MiB   26.0%   660KiB
    +     DftHamiltonian...     74   49.8ms   32.2%   673μs   5.85MiB    8.7%  81.0KiB
    +       local+kinetic      487   47.3ms   30.6%  97.1μs    274KiB    0.4%     576B
    +       nonlocal            74    990μs    0.6%  13.4μs   1.36MiB    2.0%  18.8KiB
    +     ortho! X vs Y         67   4.46ms    2.9%  66.6μs   1.89MiB    2.8%  28.9KiB
    +       ortho!             132   2.16ms    1.4%  16.4μs   1.02MiB    1.5%  7.94KiB
    +     rayleigh_ritz         47   4.39ms    2.8%  93.4μs   1.73MiB    2.6%  37.6KiB
    +       ortho!              47    483μs    0.3%  10.3μs    258KiB    0.4%  5.50KiB
    +     preconditioning       74   1.01ms    0.7%  13.7μs    273KiB    0.4%  3.69KiB
    +     Update residuals      74    652μs    0.4%  8.81μs   1.12MiB    1.7%  15.5KiB
    +     ortho!                27    503μs    0.3%  18.6μs    166KiB    0.2%  6.16KiB
    +   compute_density          9   56.5ms   36.5%  6.27ms   6.26MiB    9.4%   712KiB
    +     symmetrize_ρ           9   50.0ms   32.4%  5.56ms   5.01MiB    7.5%   570KiB
    +   energy_hamiltonian      19   26.8ms   17.3%  1.41ms   30.5MiB   45.6%  1.61MiB
    +     ene_ops               19   24.3ms   15.7%  1.28ms   19.9MiB   29.7%  1.05MiB
    +       ene_ops: xc         19   20.4ms   13.2%  1.07ms   8.92MiB   13.3%   481KiB
    +       ene_ops: har...     19   2.41ms    1.6%   127μs   8.56MiB   12.8%   462KiB
    +       ene_ops: non...     19    526μs    0.3%  27.7μs    291KiB    0.4%  15.3KiB
    +       ene_ops: kin...     19    396μs    0.3%  20.8μs    180KiB    0.3%  9.46KiB
    +       ene_ops: local      19    260μs    0.2%  13.7μs   1.74MiB    2.6%  93.8KiB
    +   ortho_qr                 3    124μs    0.1%  41.2μs    102KiB    0.1%  33.9KiB
    +   χ0Mixing                 9   67.3μs    0.0%  7.48μs   37.0KiB    0.1%  4.11KiB
    + enforce_real!              1   80.9μs    0.1%  80.9μs   1.69KiB    0.0%  1.69KiB
    + ────────────────────────────────────────────────────────────────────────────────

    The output produced when printing or displaying the DFTK.timer now shows a nice table summarising total time and allocations as well as a breakdown over individual routines.

    Timing measurements and stack traces

    Timing measurements have the unfortunate disadvantage that they alter the way stack traces look making it sometimes harder to find errors when debugging. For this reason timing measurements can be disabled completely (i.e. not even compiled into the code) by setting the package-level preference DFTK.set_timer_enabled!(false). You will need to restart your Julia session afterwards to take this into account.

    Rough timing estimates

    A very (very) rough estimate of the time per SCF step (in seconds) can be obtained with the following function. The function assumes that FFTs are the limiting operation and that no parallelisation is employed.

    function estimate_time_per_scf_step(basis::PlaneWaveBasis)
    +    # Super rough figure from various tests on cluster, laptops, ... on a 128^3 FFT grid.
    +    time_per_FFT_per_grid_point = 30 #= ms =# / 1000 / 128^3
    +
    +    (time_per_FFT_per_grid_point
    +     * prod(basis.fft_size)
    +     * length(basis.kpoints)
    +     * div(basis.model.n_electrons, DFTK.filled_occupation(basis.model), RoundUp)
    +     * 8  # mean number of FFT steps per state per k-point per iteration
    +     )
    +end
    +
    +"Time per SCF (s):  $(estimate_time_per_scf_step(basis))"
    "Time per SCF (s):  0.008009033203124998"

    Options for parallelization

    At the moment DFTK offers two ways to parallelize a calculation, firstly shared-memory parallelism using threading and secondly multiprocessing using MPI (via the MPI.jl Julia interface). MPI-based parallelism is currently only over $k$-points, such that it cannot be used for calculations with only a single $k$-point. Otherwise combining both forms of parallelism is possible as well.

    The scaling of both forms of parallelism for a number of test cases is demonstrated in the following figure. These values were obtained using DFTK version 0.1.17 and Julia 1.6 and the precise scalings will likely be different depending on architecture, DFTK or Julia version. The rough trends should, however, be similar.

    The MPI-based parallelization strategy clearly shows a superior scaling and should be preferred if available.

    MPI-based parallelism

    Currently DFTK uses MPI to distribute on $k$-points only. This implies that calculations with only a single $k$-point cannot use make use of this. For details on setting up and configuring MPI with Julia see the MPI.jl documentation.

    1. First disable all threading inside DFTK, by adding the following to your script running the DFTK calculation:

      using DFTK
      +disable_threading()
    2. Run Julia in parallel using the mpiexecjl wrapper script from MPI.jl:

      mpiexecjl -np 16 julia myscript.jl

      In this -np 16 tells MPI to use 16 processes and -t 1 tells Julia to use one thread only. Notice that we use mpiexecjl to automatically select the mpiexec compatible with the MPI version used by MPI.jl.

    As usual with MPI printing will be garbled. You can use

    DFTK.mpi_master() || (redirect_stdout(); redirect_stderr())

    at the top of your script to disable printing on all processes but one.

    MPI-based parallelism not fully supported

    While standard procedures (such as the SCF or band structure calculations) fully support MPI, not all routines of DFTK are compatible with MPI yet and will throw an error when being called in an MPI-parallel run. In most cases there is no intrinsic limitation it just has not yet been implemented. If you require MPI in one of our routines, where this is not yet supported, feel free to open an issue on github or otherwise get in touch.

    Thread-based parallelism

    Threading in DFTK currently happens on multiple layers distributing the workload over different $k$-points, bands or within an FFT or BLAS call between threads. At its current stage our scaling for thread-based parallelism is worse compared MPI-based and therefore the parallelism described here should only be used if no other option exists. To use thread-based parallelism proceed as follows:

    1. Ensure that threading is properly setup inside DFTK by adding to the script running the DFTK calculation:

      using DFTK
      +setup_threading()

      This disables FFT threading and sets the number of BLAS threads to the number of Julia threads.

    2. Run Julia passing the desired number of threads using the flag -t:

      julia -t 8 myscript.jl

    For some cases (e.g. a single $k$-point, fewish bands and a large FFT grid) it can be advantageous to add threading inside the FFTs as well. One example is the Caffeine calculation in the above scaling plot. In order to do so just call setup_threading(n_fft=2), which will select two FFT threads. More than two FFT threads is rarely useful.

    Advanced threading tweaks

    The default threading setup done by setup_threading is to select one FFT thread and the same number of BLAS and Julia threads. This section provides some info in case you want to change these defaults.

    BLAS threads

    All BLAS calls in Julia go through a parallelized OpenBlas or MKL (with MKL.jl. Generally threading in BLAS calls is far from optimal and the default settings can be pretty bad. For example for CPUs with hyper threading enabled, the default number of threads seems to equal the number of virtual cores. Still, BLAS calls typically take second place in terms of the share of runtime they make up (between 10% and 20%). Of note many of these do not take place on matrices of the size of the full FFT grid, but rather only in a subspace (e.g. orthogonalization, Rayleigh-Ritz, ...) such that parallelization is either anyway disabled by the BLAS library or not very effective. To set the number of BLAS threads use

    using LinearAlgebra
    +BLAS.set_num_threads(N)

    where N is the number of threads you desire. To check the number of BLAS threads currently used, you can use

    Int(ccall((BLAS.@blasfunc(openblas_get_num_threads), BLAS.libblas), Cint, ()))

    or (from Julia 1.6) simply BLAS.get_num_threads().

    Julia threads

    On top of BLAS threading DFTK uses Julia threads (Thread.@threads) in a couple of places to parallelize over $k$-points (density computation) or bands (Hamiltonian application). The number of threads used for these aspects is controlled by the flag -t passed to Julia or the environment variable JULIA_NUM_THREADS. To check the number of Julia threads use Threads.nthreads().

    FFT threads

    Since FFT threading is only used in DFTK inside the regions already parallelized by Julia threads, setting FFT threads to something larger than 1 is rarely useful if a sensible number of Julia threads has been chosen. Still, to explicitly set the FFT threads use

    using FFTW
    +FFTW.set_num_threads(N)

    where N is the number of threads you desire. By default no FFT threads are used, which is almost always the best choice.

    diff --git a/v0.6.17/tricks/scaling.png b/v0.6.17/tricks/scaling.png new file mode 100644 index 0000000000000000000000000000000000000000..17d1c2777954ab87f29869adee23d0495380b7cd GIT binary patch literal 95834 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

    Saving SCF results on disk and SCF checkpoints

    For longer DFT calculations it is pretty standard to run them on a cluster in advance and to perform postprocessing (band structure calculation, plotting of density, etc.) at a later point and potentially on a different machine.

    To support such workflows DFTK offers the two functions save_scfres and load_scfres, which allow to save the data structure returned by self_consistent_field on disk or retrieve it back into memory, respectively. For this purpose DFTK uses the JLD2.jl file format and Julia package.

    Availability of `load_scfres`, `save_scfres` and checkpointing

    As JLD2 is an optional dependency of DFTK these three functions are only available once one has both imported DFTK and JLD2 (using DFTK and using JLD2).

    DFTK data formats are not yet fully matured

    The data format in which DFTK saves data as well as the general interface of the load_scfres and save_scfres pair of functions are not yet fully matured. If you use the functions or the produced files expect that you need to adapt your routines in the future even with patch version bumps.

    To illustrate the use of the functions in practice we will compute the total energy of the O₂ molecule at PBE level. To get the triplet ground state we use a collinear spin polarisation (see Collinear spin and magnetic systems for details) and a bit of temperature to ease convergence:

    using DFTK
    +using LinearAlgebra
    +using JLD2
    +
    +d = 2.079  # oxygen-oxygen bondlength
    +a = 9.0    # size of the simulation box
    +lattice = a * I(3)
    +O = ElementPsp(:O; psp=load_psp("hgh/pbe/O-q6.hgh"))
    +atoms     = [O, O]
    +positions = d / 2a * [[0, 0, 1], [0, 0, -1]]
    +magnetic_moments = [1., 1.]
    +
    +Ecut  = 10  # Far too small to be converged
    +model = model_PBE(lattice, atoms, positions; temperature=0.02, smearing=Smearing.Gaussian(),
    +                  magnetic_moments)
    +basis = PlaneWaveBasis(model; Ecut, kgrid=[1, 1, 1])
    +
    +scfres = self_consistent_field(basis, tol=1e-2, ρ=guess_density(basis, magnetic_moments))
    +save_scfres("scfres.jld2", scfres);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -27.64408479343                   -0.13    0.001    6.5    145ms
    +  2   -28.92279357662        0.11       -0.83    0.667    2.0   79.9ms
    +  3   -28.93094210957       -2.09       -1.14    1.168    2.5   83.8ms
    +  4   -28.93760976502       -2.18       -1.18    1.762    2.0   70.1ms
    +  5   -28.93956793421       -2.71       -1.90    1.991    1.5   69.1ms
    +  6   -28.93960421066       -4.44       -2.28    1.982    1.0   75.2ms
    scfres.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.7694430
    +    AtomicLocal         -58.4934607
    +    AtomicNonlocal      4.7115163 
    +    Ewald               -4.8994689
    +    PspCorrection       0.0044178 
    +    Hartree             19.3596619
    +    Xc                  -6.3907355
    +    Entropy             -0.0009782
    +
    +    total               -28.939604210662

    The scfres.jld2 file could now be transferred to a different computer, Where one could fire up a REPL to inspect the results of the above calculation:

    using DFTK
    +using JLD2
    +loaded = load_scfres("scfres.jld2")
    +propertynames(loaded)
    (:α, :history_Δρ, :converged, :occupation, :occupation_threshold, :algorithm, :basis, :runtime_ns, :n_iter, :history_Etot, :εF, :energies, :ρ, :n_bands_converge, :eigenvalues, :ψ, :ham)
    loaded.energies
    Energy breakdown (in Ha):
    +    Kinetic             16.7694430
    +    AtomicLocal         -58.4934607
    +    AtomicNonlocal      4.7115163 
    +    Ewald               -4.8994689
    +    PspCorrection       0.0044178 
    +    Hartree             19.3596619
    +    Xc                  -6.3907355
    +    Entropy             -0.0009782
    +
    +    total               -28.939604210662

    Since the loaded data contains exactly the same data as the scfres returned by the SCF calculation one could use it to plot a band structure, e.g. plot_bandstructure(load_scfres("scfres.jld2")) directly from the stored data.

    Notice that both load_scfres and save_scfres work by transferring all data to/from the master process, which performs the IO operations without parallelisation. Since this can become slow, both functions support optional arguments to speed up the processing. An overview:

    • save_scfres("scfres.jld2", scfres; save_ψ=false) avoids saving the Bloch wave, which is usually faster and saves storage space.
    • load_scfres("scfres.jld2", basis) avoids reconstructing the basis from the file, but uses the passed basis instead. This save the time of constructing the basis twice and allows to specify parallelisation options (via the passed basis). Usually this is useful for continuing a calculation on a supercomputer or cluster.

    See also the discussion on Input and output formats on JLD2 files.

    Checkpointing of SCF calculations

    A related feature, which is very useful especially for longer calculations with DFTK is automatic checkpointing, where the state of the SCF is periodically written to disk. The advantage is that in case the calculation errors or gets aborted due to overrunning the walltime limit one does not need to start from scratch, but can continue the calculation from the last checkpoint.

    The easiest way to enable checkpointing is to use the kwargs_scf_checkpoints function, which does two things. (1) It sets up checkpointing using the ScfSaveCheckpoints callback and (2) if a checkpoint file is detected, the stored density is used to continue the calculation instead of the usual atomic-orbital based guess. In practice this is done by modifying the keyword arguments passed to # self_consistent_field appropriately, e.g. by using the density or orbitals from the checkpoint file. For example:

    checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))
    +scfres = self_consistent_field(basis; tol=1e-2, checkpointargs...)
    (ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [5.6607469268920685 5.430223231818384 … 4.799718038213248 5.430224173716247; 5.430223255968446 5.210114477291855 … 4.610825319692992 5.21011394016631; … ; 4.799717021806639 4.6108241492802575 … 4.099950000850433 4.610827085413336; 5.430224125878025 5.210113743335398 … 4.610827876083158 5.210116005498823;;; 5.540087562965547 5.337769321124851 … 4.758693261041707 5.337770171046389; 5.337769938595562 5.139510678946141 … 4.579364633388357 5.139510888448345; … ; 4.7586892815297155 4.579355434683088 … 4.084279004241907 4.579361691735591; 5.337768618883202 5.139506477212947 … 4.57936262195777 5.139510027526828;;; 5.246300492924033 5.103522626498906 … 4.634123127469127 5.1035230974833325; 5.103523019048231 4.951619109045358 … 4.475599369171467 4.951619861943347; … ; 4.634118447996318 4.475585567535413 … 4.015950342578479 4.475594056909884; 5.1035214088495495 4.951613652038264 … 4.475594188947043 4.951617729615564;;; … ;;; 4.914138293478508 4.809572711587556 … 4.415035968381053 4.809573186523542; 4.809574585414797 4.688328070939563 … 4.272329105340788 4.688325926792673; … ; 4.415040173697068 4.27234282597596 … 3.8439714691716205 4.272337560125268; 4.809574394066967 4.688330444942159 … 4.272338118632487 4.688328878546846;;; 5.246257407588313 5.103475959222614 … 4.6340699633166 5.103476064753971; 5.103475419418994 4.951568153449525 … 4.475536926244297 4.951565974940491; … ; 4.6340752114897406 4.475550731898628 … 4.015905378087407 4.475546666574567; 5.103478882622525 4.95157303848996 … 4.475546508227247 4.951571665610795;;; 5.540067236389163 5.337746641850952 … 4.758666122508396 5.337747192196187; 5.337745795326083 5.1394844846748615 … 4.579331729134973 5.139483012104043; … ; 4.758669024370355 4.579339552615403 … 4.0842566008430765 4.579338732711108; 5.337749177457317 5.1394877248605555 … 4.579338841187947 5.139488092143481]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-1.0073894896574074 -0.9756240861237712 … -0.8484344089832963 -0.9756242476862657; -0.9756203801285418 -0.9302213278663535 … -0.8472248057389163 -0.9302214407822971; … ; -0.8484392350926021 -0.8472211890011655 … -0.6668860985141718 -0.8472204197452413; -0.9756199161917648 -0.9302223930265575 … -0.8472233207524702 -0.9302203610549783;;; -0.9897965271980327 -0.954457764659959 … -0.9007087562556918 -0.9544582109822746; -0.9544534348766328 -0.9325338919655048 … -0.8786603037281151 -0.9325329572215016; … ; -0.9007067331679883 -0.8786474874155294 … -0.7910766809226257 -0.8786552204311532; -0.9544525198145978 -0.9325310590661301 … -0.8786544731251715 -0.9325327613066545;;; -0.7545431059382666 -0.8566452262526814 … -0.9144561175582627 -0.8566455565445984; -0.8566386817914845 -0.889507552306194 … -0.9071914614929478 -0.8895088689891523; … ; -0.9144473474744359 -0.9071804359867647 … -0.8647600004756567 -0.9071882571071653; -0.8566394831620365 -0.8895025180258163 … -0.9071846821871051 -0.8895065860887058;;; … ;;; -0.614486088977791 -0.8437246694144748 … -0.9685592939122445 -0.843717299405235; -0.8437166142924767 -0.9186787412533163 … -0.9582816563604029 -0.9186732483375284; … ; -0.9685545239567759 -0.9582905562114776 … -0.935128169462819 -0.9582835976627243; -0.8437203983893212 -0.9186864341825975 … -0.9582882266700288 -0.9186785311822925;;; -0.7545190855156543 -0.856631126511543 … -0.9144452331867637 -0.8566253527285108; -0.8566246068647234 -0.8894946419825154 … -0.9071761780360296 -0.8894912375946905; … ; -0.9144475445561565 -0.9071882647863474 … -0.8647530758342066 -0.9071778766093038; -0.8566299509047033 -0.8895039900159867 … -0.9071841110563478 -0.8894952034425267;;; -0.9897856191373012 -0.9544463313206462 … -0.9007040398458717 -0.9544445338843263; -0.9544430832084958 -0.9325212981677518 … -0.8786388917958943 -0.9325201919739464; … ; -0.900699043543498 -0.8786579820797674 … -0.7910732099844537 -0.8786506238574578; -0.9544454750635927 -0.9325236283598636 … -0.8786464626993458 -0.9325218384765817]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-3.194617612770291 -2.81382929451107 … -2.0351485442495383 -2.8138285141757; -2.8138255643657772 -2.5018562983735753 … -1.8910621573134412 -2.501856948415064; … ; -2.035154386765452 -1.8910597109884253 … -1.4018032488266208 -1.891056005599422; -2.813824230519421 -2.501858097490236 … -1.8910581159368298 -2.5018538033552318;;; -4.3491433700072095 -3.7043528075656953 … -2.515005831624441 -3.7043524039664724; -3.704347860311658 -3.2107850165547096 … -2.25659349132238 -3.2107838723085025; … ; -2.5150077880487274 -2.256589873715063 … -1.6907489806764295 -2.2565913496781858; -3.704348264961983 -3.2107863853885283 … -2.256589672150023 -3.2107845373151713;;; -12.702707394072041 -7.9681384357831995 … -3.5404805235567403 -7.9681382950906885; -7.968131498772681 -5.683379718020125 … -3.0731005328787306 -5.683380281805094; … ; -3.54047643294572 -3.073103309008602 … -2.139583120958735 -3.0731026407545317; -7.968133910341914 -5.6833801407468405 … -3.0730989337973114 -5.68338013123243;;; … ;;; -28.841400310044307 -14.824395134570729 … -4.219454729460252 -14.8243872896255; -14.82438520562149 -8.859802697733398 … -3.6088999075311428 -8.8597993489645; … ; -4.219445754188768 -3.6088950867470455 … -2.4254695727890456 -3.608893394048984; -14.824389181066165 -8.859808016660084 … -3.6088974645490692 -8.859801680055092;;; -12.702726458985147 -7.968171003318352 … -3.540522803337767 -7.968165124003963; -7.968165023475153 -5.683417763292279 … -3.0731476923489818 -5.683416537413487; … ; -3.5405198665340185 -3.0731459734449684 … -2.139621160808356 -3.0731396505919872; -7.968166904311603 -5.683422226285317 … -3.0731460433863496 -5.683414812591022;;; -4.349152788522863 -3.7043640535002815 … -2.515028253747931 -3.704361705718726; -3.7043616519129996 -3.2107986170282348 … -2.256604983643544 -3.2107989834052475; … ; -2.515020355583598 -2.256616250446986 … -1.6907679131370879 -2.2566097121289728; -3.7043606616368647 -3.2107977070346534 … -2.256605442494022 -3.210795549868446]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [5.6607469268920685 5.430223231818384 … 4.799718038213248 5.430224173716247; 5.430223255968446 5.210114477291855 … 4.610825319692992 5.21011394016631; … ; 4.799717021806639 4.6108241492802575 … 4.099950000850433 4.610827085413336; 5.430224125878025 5.210113743335398 … 4.610827876083158 5.210116005498823;;; 5.540087562965547 5.337769321124851 … 4.758693261041707 5.337770171046389; 5.337769938595562 5.139510678946141 … 4.579364633388357 5.139510888448345; … ; 4.7586892815297155 4.579355434683088 … 4.084279004241907 4.579361691735591; 5.337768618883202 5.139506477212947 … 4.57936262195777 5.139510027526828;;; 5.246300492924033 5.103522626498906 … 4.634123127469127 5.1035230974833325; 5.103523019048231 4.951619109045358 … 4.475599369171467 4.951619861943347; … ; 4.634118447996318 4.475585567535413 … 4.015950342578479 4.475594056909884; 5.1035214088495495 4.951613652038264 … 4.475594188947043 4.951617729615564;;; … ;;; 4.914138293478508 4.809572711587556 … 4.415035968381053 4.809573186523542; 4.809574585414797 4.688328070939563 … 4.272329105340788 4.688325926792673; … ; 4.415040173697068 4.27234282597596 … 3.8439714691716205 4.272337560125268; 4.809574394066967 4.688330444942159 … 4.272338118632487 4.688328878546846;;; 5.246257407588313 5.103475959222614 … 4.6340699633166 5.103476064753971; 5.103475419418994 4.951568153449525 … 4.475536926244297 4.951565974940491; … ; 4.6340752114897406 4.475550731898628 … 4.015905378087407 4.475546666574567; 5.103478882622525 4.95157303848996 … 4.475546508227247 4.951571665610795;;; 5.540067236389163 5.337746641850952 … 4.758666122508396 5.337747192196187; 5.337745795326083 5.1394844846748615 … 4.579331729134973 5.139483012104043; … ; 4.758669024370355 4.579339552615403 … 4.0842566008430765 4.579338732711108; 5.337749177457317 5.1394877248605555 … 4.579338841187947 5.139488092143481]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-1.0125701927340351 -0.9780277974638115 … -0.9029389254528013 -0.9780284984858104; -0.9780310774206598 -0.9436766458578477 … -0.8432448779287119 -0.9436759954687987; … ; -0.9029522565352042 -0.8432315107128877 … -0.7667074473017255 -0.8432340365530232; -0.9780318699180017 -0.9436761026494167 … -0.8432474322756907 -0.9436782303821131;;; -1.0024099778051705 -0.9662572904392225 … -0.8942898074076946 -0.9662558225398911; -0.9662622821630081 -0.9381565729668346 … -0.8654223447642218 -0.9381553617434095; … ; -0.8942875677509 -0.8654325997553374 … -0.7841593589708595 -0.8654297857142447; -0.9662625867520944 -0.9381577419631625 … -0.8654251267478833 -0.9381568481955859;;; -0.8146435177296366 -0.8330505329785924 … -0.8252606309013547 -0.8330440316468798; -0.8330549327666001 -0.8331850366987066 … -0.8160126707439256 -0.8331811955213979; … ; -0.825271418583554 -0.8160252927698883 … -0.7766770098553968 -0.8160186272662765; -0.8330554361778549 -0.8331880527342576 … -0.8160163201666817 -0.8331835854019621;;; … ;;; -0.6908762323902238 -0.7864798437942477 … -0.8338121724256112 -0.7864942968250002; -0.7864986156894992 -0.8122423018656755 … -0.8255792205255443 -0.8122526579892256; … ; -0.8338173148145832 -0.8255701671124797 … -0.8095511640025234 -0.8255762147694484; -0.786488580560758 -0.812231716003161 … -0.8255740072463478 -0.8122431848221371;;; -0.8146714937976935 -0.8330575264794797 … -0.8252607407112423 -0.8330667841820187; -0.8330679288884605 -0.83318515843702 … -0.8160134173439586 -0.8331908660574107; … ; -0.8252623819093928 -0.8160037254863237 … -0.7766698123477891 -0.8160114408478717; -0.8330664022219293 -0.8331810072094438 … -0.8160099461139627 -0.833190129271101;;; -1.0024305811349357 -0.9662731891390375 … -0.8942972442425373 -0.966275897058479; -0.9662776714067847 -0.938167712297415 … -0.8654353999154616 -0.9381693099030646; … ; -0.8942978040376297 -0.8654273712148525 … -0.7841625825171261 -0.8654325375386569; -0.9662782276278992 -0.9381677166125132 … -0.865434416114969 -0.938170719698934]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-3.1997983158469188 -2.8162330058511102 … -2.0896530607190433 -2.8162327649752448; -2.8162362616578953 -2.5153116163650693 … -1.8870822295032368 -2.5153115031015654; … ; -2.089667408208054 -1.8870700327001475 … -1.5016245976141744 -1.8870696224072039; -2.8162361842456582 -2.515311807113095 … -1.8870822274600503 -2.5153116726823668;;; -4.361756820614347 -3.716152333344959 … -2.5085868827764437 -3.716150015524089; -3.7161567075980333 -3.2164076975560394 … -2.243355532358487 -3.2164062768304102; … ; -2.508588622631639 -2.243374986054871 … -1.6838316587246633 -2.2433659149612772; -3.7161583318994795 -3.2164130682855605 … -2.243360325772735 -3.216408624204103;;; -12.762807805863412 -7.944543742509111 … -3.4512850368998325 -7.94453677019297; -7.944547749747796 -5.6270572024126375 … -2.981921742129708 -5.62705260833734; … ; -3.451300504054838 -2.9819481657917253 … -2.051500130338475 -2.9819330109136426; -7.944549863357731 -5.627065675455282 … -2.9819305717768883 -5.627057130545687;;; … ;;; -28.91779045345674 -14.767150308950502 … -4.084707607973619 -14.767164287045265; -14.767167207018513 -8.753366258345759 … -3.4761974716962842 -8.753378758616199; … ; -4.084708545046575 -3.4761746976480477 … -2.29989256732875 -3.4761860111557077; -14.767157363237601 -8.753353298480647 … -3.4761832451253882 -8.753366333694936;;; -12.762878867267187 -7.944597403286289 … -3.4513383108622455 -7.9446065554574705; -7.9446083454988905 -5.627108279746784 … -2.9819849316569105 -5.627116165876208; … ; -3.451334703887255 -2.981961434144945 … -2.0515378973219383 -2.981973214830555; -7.9446033556288285 -5.627099243478773 … -2.9819718784439644 -5.6271097384195965;;; -4.361797750520498 -3.7161909113186726 … -2.5086214581445967 -3.716193068892879; -3.7161962401112887 -3.216445031157898 … -2.2434014917631107 -3.2164481013343655; … ; -2.5086191160777296 -2.2433856395820713 … -1.6838572856697602 -2.243391625810172; -3.716193414201171 -3.2164417952873032 … -2.243393395909645 -3.216444431090798]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.939611790386113), converged = true, occupation_threshold = 1.0e-6, ρ = [0.43410709333695596 0.38358354466337197 … 0.2550536520274295 0.38358305390171216; 0.3835825128134244 0.33719407010340063 … 0.22217381225092264 0.3371938804382522; … ; 0.25505246055182773 0.22217310029068352 … 0.14468225508662272 0.22217295692753328; 0.3835826313214158 0.3371942492317946 … 0.22217369108210827 0.3371937733634468;;; 0.3632574600642434 0.3478906707464699 … 0.27205371027248115 0.3478908497569967; 0.3478891515179684 0.32629271502404944 … 0.2460135606994254 0.3262939646976804; … ; 0.2720491334997838 0.24600372944658494 … 0.1736080533004256 0.24600875291969038; 0.3478883837895787 0.3262892427619331 … 0.24600939269137626 0.32629195191178106;;; 0.21380977154383035 0.2733411124084339 … 0.31036881801044414 0.2733412792229701; 0.2733376932241145 0.3047469434279375 … 0.2991929657447601 0.30474869685043693; … ; 0.31036159101503613 0.29917695826132173 … 0.23808205526580103 0.2991855691972343; 0.2733375937238657 0.30474180536762585 … 0.2991862032280065 0.3047464627436469;;; … ;;; 0.1440459562521946 0.24613712854960487 … 0.34592130264945675 0.24613496090073927; 0.2461352505293779 0.30750177273543355 … 0.3427119540129691 0.3074982461868371; … ; 0.34592167332940604 0.3427259902113113 … 0.28590208830196107 0.3427159744935038; 0.2461361645679069 0.3075080180871593 … 0.3427204098114027 0.30750162298128264;;; 0.21380022846732658 0.2733329665616819 … 0.3103568300034546 0.2733296897445756; 0.2733292512493571 0.30473740484576717 … 0.29917185763391896 0.30473323450224615; … ; 0.3103600116013265 0.2991875356361974 … 0.23807704317618025 0.299178024776375; 0.2733329631866501 0.30474547415494835 … 0.2991804486604646 0.3047384671620307;;; 0.3632469037247608 0.34788209728582065 … 0.2720452255651764 0.3478800962695711; 0.3478796532324069 0.32628383664800714 … 0.24600022520423664 0.32628134657716085; … ; 0.2720473879614308 0.2460095326095415 … 0.17360581009366474 0.24600414057142045; 0.34788219006875637 0.3262887866198455 … 0.2460052393989795 0.3262846483536601;;;; 0.4384321886068777 0.3878731298873094 … 0.259283939766789 0.3878741597582645; 0.38787431435194936 0.3414620969330514 … 0.2263394965688482 0.34146178169171226; … ; 0.2592848443874775 0.22633968359171627 … 0.14856709908166496 0.22634119123590557; 0.3878750645512103 0.341461525646096 … 0.22634087031949662 0.34146339156660926;;; 0.36537755039645564 0.3373264275283432 … 0.24777743906500121 0.33732417307668694; 0.33732620555607773 0.3078693153370321 … 0.22145715195481078 0.30786647820408936; … ; 0.24778208195177148 0.2214621763948809 … 0.1536284664584577 0.22146105373180652; 0.3373274411390342 0.3078700160621538 … 0.22145910855801018 0.30786842798365394;;; 0.21255774676736472 0.23107772068912774 … 0.22255493716039249 0.23107312164931926; 0.23107696806615619 0.23673556360311787 … 0.20998149581377498 0.23673140124162956; … ; 0.22256403121672436 0.20999112224049257 … 0.16287648814659036 0.20998784550738378; 0.23107902800675245 0.23673801352146254 … 0.20998366906845023 0.2367335934204861;;; … ;;; 0.14228287416791327 0.18266616992380189 … 0.21192213281171535 0.1826729050445135; 0.18267546029926607 0.20471185805553743 … 0.20550313951865704 0.204717602639389; … ; 0.2119200325079265 0.20549538510597898 … 0.16733146657846099 0.20549979382246814; 0.18266957272439535 0.20470613939154228 … 0.2054994007473815 0.2047123634905467;;; 0.2125707092993704 0.23107751002496432 … 0.22255536898966505 0.23108375555409116; 0.23108382685242085 0.2367327087428322 … 0.2099814448191865 0.23673770225677693; … ; 0.22255360821915704 0.20997525143527532 … 0.16286885843883805 0.20997979835005554; 0.23108183369638957 0.236729807532569 … 0.20997975150595435 0.2367359702452344;;; 0.365397713850641 0.33733707396618173 … 0.2477848170555276 0.3373412743049799; 0.3373405294437978 0.30787647151761327 … 0.2214630869370211 0.3078791418138092; … ; 0.24778351288782538 0.2214592574001822 … 0.15362829425258828 0.22146288558198152; 0.33734046353461966 0.3078749135423977 … 0.22146320652822743 0.30787964337607915], α = 0.8, eigenvalues = [[-1.3349030610257784, -0.7241848678906839, -0.4460872903530766, -0.4460805163172553, -0.4070971674514567, -0.05995380841802984, -0.05994705125803386, 0.015189787945055329, 0.19504244692937153, 0.20806052521656487, 0.2422947841386776], [-1.3017375388502745, -0.662582667429851, -0.39060122597885266, -0.3905987242827076, -0.37442289960810826, 0.014268015146128686, 0.014270326136642687, 0.02742976539209582, 0.2073141296412299, 0.21386945243698896, 0.2605556579221653]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9948147788509405, 0.9948076381671869, 0.002977687541002339, 2.8645173476484006e-54, 1.1601639143139924e-60, 3.187834885560073e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.0036259570284352016, 0.0036241845648500724, 0.0001497538475839534, 2.7602239311855335e-60, 1.2409209500629728e-63, 3.673702648974076e-90]], εF = -0.023704314113764485, n_bands_converge = 8, n_iter = 7, ψ = Matrix{ComplexF64}[[0.07925915770695842 - 0.25279477390351396im -5.136262077665714e-6 - 2.030548696783415e-6im … 0.04695091868430456 - 0.06486188001185954im 2.574569450696492e-6 - 5.798068242534202e-6im; 0.05987015435161979 - 0.19095663096396895im -6.499969320726299e-6 + 3.437176633325934e-6im … 0.05459789718588487 - 0.07711695319810236im 0.08716787842539557 - 0.17009992785011463im; … ; 0.018214536081467392 - 0.0580876502248376im 0.02260006789228911 - 0.059878606767325704im … 0.01033180134425473 - 0.014368795840252557im 0.00603222271776451 + 0.015973865609459056im; 0.03342448200096085 - 0.10659023694913543im 0.04860832453349131 - 0.1287864689829003im … 0.008912390363945828 - 0.012437723094860922im 0.010070146611892726 + 0.046889335960759275im], [-0.06586834608263922 - 0.25296114339909626im -8.492102145633925e-6 + 7.842187813715401e-6im … 0.04622895705708321 + 0.07049377501734831im -1.1364925778108476e-5 - 1.0753898300444975e-5im; -0.04972124660475883 - 0.1909555174876637im -1.5201872925599242e-5 - 3.948575992930974e-6im … 0.05109306807829894 + 0.07692779633599583im -0.0705348607236403 - 0.19305932519669416im; … ; -0.01533553455362611 - 0.05890231114266483im -0.043896284452484356 - 0.04739002119885743im … 0.009392198330698041 + 0.014248944515178446im 0.014571863029611378 + 0.004642962561290118im; -0.028078026614821228 - 0.1078468772749125im -0.09405363352839446 - 0.10153756654868698im … 0.008201926191447469 + 0.012391573353207386im 0.04124629022001274 + 0.024341650339707872im]], diagonalization = @NamedTuple{λ::Vector{Vector{Float64}}, X::Vector{Matrix{ComplexF64}}, residual_norms::Vector{Vector{Float64}}, n_iter::Vector{Int64}, converged::Bool, n_matvec::Int64}[(λ = [[-1.3349030610257784, -0.7241848678906839, -0.4460872903530766, -0.4460805163172553, -0.4070971674514567, -0.05995380841802984, -0.05994705125803386, 0.015189787945055329, 0.19504244692937153, 0.20806052521656487, 0.2422947841386776], [-1.3017375388502745, -0.662582667429851, -0.39060122597885266, -0.3905987242827076, -0.37442289960810826, 0.014268015146128686, 0.014270326136642687, 0.02742976539209582, 0.2073141296412299, 0.21386945243698896, 0.2605556579221653]], X = [[0.07925915770695842 - 0.25279477390351396im -5.136262077665714e-6 - 2.030548696783415e-6im … 0.04695091868430456 - 0.06486188001185954im 2.574569450696492e-6 - 5.798068242534202e-6im; 0.05987015435161979 - 0.19095663096396895im -6.499969320726299e-6 + 3.437176633325934e-6im … 0.05459789718588487 - 0.07711695319810236im 0.08716787842539557 - 0.17009992785011463im; … ; 0.018214536081467392 - 0.0580876502248376im 0.02260006789228911 - 0.059878606767325704im … 0.01033180134425473 - 0.014368795840252557im 0.00603222271776451 + 0.015973865609459056im; 0.03342448200096085 - 0.10659023694913543im 0.04860832453349131 - 0.1287864689829003im … 0.008912390363945828 - 0.012437723094860922im 0.010070146611892726 + 0.046889335960759275im], [-0.06586834608263922 - 0.25296114339909626im -8.492102145633925e-6 + 7.842187813715401e-6im … 0.04622895705708321 + 0.07049377501734831im -1.1364925778108476e-5 - 1.0753898300444975e-5im; -0.04972124660475883 - 0.1909555174876637im -1.5201872925599242e-5 - 3.948575992930974e-6im … 0.05109306807829894 + 0.07692779633599583im -0.0705348607236403 - 0.19305932519669416im; … ; -0.01533553455362611 - 0.05890231114266483im -0.043896284452484356 - 0.04739002119885743im … 0.009392198330698041 + 0.014248944515178446im 0.014571863029611378 + 0.004642962561290118im; -0.028078026614821228 - 0.1078468772749125im -0.09405363352839446 - 0.10153756654868698im … 0.008201926191447469 + 0.012391573353207386im 0.04124629022001274 + 0.024341650339707872im]], residual_norms = [[0.00018088469430522057, 0.0007711813184544817, 0.0002507122644164483, 0.0002446402424907354, 0.0002783679873439717, 0.000804424602282496, 0.0008448838533083819, 0.0002126249315508499, 0.00094937820480989, 0.0013901859042858996, 0.003997015570481078], [0.0002722024549222929, 0.0006097325681819252, 0.0003825421004341001, 0.0003804934922258443, 0.00020483368752109702, 0.0008642108372648267, 0.0008536913165183485, 0.00047306059480268896, 0.0005912128577742645, 0.001420147796073882, 0.009083001922220293]], n_iter = [1, 1], converged = 1, n_matvec = 44)], stage = :finalize, history_Δρ = [0.7350518103970867, 0.1500150157297452, 0.07257237855619661, 0.06519470431073889, 0.04417475109039414, 0.01043891900261831, 0.000638764421032611], history_Etot = [-27.645102229525786, -28.92279761145919, -28.93102027540423, -28.937688552543687, -28.939489554889317, -28.939597101714842, -28.939611790386113], runtime_ns = 0x00000000289fdc02, algorithm = "SCF")

    Notice that the ρ argument is now passed to kwargsscfcheckpoints instead. If we run in the same folder the SCF again (here using a tighter tolerance), the calculation just continues.

    checkpointargs = kwargs_scf_checkpoints(basis; ρ=guess_density(basis, magnetic_moments))
    +scfres = self_consistent_field(basis; tol=1e-3, checkpointargs...)
    (ham = Hamiltonian(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), HamiltonianBlock[DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [5.659631891257464 5.429169713949474 … 4.798838770818832 5.429171928409948; 5.429170158064641 5.209120444624747 … 4.609998320400541 5.209121946396144; … ; 4.798837980281454 4.609998328780879 … 4.099259063639776 4.609998886104351; 5.429171262605423 5.209121429951212 … 4.609999474730762 5.20912316129785;;; 5.538941617388653 5.336679144039374 … 4.757765969155412 5.3366788209000475; 5.336676855205848 5.138473118272959 … 4.578486397391383 5.138472753488452; … ; 4.757770401440462 4.578492335877001 … 4.083548442371712 4.578491340692013; 5.336681203403962 5.1384771615196225 … 4.57848902305245 5.138476501226519;;; 5.2451480336246865 5.10241221008667 … 4.63315236262774 5.102409634573081; 5.1024076410155335 4.9505498800710805 … 4.474673326197852 4.9505477919029275; … ; 4.633160688187625 4.474683859345775 … 4.0151792368316395 4.4746815578033505; 5.1024142883255825 4.950556090835206 … 4.474677097345471 4.950553373496003;;; … ;;; 4.913174817052205 4.808644734106963 … 4.414244957339832 4.808649043953397; 4.8086493366373455 4.687443158990011 … 4.271589576368159 4.687446645056192; … ; 4.414236358483334 4.271579698194362 … 3.84334519986372 4.27158176351577; 4.80864424964823 4.687438498272574 … 4.271586687340217 4.687442289241488;;; 5.245251064734529 5.102508409745094 … 4.633247620241221 5.102514020903824; 5.102512283381055 4.950647582987354 … 4.4747660695964955 4.950651808933788; … ; 4.63323963170396 4.474757527904191 … 4.015250225924103 4.474760337708371; 5.102509541115183 4.95064479341865 … 4.474765010048173 4.950649803130529;;; 5.539006669743017 5.3367387305017795 … 4.757822359483708 5.336743328747215; 5.336741259221823 5.138532342635818 … 4.578540488249746 5.138535654150775; … ; 4.7578170633177175 4.578535355428009 … 4.083589028428055 4.578537437452565; 5.3367402085728255 5.138531168665634 … 4.578540592443358 5.1385351823940155]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-1.0076494372518106 -0.9757275422836951 … -0.8487259887526002 -0.9757293909255396; -0.9757278722652621 -0.9294378912709783 … -0.8473040975359948 -0.9294425099901545; … ; -0.848711999479939 -0.8473133467476611 … -0.667233843342842 -0.8473124327222437; -0.9757302497079937 -0.9294369251638113 … -0.8473061044157593 -0.9294395090796387;;; -0.9898303783013439 -0.9544031243082706 … -0.9009191658658526 -0.9544054936916475; -0.9544046116470837 -0.9322520383314498 … -0.8785200738994712 -0.9322539062099471; … ; -0.9009216867948141 -0.878517460737353 … -0.7914272949803857 -0.8785181080299388; -0.9544069653434245 -0.9322560252825186 … -0.8785194058402133 -0.932256070324335;;; -0.7546865524590856 -0.856612717071283 … -0.9144796485137543 -0.856613854401417; -0.8566098760549122 -0.8894518750677928 … -0.9071520504346526 -0.8894544074246967; … ; -0.9144812035093092 -0.9071529889412354 … -0.8647678952512021 -0.9071534046479466; -0.8566177462731296 -0.8894575135910552 … -0.9071516859698446 -0.8894564497267524;;; … ;;; -0.6145690562843968 -0.8437356050379026 … -0.968591178200348 -0.8437397193759248; -0.8437346734239226 -0.9186038705500604 … -0.9582364276516913 -0.9186066799699795; … ; -0.9685880556337861 -0.9582343349007632 … -0.9351658353152965 -0.958234008105128; -0.84374004678368 -0.9186077744470742 … -0.9582383608740735 -0.9186092475447007;;; -0.7547177695141335 -0.856627529630298 … -0.9144882669481719 -0.8566366139560915; -0.8566279028320363 -0.8894629888679402 … -0.9071593763793343 -0.8894697969045224; … ; -0.9144836504251244 -0.9071575070866018 … -0.8647721563343986 -0.9071582219031525; -0.8566331315290421 -0.8894674499691185 … -0.9071622564747404 -0.8894724662566506;;; -0.9898461802462032 -0.9544205369541834 … -0.9009319757427787 -0.9544249488713885; -0.9544187510080963 -0.9322689606516045 … -0.8785247704574493 -0.9322738804392219; … ; -0.9009269988709041 -0.8785237080104458 … -0.7914346856663536 -0.8785239494106329; -0.9544217437320794 -0.9322693773808218 … -0.8785289344875817 -0.9322733378380089]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), [-3.1959925959992983 -2.8149862685399043 … -2.0363193914132585 -2.814985902721272; -2.8149861544063026 -2.5020668944453077 … -1.891968448402971 -2.5020700113930867; … ; -2.036306192677974 -1.8919776892342992 … -1.402841930865948 -1.89197621788541; -2.8149874273082527 -2.5020649430116757 … -1.891969300952514 -2.5020657955808656;;; -4.350323166687414 -3.7053883442994833 … -2.5161435331208972 -3.705391036822187; -3.7053921204718225 -3.2115407235938362 … -2.2573314974907106 -3.2115429562568405; … ; -2.516141621764807 -2.2573229458429744 … -1.691830156604384 -2.2573245883205497; -3.70539012597005 -3.2115406672982414 … -2.2573282037703852 -3.2115413726331616;;; -12.704003299892205 -7.969216343014038 … -3.5414748193536183 -7.969220055857759; -7.969218071068805 -5.684393269756001 … -3.07398716479405 -5.6843978902810575; … ; -3.5414680487892864 -3.073977570152711 … -2.1403621214811195 -3.073980287401846; -7.969219293976973 -5.684392697515138 … -3.073983029181623 -5.684394350990038;;; … ;;; -28.842446753777214 -14.825334047674751 … -4.220277624789576 -14.825333852166334; -14.825328513530389 -8.860612738979695 … -3.60959420779506 -8.860612062333434; … ; -4.220283101079511 -3.609601993217929 … -2.4261335079494235 -3.6095996011008857; -14.82533897387926 -8.860621303594147 … -3.609599030045384 -8.860618985722859;;; -12.703931485837412 -7.969134955914627 … -3.5413881801745544 -7.96913842908169; -7.969131455480406 -5.6843066806398745 … -3.0739017473400883 -5.684309262730023; … ; -3.5413915521887667 -3.0739084197396602 … -2.140295393471851 -3.0739063247520315; -7.9691394264432835 -5.684313931309759 … -3.0739056869838173 -5.684313937885412;;; -4.350273916277911 -3.705346170482991 … -2.516099952669527 -3.705345984154761; -3.7053418558168607 -3.211498421551131 … -2.2572821031903256 -3.211500029823791; … ; -2.5161002719636416 -2.2572861735650585 … -1.691796961234009 -2.2572843329406913; -3.705345899189843 -3.2115000122505335 … -2.257286163026847 -3.211499958979339]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 1, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)]), DFTK.DftHamiltonianBlock(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), Any[DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-7.847975050004952 -7.268428440205683 … -5.98643217347949 -7.268428440205681; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765; … ; -5.986432173479489 -5.654662671267517 … -4.834867151162882 -5.654662671267517; -7.268428440205682 -6.7817494477990765 … -5.654662671267517 -6.7817494477990765;;; -8.899434405774723 -8.087664364030587 … -6.3729903364104565 -8.087664364030587; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982624; -8.087664364030587 -7.417761803535345 … -5.957297820982622 -7.417761803535345;;; -17.194464781057807 -12.215015836029425 … -7.260147533467604 -12.215015836029423; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.64150844055725 … -5.290773463061557 -6.64150844055725; -12.215015836029426 -9.745491274759289 … -6.641508440557249 -9.745491274759289;;; … ;;; -33.141052514545024 -18.79024317674381 … -7.6659314039290605 -18.790243176743807; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646; … ; -7.66593140392906 -6.922947356511528 … -5.334312872497847 -6.922947356511528; -18.79024317674381 -12.629452027419646 … -6.922947356511528 -12.629452027419646;;; -17.194464781057807 -12.215015836029423 … -7.260147533467603 -12.215015836029423; -12.215015836029425 -9.745491274759289 … -6.641508440557249 -9.745491274759289; … ; -7.260147533467602 -6.641508440557249 … -5.290773463061556 -6.64150844055725; -12.215015836029425 -9.74549127475929 … -6.641508440557249 -9.74549127475929;;; -8.899434405774725 -8.087664364030587 … -6.372990336410456 -8.087664364030587; -8.087664364030587 -7.4177618035353445 … -5.957297820982622 -7.4177618035353445; … ; -6.372990336410455 -5.957297820982622 … -4.983951303995711 -5.957297820982623; -8.087664364030589 -7.417761803535345 … -5.957297820982623 -7.417761803535345]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141)), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [5.659631891257464 5.429169713949474 … 4.798838770818832 5.429171928409948; 5.429170158064641 5.209120444624747 … 4.609998320400541 5.209121946396144; … ; 4.798837980281454 4.609998328780879 … 4.099259063639776 4.609998886104351; 5.429171262605423 5.209121429951212 … 4.609999474730762 5.20912316129785;;; 5.538941617388653 5.336679144039374 … 4.757765969155412 5.3366788209000475; 5.336676855205848 5.138473118272959 … 4.578486397391383 5.138472753488452; … ; 4.757770401440462 4.578492335877001 … 4.083548442371712 4.578491340692013; 5.336681203403962 5.1384771615196225 … 4.57848902305245 5.138476501226519;;; 5.2451480336246865 5.10241221008667 … 4.63315236262774 5.102409634573081; 5.1024076410155335 4.9505498800710805 … 4.474673326197852 4.9505477919029275; … ; 4.633160688187625 4.474683859345775 … 4.0151792368316395 4.4746815578033505; 5.1024142883255825 4.950556090835206 … 4.474677097345471 4.950553373496003;;; … ;;; 4.913174817052205 4.808644734106963 … 4.414244957339832 4.808649043953397; 4.8086493366373455 4.687443158990011 … 4.271589576368159 4.687446645056192; … ; 4.414236358483334 4.271579698194362 … 3.84334519986372 4.27158176351577; 4.80864424964823 4.687438498272574 … 4.271586687340217 4.687442289241488;;; 5.245251064734529 5.102508409745094 … 4.633247620241221 5.102514020903824; 5.102512283381055 4.950647582987354 … 4.4747660695964955 4.950651808933788; … ; 4.63323963170396 4.474757527904191 … 4.015250225924103 4.474760337708371; 5.102509541115183 4.95064479341865 … 4.474765010048173 4.950649803130529;;; 5.539006669743017 5.3367387305017795 … 4.757822359483708 5.336743328747215; 5.336741259221823 5.138532342635818 … 4.578540488249746 5.138535654150775; … ; 4.7578170633177175 4.578535355428009 … 4.083589028428055 4.578537437452565; 5.3367402085728255 5.138531168665634 … 4.578540592443358 5.1385351823940155]), DFTK.RealSpaceMultiplication{Float64, SubArray{Float64, 3, Array{Float64, 4}, Tuple{Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Base.Slice{Base.OneTo{Int64}}, Int64}, true}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-1.0125324480676532 -0.9779411370009408 … -0.9029801515434916 -0.9779410660915903; -0.977940617590344 -0.9435932090075227 … -0.8431595946242495 -0.94359206127456; … ; -0.9029980492271912 -0.8431437369396323 … -0.7668256926001779 -0.8431453554626087; -0.9779396723137325 -0.9435931808699582 … -0.8431598255755895 -0.943594157701787;;; -1.002485891035877 -0.9662067004753297 … -0.8942832789676756 -0.9662062982274937; -0.9662056478745289 -0.9380000501307434 … -0.8653545354658166 -0.9379993154152563; … ; -0.8942850074696866 -0.8653570617243717 … -0.7841594400133419 -0.8653570522153644; -0.9662053773045184 -0.9379993252103314 … -0.8653554866821489 -0.9380001712544804;;; -0.8144982430074291 -0.8328715550317639 … -0.8251475975886302 -0.8328700971357169; -0.8328722117880567 -0.8329463881025327 … -0.8158419674822275 -0.8329434802713203; … ; -0.8251497685330766 -0.8158461368821486 … -0.7766017570692866 -0.8158453577899398; -0.8328706046341185 -0.8329447072169073 … -0.8158438007880681 -0.8329448008928082;;; … ;;; -0.6906035802056317 -0.7862496847366728 … -0.8336587171834449 -0.7862503181123989; -0.7862530693759646 -0.812007398710855 … -0.8254066642299339 -0.8120074361569214; … ; -0.8336572445445145 -0.8254022339627227 … -0.8094497536153635 -0.8254052360696156; -0.7862483791145152 -0.8120018206931112 … -0.8254044719147637 -0.8120050775066625;;; -0.8145003171357382 -0.8328843717223949 … -0.8251708398516285 -0.8328838582582475; -0.8328856758046921 -0.8329644751342381 … -0.8158671468469461 -0.8329623940923582; … ; -0.8251707881759157 -0.8158649277044935 … -0.776623034469168 -0.8158681194926446; -0.8328836030446883 -0.8329605790625045 … -0.8158664203968901 -0.832962492778728;;; -1.0024925546687842 -0.9662131691284102 … -0.8942964970182501 -0.9662138036330068; -0.9662135146519042 -0.9380088297870066 … -0.8653702920313502 -0.9380079416009677; … ; -0.8942974588677347 -0.8653692963921753 … -0.7841710167781833 -0.8653719800664574; -0.966213252827129 -0.9380079537151369 … -0.8653700862401057 -0.9380089798968222]), DFTK.NoopOperator{Float64}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141))], DFTK.FourierMultiplication{Float64, Vector{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [0.0, 0.24369393582936685, 0.9747757433174674, 2.1932454224643014, 3.8991029732698697, 6.092348395734172, 8.772981689857206, 8.772981689857206, 6.092348395734172, 3.8991029732698697  …  2.680633294123035, 4.386490844928604, 6.5797362673929065, 9.260369561515938, 9.260369561515938, 6.5797362673929065, 4.386490844928604, 2.680633294123035, 1.4621636149762012, 0.7310818074881006]), DFTK.RealSpaceMultiplication{Float64, Array{Float64, 3}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), [-3.200875606815141 -2.8171998632571498 … -2.09057355420415 -2.817197577887323; -2.8171988997313844 -2.516222212181852 … -1.8878239454912258 -2.516219562677492; … ; -2.0905922424252266 -1.8878080794262706 … -1.502433780123284 -1.887809140625775; -2.817196849913991 -2.5162211987178225 … -1.8878230221123444 -2.5162204442030136;;; -4.362978679421947 -3.7171919204665427 … -2.50950764622272 -3.7171918413580336; -3.7171931566992678 -3.21728873539313 … -2.2441659590570557 -3.2172883654621494; … ; -2.5095049424396794 -2.244162546829993 … -1.6845623016373406 -2.2441635325059752; -3.717188537931144 -3.217283967226054 … -2.244164284612321 -3.217285473563307;;; -12.76381499044055 -7.945475180974518 … -3.4521427684284944 -7.945476298592059; -7.945480406801949 -5.627887782790741 … -2.982677081841625 -5.627886963127681; … ; -3.452136613813054 -2.9826707180936243 … -2.052195983299204 -2.9826722405438395; -7.945472152337962 -5.62787989114099 … -2.9826751439998462 -5.627882702156094;;; … ;;; -28.91848127769845 -14.76784812737352 … -4.085345163772673 -14.767844450902809; -14.767846909482431 -8.75401626714049 … -3.4767644443733023 -8.754012818520374; … ; -4.08535228999024 -3.476769892279888 … -2.3004174262494903 -3.476770829065373; -14.767847306210095 -8.754015349840184 … -3.4767651410860747 -8.754014815684819;;; -12.763714033459017 -7.945391798006724 … -3.452070753078011 -7.945385673383846; -7.945389228453062 -5.627808166906172 … -2.9826095178077 -5.6278018599178585; … ; -3.452078689939558 -2.982615840357552 … -2.0521462716066203 -2.9826162223415236; -7.94538989795893 -5.6278070604031445 … -2.9826098509059666 -5.62780396440749;;; -4.362920290700492 -3.717138802657218 … -2.5094644739449983 -3.7171348389163796; -3.7171366194606685 -3.217238290686533 … -2.2441276247642263 -3.217234090985537; … ; -2.509470731960472 -2.2441317619467878 … -1.6845332923458387 -2.2441323635965156; -3.7171374082848923 -3.2172385885848485 … -2.2441273147793708 -3.217235601038152]), DFTK.NonlocalOperator{Float64, Matrix{ComplexF64}, Matrix{Float64}}(PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), KPoint([     0,      0,      0], spin = 2, num. G vectors =  1141), ComplexF64[0.025674506039111318 + 0.0im 0.025674506039111318 + 0.0im; 0.025370853334774908 + 0.0im 0.025370853334774908 + 0.0im; … ; 0.017882114168679287 + 0.01586532494596619im 0.017882114168679287 - 0.01586532494596619im; 0.018531899211158255 + 0.016441825618465737im 0.018531899211158255 - 0.016441825618465737im], [18.33745811 0.0; 0.0 18.33745811]), nothing, @NamedTuple{ψ_reals::Array{ComplexF64, 3}}[(ψ_reals = [0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; … ;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im;;; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; … ; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im; 0.0 + 0.0im 0.0 + 0.0im … 0.0 + 0.0im 0.0 + 0.0im],)])]), basis = PlaneWaveBasis(model = Model(gga_x_pbe+gga_c_pbe, spin_polarization = :collinear), Ecut = 10.0 Ha, kgrid = MonkhorstPack([1, 1, 1])), energies = Energies(total = -28.93961286221982), converged = true, occupation_threshold = 1.0e-6, ρ = [0.4340066029102616 0.3834946788259117 … 0.2550028337128703 0.3834980213444999; 0.38349570591345183 0.3371178394455411 … 0.22213129003493778 0.3371210315031226; … ; 0.255000310412723 0.22212969621699066 … 0.14465939686036408 0.22212984620122564; 0.38349624680311656 0.3371192939206818 … 0.22213140557434033 0.3371209914070929;;; 0.3631821588695239 0.3478207810530982 … 0.2720080390697934 0.34782270050598807; 0.3478199541002002 0.3262290791358699 … 0.24597255209504773 0.32623167234295064; … ; 0.27200879236868536 0.24597314289307273 … 0.17358973614978462 0.24597322279549494; 0.34782313119949543 0.3262325273421382 … 0.24597259929320725 0.3262331516863931;;; 0.2138091867072394 0.2733243697632534 … 0.31033608293574216 0.2733250384860549; 0.2733220226741228 0.30471977222219493 … 0.2991573580998079 0.3047217086893857; … ; 0.31033839157261955 0.29915889706512194 … 0.23806301639820227 0.2991589748129892; 0.2733265064775129 0.30472408254791256 … 0.29915720556030223 0.30472387194666073;;; … ;;; 0.14404135271956117 0.24611084085983542 … 0.3458781447309894 0.24611337692858892; 0.2461107910777462 0.3074642050649135 … 0.34267363836098924 0.30746638811134736; … ; 0.34587474625540776 0.3426726620089668 … 0.2858676837441638 0.3426726203813275; 0.24611245033447368 0.30746649198556575 … 0.3426757801036749 0.30746800320502965;;; 0.21382548959358705 0.27333605511142567 … 0.3103478013133856 0.2733417567940724; 0.27333669069136063 0.30473072442257343 … 0.29916542867719015 0.3047352665852679; … ; 0.31034272078407665 0.2991631024494197 … 0.23806791494509053 0.2991641228725991; 0.27333940005013 0.3047338999326468 … 0.2991680844840699 0.30473780145988044;;; 0.36320211235239613 0.34783549109418704 … 0.27201849205616496 0.3478406629433779; 0.3478367309069165 0.3262416779313761 … 0.24597986383929069 0.3262458935428411; … ; 0.2720137705290645 0.24597733036804129 … 0.17359312560703363 0.24597800869328312; 0.34783790261331216 0.3262436578026674 … 0.24598133190359278 0.32624693129300136;;;; 0.4383344905690616 0.38778287742637657 … 0.2592259566108207 0.3877830899677886; 0.3877833465760588 0.3413811038095369 … 0.22629200384639145 0.3413802872717531; … ; 0.2592264886752779 0.2262921273036203 … 0.14854555140375697 0.22629299396893024; 0.3877833085169067 0.34138002376900045 … 0.2262926234450026 0.34138106828383646;;; 0.36527841296658686 0.3372204402867562 … 0.24769176999019246 0.33722006924664616; 0.33722070031994855 0.3077647247743079 … 0.22138128199107057 0.3077634100808447; … ; 0.24769318918066327 0.22138278093726832 … 0.1535817440906909 0.22138288266224687; 0.33722071511526597 0.30776398379917613 … 0.2213821582231615 0.3077642684819627;;; 0.21243936973834832 0.23093276280135272 … 0.2224128872368817 0.23093166821246877; 0.23093250976473523 0.2365805046057447 … 0.20984936237955296 0.23657868429537499; … ; 0.2224156183798238 0.2098526747247624 … 0.1627831579893613 0.20985189947098834; 0.23093309916459265 0.23658060653966373 … 0.20985061915235736 0.23657995851062924;;; … ;;; 0.14216588014429754 0.1825332451360993 … 0.2117905564811371 0.18253470968398516; 0.18253507623211546 0.2045690529885389 … 0.20538102175290524 0.204569926207109; … ; 0.21178870593537413 0.20537724390882772 … 0.16725183994448564 0.20537928058683105; 0.18253341515502589 0.20456655651146097 … 0.20537973560290523 0.2045687552941755;;; 0.21244849361177576 0.23094566311423978 … 0.2224327221396159 0.23094684575104174; 0.2309468708720405 0.23659687648018105 … 0.20986935196594103 0.2365970750191739; … ; 0.22243180771439156 0.20986685058641802 … 0.16279718515254257 0.20986897109258848; 0.2309462753835867 0.23659493642258486 … 0.20986906593440705 0.23659718332369162;;; 0.36528911756176197 0.33723195068308964 … 0.24770440851566203 0.3372327067114357; 0.33723268805730916 0.30777687173470913 … 0.22139338529098573 0.30777654332978355; … ; 0.24770425365997 0.2213922472520763 … 0.15359004396073467 0.22139385247979457; 0.3372325956456356 0.30777546186036564 … 0.22139370716373385 0.30777722885579595], α = 0.8, eigenvalues = [[-1.3338443842313403, -0.7233659880740952, -0.4453003017458639, -0.44529906212772363, -0.4063263939466899, -0.05924833621607942, -0.05924731686850451, 0.015411423698798807, 0.19521841590182482, 0.20823186623666423, 0.2420673910620458], [-1.3005659835973047, -0.6618073485436247, -0.3897645061729962, -0.38976316062862293, -0.37369379927914015, 0.014976602426214295, 0.014978074948982376, 0.028053543378925412, 0.20775428749088598, 0.2142967677944485, 0.2578574597064979]], occupation = [[1.0, 1.0, 1.0, 1.0, 1.0, 0.9947345595040451, 0.9947334680536563, 0.0032507911559087393, 4.714156925178331e-54, 1.97692942608607e-60, 9.985029738249084e-79], [1.0, 1.0, 1.0, 1.0, 1.0, 0.0035661421342624844, 0.003565029399567126, 0.00015000975256063408, 3.4396192374561627e-60, 1.5799612594021993e-63, 4.0978824130075893e-88]], εF = -0.023074281456679457, n_bands_converge = 9, n_iter = 1, ψ = Matrix{ComplexF64}[[0.2616899782347602 - 0.041839152995329774im 4.653866677376605e-6 - 3.10637103182149e-6im … -0.06977709296156878 - 0.03919785723770287im 3.255985193573921e-5 + 2.50344537999159e-5im; 0.19763925099632249 - 0.03159795419256281im 2.811970543728214e-6 - 2.153198236389751e-6im … -0.08504877199309274 - 0.0476746361242396im 0.3634101080210916 + 0.07021779759669966im; … ; 0.06010557354525842 - 0.009610422724685317im -0.03598153525076404 - 0.052902361551884165im … -0.015609345529941341 - 0.008765539795785928im 0.005748102773919352 + 0.014486104713454797im; 0.11030722192019982 - 0.01764012404692722im -0.07741291494265609 - 0.11382049208416112im … -0.01360705507567513 - 0.00764454231874827im -0.009374650841891397 + 0.031328095393765236im], [0.13493035949330895 + 0.22399749524658927im 2.57426897879665e-6 - 5.821145789117784e-6im … 0.08446584622401451 + 0.0018906919737413529im 5.408638048160449e-7 + 2.0991775110781524e-5im; 0.10184614845914725 + 0.16907457303760215im -2.1173557303080947e-6 - 5.067035678113681e-6im … 0.09522722273239494 + 0.002097897620898131im 0.3321213136890745 - 0.1734711789955827im; … ; 0.03139967374515935 + 0.052124263881485146im -0.059073870901573684 - 0.02613846273309671im … 0.017195171185356385 + 0.00038505248770208253im 0.016440294282562083 + 0.007539379303504099im; 0.05749963125436195 + 0.09545056314393356im -0.1265856105122918 - 0.056011562912137054im … 0.014998149051485067 + 0.00033739651734685715im 0.019174843584207794 + 0.03016016708938067im]], diagonalization = @NamedTuple{λ::Vector{Vector{Float64}}, X::Vector{Matrix{ComplexF64}}, residual_norms::Vector{Vector{Float64}}, n_iter::Vector{Int64}, converged::Bool, n_matvec::Int64}[(λ = [[-1.3338443842313403, -0.7233659880740952, -0.4453003017458639, -0.44529906212772363, -0.4063263939466899, -0.05924833621607942, -0.05924731686850451, 0.015411423698798807, 0.19521841590182482, 0.20823186623666423, 0.2420673910620458], [-1.3005659835973047, -0.6618073485436247, -0.3897645061729962, -0.38976316062862293, -0.37369379927914015, 0.014976602426214295, 0.014978074948982376, 0.028053543378925412, 0.20775428749088598, 0.2142967677944485, 0.2578574597064979]], X = [[0.2616899782347602 - 0.041839152995329774im 4.653866677376605e-6 - 3.10637103182149e-6im … -0.06977709296156878 - 0.03919785723770287im 3.255985193573921e-5 + 2.50344537999159e-5im; 0.19763925099632249 - 0.03159795419256281im 2.811970543728214e-6 - 2.153198236389751e-6im … -0.08504877199309274 - 0.0476746361242396im 0.3634101080210916 + 0.07021779759669966im; … ; 0.06010557354525842 - 0.009610422724685317im -0.03598153525076404 - 0.052902361551884165im … -0.015609345529941341 - 0.008765539795785928im 0.005748102773919352 + 0.014486104713454797im; 0.11030722192019982 - 0.01764012404692722im -0.07741291494265609 - 0.11382049208416112im … -0.01360705507567513 - 0.00764454231874827im -0.009374650841891397 + 0.031328095393765236im], [0.13493035949330895 + 0.22399749524658927im 2.57426897879665e-6 - 5.821145789117784e-6im … 0.08446584622401451 + 0.0018906919737413529im 5.408638048160449e-7 + 2.0991775110781524e-5im; 0.10184614845914725 + 0.16907457303760215im -2.1173557303080947e-6 - 5.067035678113681e-6im … 0.09522722273239494 + 0.002097897620898131im 0.3321213136890745 - 0.1734711789955827im; … ; 0.03139967374515935 + 0.052124263881485146im -0.059073870901573684 - 0.02613846273309671im … 0.017195171185356385 + 0.00038505248770208253im 0.016440294282562083 + 0.007539379303504099im; 0.05749963125436195 + 0.09545056314393356im -0.1265856105122918 - 0.056011562912137054im … 0.014998149051485067 + 0.00033739651734685715im 0.019174843584207794 + 0.03016016708938067im]], residual_norms = [[8.27167507889814e-5, 5.116981018168566e-5, 7.48592473636605e-5, 7.237031751920091e-5, 3.4111592232526636e-5, 9.925402536841353e-5, 6.58504885850331e-5, 6.879527825395837e-6, 8.929200757438833e-5, 0.00020679116430971206, 0.005041224375420502], [1.21086502654768e-5, 4.256399818412339e-5, 3.551922387368096e-5, 4.3839920027825366e-5, 4.676638264413225e-6, 4.2872617636930036e-5, 4.3337738486130485e-5, 9.96776818217159e-7, 9.952418504212912e-6, 3.4805416064092e-5, 0.005478852175358315]], n_iter = [18, 6], converged = 1, n_matvec = 233)], stage = :finalize, history_Δρ = [0.00043762046821938915], history_Etot = [-28.93961286221982], runtime_ns = 0x000000000dff880e, algorithm = "SCF")

    Since only the density is stored in a checkpoint (and not the Bloch waves), the first step needs a slightly elevated number of diagonalizations. Notice, that reconstructing the checkpointargs in this second call is important as the checkpointargs now contain different data, such that the SCF continues from the checkpoint. By default checkpoint is saved in the file dftk_scf_checkpoint.jld2, which can be changed using the filename keyword argument of kwargs_scf_checkpoints. Note that the file is not deleted by DFTK, so it is your responsibility to clean it up. Further note that warnings or errors will arise if you try to use a checkpoint, which is incompatible with your calculation.

    We can also inspect the checkpoint file manually using the load_scfres function and use it manually to continue the calculation:

    oldstate = load_scfres("dftk_scf_checkpoint.jld2")
    +scfres   = self_consistent_field(oldstate.basis, ρ=oldstate.ρ, ψ=oldstate.ψ, tol=1e-4);
    n     Energy            log10(ΔE)   log10(Δρ)   Magnet   Diag   Δtime
    +---   ---------------   ---------   ---------   ------   ----   ------
    +  1   -28.93862290754                   -2.30    1.986    5.5    107ms
    +  2   -28.93946589654       -3.07       -2.72    1.985    1.0   64.9ms
    +  3   -28.93961163896       -3.84       -2.59    1.985    4.0   89.1ms
    +  4   -28.93961236534       -6.14       -2.72    1.985    1.0   60.2ms
    +  5   -28.93961285353       -6.31       -2.88    1.985    1.0   61.4ms
    +  6   -28.93961293052       -7.11       -2.95    1.985    1.0   61.2ms
    +  7   -28.93961309827       -6.78       -3.23    1.985    1.0   74.0ms
    +  8   -28.93961314562       -7.32       -3.47    1.985    1.0   62.5ms
    +  9   -28.93961316225       -7.78       -3.74    1.985    1.5   67.0ms
    + 10   -28.93961317204       -8.01       -4.63    1.985    2.0   69.9ms

    Some details on what happens under the hood in this mechanism: When using the kwargs_scf_checkpoints function, the ScfSaveCheckpoints callback is employed during the SCF, which causes the density to be stored to the JLD2 file in every iteration. When reading the file, the kwargs_scf_checkpoints transparently patches away the ψ and ρ keyword arguments and replaces them by the data obtained from the file. For more details on using callbacks with DFTK's self_consistent_field function see Monitoring self-consistent field calculations.

    (Cleanup files generated by this notebook)

    rm("dftk_scf_checkpoint.jld2")
    +rm("scfres.jld2")
    diff --git a/versions.js b/versions.js index a18bd96a3d..205fed6288 100644 --- a/versions.js +++ b/versions.js @@ -8,5 +8,5 @@ var DOC_VERSIONS = [ "v0.1", "dev", ]; -var DOCUMENTER_NEWEST = "v0.6.15"; +var DOCUMENTER_NEWEST = "v0.6.17"; var DOCUMENTER_STABLE = "stable";

    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 +Saving SCF results on disk and SCF checkpoints · DFTK.jl

    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 +Saving SCF results on disk and SCF checkpoints · DFTK.jl