-
Notifications
You must be signed in to change notification settings - Fork 89
/
DFTK.jl
194 lines (173 loc) · 4.63 KB
/
DFTK.jl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
"""
DFTK --- The density-functional toolkit. Provides functionality for experimenting
with plane-wave density-functional theory algorithms.
"""
module DFTK
using Printf
using Markdown
using LinearAlgebra
using Requires
using TimerOutputs
using spglib_jll
using Unitful
using UnitfulAtomic
export Vec3
export Mat3
export mpi_nprocs
export mpi_master
export setup_threading, disable_threading
include("common/timer.jl")
include("common/asserting.jl")
include("common/constants.jl")
include("common/types.jl")
include("common/check_real.jl")
include("common/spherical_harmonics.jl")
include("common/split_evenly.jl")
include("common/mpi.jl")
include("common/threading.jl")
export PspHgh
include("pseudo/NormConservingPsp.jl")
include("pseudo/PspHgh.jl")
export ElementPsp
export ElementCohenBergstresser
export ElementCoulomb
export charge_nuclear
export charge_ionic
export n_elec_valence
export n_elec_core
include("elements.jl")
export Smearing
export Model
export PlaneWaveBasis
export compute_fft_size
export G_vectors
export G_vectors_cart
export r_vectors
export r_vectors_cart
export Kpoint
export G_to_r
export G_to_r!
export r_to_G
export r_to_G!
include("Smearing.jl")
include("Model.jl")
include("PlaneWaveBasis.jl")
export RealFourierArray
export from_real
export from_fourier
include("RealFourierArray.jl")
export Energies
include("energies.jl")
export Hamiltonian
export HamiltonianBlock
export energy_hamiltonian
export compute_forces
export compute_forces_cart
export Kinetic
export ExternalFromFourier
export ExternalFromReal
export AtomicLocal
export PowerNonlinearity
export Hartree
export Xc
export AtomicNonlocal
export Ewald
export PspCorrection
export Entropy
export Magnetic
export Anyonic
export apply_kernel
export compute_kernel
include("terms/terms.jl")
export compute_density
include("occupation.jl")
include("densities.jl")
include("interpolation.jl")
export PreconditionerTPA
export PreconditionerNone
export lobpcg_hyper
export diag_full
export diagonalize_all_kblocks
include("eigen/preconditioners.jl")
include("eigen/diag.jl")
export model_atomic
export model_DFT
export model_PBE
export model_LDA
include("standard_models.jl")
export KerkerMixing, KerkerDosMixing, SimpleMixing, DielectricMixing, HybridMixing, χ0Mixing
export scf_nlsolve_solver
export scf_damping_solver
export scf_anderson_solver
export scf_CROP_solver
export self_consistent_field
export direct_minimization
include("scf/chi0models.jl")
include("scf/mixing.jl")
include("scf/scf_solvers.jl")
include("scf/self_consistent_field.jl")
include("scf/direct_minimization.jl")
export symmetry_operations
export standardize_atoms
export bzmesh_uniform
export bzmesh_ir_wedge
export kgrid_size_from_minimal_spacing
include("symmetry.jl")
include("bzmesh.jl")
export guess_density, guess_spin_density
export load_psp
export list_psp
include("guess_density.jl")
include("pseudo/load_psp.jl")
include("pseudo/list_psp.jl")
export pymatgen_structure
export ase_atoms
export load_lattice
export load_basis
export load_model
export load_density
export load_atoms
export load_magnetic_moments
include("external/abinit.jl")
include("external/load_from_python.jl")
include("external/load_from_file.jl")
include("external/ase.jl")
include("external/pymatgen.jl")
export compute_bands
export high_symmetry_kpath
export plot_bandstructure
include("postprocess/band_structure.jl")
export compute_dos
export compute_ldos
export compute_nos
export plot_dos
include("postprocess/dos.jl")
export compute_χ0
export apply_χ0
include("postprocess/chi0.jl")
export compute_current
include("postprocess/current.jl")
# Dummy function definitions which are conditionally loaded
export load_scfres, save_scfres
include("dummy_definitions.jl")
function __init__()
# Use "@require" to only include fft_generic.jl once IntervalArithmetic or
# DoubleFloats has been loaded (via a "using" or an "import").
# See https://github.com/JuliaPackaging/Requires.jl for details.
#
# The global variable GENERIC_FFT_LOADED makes sure that things are only
# included once.
@require IntervalArithmetic="d1acc4aa-44c8-5952-acd4-ba5d80a2a253" begin
include("intervals_workarounds.jl")
!isdefined(DFTK, :GENERIC_FFT_LOADED) && include("fft_generic.jl")
end
@require DoubleFloats="497a8b3b-efae-58df-a0af-a86822472b78" begin
!isdefined(DFTK, :GENERIC_FFT_LOADED) && include("fft_generic.jl")
end
@require Plots="91a5bcdd-55d7-5caf-9e0b-520d859cae80" include("plotting.jl")
@require JLD2="033835bb-8acc-5ee8-8aae-3f567f8a3819" include("jld2io.jl")
@require NCDatasets="85f8d34a-cbdd-5861-8df4-14fed0d494ab" begin
include("external/etsf_nanoquanta.jl")
end
end
end # module DFTK