Skip to content

Commit 61bb6a5

Browse files
committed
placeholder
1 parent 0b358b2 commit 61bb6a5

File tree

8 files changed

+25
-7
lines changed

8 files changed

+25
-7
lines changed

ext/DFTKJLD2Ext.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ function load_basis(jld)
4242
jld["variational"],
4343
jld["kgrid"],
4444
jld["symmetries_respect_rgrid"],
45+
jld["symmetries_respect_basis"],
4546
jld["use_symmetries_for_kpoint_reduction"])
4647
else
4748
basis_args = nothing

src/PlaneWaveBasis.jl

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,13 @@ struct PlaneWaveBasis{T,
106106
## Symmetry operations that leave the discretized model (k and r grids) invariant.
107107
# Subset of model.symmetries.
108108
symmetries::Vector{SymOp{VT}}
109-
# Whether the symmetry operations leave the rgrid invariant
109+
# Whether the symmetry operations leave the rgrid invariant.
110110
# If this is true, the symmetries are a property of the complete discretized model.
111111
# Therefore, all quantities should be symmetric to machine precision
112112
symmetries_respect_rgrid::Bool
113+
# Whether the symmetry operations leave the basis invariant. Otherwise the symmetry
114+
# operations will leave the lattice invariant.
115+
symmetries_respect_basis::Bool
113116
# Whether symmetry is used to reduce the number of explicit k-points to the
114117
# irreducible BZMesh. This is a debug option, useful when a part in the code does
115118
# not yet implement symmetry. See `unfold_bz` as a convenient way to use this.
@@ -175,6 +178,7 @@ end
175178
function PlaneWaveBasis(model::Model{T}, Ecut::Real, fft_size::Tuple{Int, Int, Int},
176179
variational::Bool, kgrid::AbstractKgrid,
177180
symmetries_respect_rgrid::Bool,
181+
symmetries_respect_basis::Bool,
178182
use_symmetries_for_kpoint_reduction::Bool,
179183
comm_kpts, architecture::Arch
180184
) where {T <: Real, Arch <: AbstractArchitecture}
@@ -209,7 +213,11 @@ function PlaneWaveBasis(model::Model{T}, Ecut::Real, fft_size::Tuple{Int, Int, I
209213
if symmetries_respect_rgrid
210214
symmetries = symmetries_preserving_rgrid(symmetries, fft_size)
211215
end
212-
symmetries = symmetries_preserving_kgrid(symmetries, kgrid)
216+
# If false, symmetries will respect the model (leave the lattice invariant), as is the
217+
# default behaviour for Abinit (nsym 0).
218+
if symmetries_respect_basis
219+
symmetries = symmetries_preserving_kgrid(symmetries, kgrid)
220+
end
213221

214222
# Build the irreducible k-point coordinates
215223
if use_symmetries_for_kpoint_reduction
@@ -317,7 +325,7 @@ function PlaneWaveBasis(model::Model{T}, Ecut::Real, fft_size::Tuple{Int, Int, I
317325
kpoints, kweights, kgrid,
318326
kcoords_global, kweights_global,
319327
comm_kpts, krange_thisproc, krange_allprocs, krange_thisproc_allspin,
320-
architecture, symmetries, symmetries_respect_rgrid,
328+
architecture, symmetries, symmetries_respect_rgrid, symmetries_respect_basis,
321329
use_symmetries_for_kpoint_reduction, terms)
322330

323331
# Instantiate the terms with the basis
@@ -342,6 +350,7 @@ with a maximal spacing of `2π * 0.022` per Bohr.
342350
kshift=[0, 0, 0],
343351
variational=true, fft_size=nothing,
344352
symmetries_respect_rgrid=isnothing(fft_size),
353+
symmetries_respect_basis=true,
345354
use_symmetries_for_kpoint_reduction=true,
346355
comm_kpts=MPI.COMM_WORLD, architecture=CPU()) where {T <: Real}
347356
if isnothing(fft_size)
@@ -372,8 +381,8 @@ with a maximal spacing of `2π * 0.022` per Bohr.
372381
end
373382

374383
PlaneWaveBasis(model, austrip(Ecut), fft_size, variational, kgrid_inner,
375-
symmetries_respect_rgrid, use_symmetries_for_kpoint_reduction,
376-
comm_kpts, architecture)
384+
symmetries_respect_rgrid, symmetries_respect_basis,
385+
use_symmetries_for_kpoint_reduction, comm_kpts, architecture)
377386
end
378387

379388
"""
@@ -383,7 +392,7 @@ e.g. an [`MonkhorstPack`](@ref) or a [`ExplicitKpoints`](@ref) grid.
383392
@timing function PlaneWaveBasis(basis::PlaneWaveBasis, kgrid::AbstractKgrid)
384393
PlaneWaveBasis(basis.model, basis.Ecut,
385394
basis.fft_size, basis.variational,
386-
kgrid, basis.symmetries_respect_rgrid,
395+
kgrid, basis.symmetries_respect_rgrid, basis.symmetries_respect_basis,
387396
basis.use_symmetries_for_kpoint_reduction,
388397
basis.comm_kpts, basis.architecture)
389398
end
@@ -544,6 +553,7 @@ function gather_kpts(basis::PlaneWaveBasis)
544553
basis.variational,
545554
basis.kgrid,
546555
basis.symmetries_respect_rgrid,
556+
basis.symmetries_respect_basis,
547557
basis.use_symmetries_for_kpoint_reduction,
548558
MPI.COMM_SELF,
549559
basis.architecture)

src/input_output.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ function todict!(dict, basis::PlaneWaveBasis)
157157
dict["Ecut"] = basis.Ecut
158158
dict["variational"] = basis.variational
159159
dict["symmetries_respect_rgrid"] = basis.symmetries_respect_rgrid
160+
dict["symmetries_respect_basis"] = basis.symmetries_respect_basis
160161
dict["use_symmetries_for_kpoint_reduction"] = basis.use_symmetries_for_kpoint_reduction
161162

162163
# Update the symmetry as discretisation might have broken some symmetries

src/postprocess/stresses.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ for details. In Voigt notation one would use the vector
2323
new_basis = PlaneWaveBasis(new_model,
2424
basis.Ecut, basis.fft_size, basis.variational,
2525
basis.kgrid, basis.symmetries_respect_rgrid,
26+
basis.symmetries_respect_basis,
2627
basis.use_symmetries_for_kpoint_reduction,
2728
basis.comm_kpts, basis.architecture)
2829
ρ = compute_density(new_basis, scfres.ψ, scfres.occupation)

src/supercell.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,11 @@ function cell_to_supercell(basis::PlaneWaveBasis{T}) where {T}
4444
supercell_model = Model(model; supercell.lattice, supercell.atoms, supercell.positions,
4545
n_electrons=n_electrons_supercell, symmetries=false)
4646
symmetries_respect_rgrid = true
47+
symmetries_respect_basis = true
4748
use_symmetries_for_kpoint_reduction = true
4849
PlaneWaveBasis(supercell_model, basis.Ecut, supercell_fft_size,
49-
basis.variational, supercell_kgrid, symmetries_respect_rgrid,
50+
basis.variational, supercell_kgrid,
51+
symmetries_respect_rgrid, symmetries_respect_basis,
5052
use_symmetries_for_kpoint_reduction,
5153
basis.comm_kpts, basis.architecture)
5254
end

src/symmetry.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ function unfold_bz(basis::PlaneWaveBasis)
387387
return PlaneWaveBasis(basis.model, basis.Ecut, basis.fft_size,
388388
basis.variational, basis.kgrid,
389389
basis.symmetries_respect_rgrid,
390+
basis.symmetries_respect_basis,
390391
use_symmetry_for_kpoint_reduction,
391392
basis.comm_kpts, basis.architecture)
392393
end

src/workarounds/forwarddiff_rules.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ function construct_value(basis::PlaneWaveBasis{T}) where {T <: ForwardDiff.Dual}
180180
basis.variational,
181181
basis.kgrid,
182182
basis.symmetries_respect_rgrid,
183+
basis.symmetries_respect_basis,
183184
basis.use_symmetries_for_kpoint_reduction,
184185
basis.comm_kpts,
185186
basis.architecture)

test/todict.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ function test_agreement_bands(band_data, dict; explicit_reshape=false, test_ψ=t
5353
@test dict["symmetries_translations"] translations atol=1e-12
5454
@test dict["use_symmetries_for_kpoint_reduction"] == basis.use_symmetries_for_kpoint_reduction
5555
@test dict["symmetries_respect_rgrid"] == basis.symmetries_respect_rgrid
56+
@test dict["symmetries_respect_basis"] == basis.symmetries_respect_basis
5657

5758
lattice_resh = condreshape(dict["lattice"], 3, 3)
5859
rotations_resh = [condreshape(rot, 3, 3) for rot in dict["symmetries_rotations"]]

0 commit comments

Comments
 (0)