Skip to content

Commit cfd76c1

Browse files
committed
RealBSparseOperator -> BSparseOperator
1 parent e201e99 commit cfd76c1

File tree

6 files changed

+45
-30
lines changed

6 files changed

+45
-30
lines changed

app/quoll.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,9 @@ for idir in my_idirs
6262
operators = load_operators(input_dir, operatorkinds, params.input.format)
6363

6464
# TODO: in the future could allow for <other canonical formats/shortcut conversions>
65-
@info "Converting operators into RealBSparseOperator format"
65+
@info "Converting operators into BSparseOperator format"
6666

67-
operators = convert_operators(operators, RealBSparseOperator)
67+
operators = convert_operators(operators, BSparseOperator)
6868

6969
if Quoll.Parser.requires_kpoint_grid(params)
7070
@info "Initialising k-point grid"

src/Quoll.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export write_operator, write_operators
5454
export find_operatorkinds
5555
include("operators/interface.jl")
5656

57-
export RealBSparseOperator
57+
export BSparseOperator
5858
include("operators/canonical/abstract.jl")
5959
include("operators/canonical/bsparse.jl")
6060

src/conversions/deeph/deeph.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
function DeepHOperator(in_operator::RealBSparseOperator; radii = nothing, hermitian = false, float = Float64)
1+
function DeepHOperator(in_operator::BSparseOperator; radii = nothing, hermitian = false, float = Float64)
22

33
in_metadata = get_metadata(in_operator)
44
in_atoms = get_atoms(in_operator)
@@ -18,21 +18,21 @@ function DeepHOperator(in_operator::RealBSparseOperator; radii = nothing, hermit
1818
return DeepHOperator(in_kind, out_data, out_metadata)
1919
end
2020

21-
function convert_operator_data(out_metadata::DeepHMetadata, in_operator::RealBSparseOperator; float = Float64)
21+
function convert_operator_data(out_metadata::DeepHMetadata, in_operator::BSparseOperator; float = Float64)
2222
return convert_operator_data(
2323
get_sparsity(out_metadata),
2424
get_basisset(out_metadata),
2525
get_keydata(in_operator),
2626
get_atoms(in_operator),
2727
get_sparsity(in_operator),
2828
DeepHOperator,
29-
RealBSparseOperator,
29+
BSparseOperator,
3030
float,
3131
)
3232
end
3333

3434
function convert_operator_data(out_sparsity, out_basisset, in_keydata, in_atoms, in_sparsity,
35-
out_type::Type{DeepHOperator}, in_type::Type{RealBSparseOperator}, ::Type{T} = Float64) where T
35+
out_type::Type{DeepHOperator}, in_type::Type{BSparseOperator}, ::Type{T} = Float64) where T
3636

3737
herm_nonherm_conv = in_sparsity.hermitian && !out_sparsity.hermitian
3838
species2nbasis = get_species2nbasis(out_basisset)

src/conversions/fhiaims/fhiaims_csc.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
function RealBSparseOperator(in_operator::FHIaimsCSCOperator; radii = nothing, hermitian = true, float = Float64)
2+
function BSparseOperator(in_operator::FHIaimsCSCOperator; radii = nothing, hermitian = true, float = Float64)
33

44
in_metadata = get_metadata(in_operator)
55
in_atoms = get_atoms(in_operator)
@@ -14,7 +14,7 @@ function RealBSparseOperator(in_operator::FHIaimsCSCOperator; radii = nothing, h
1414
out_metadata = RealBSparseMetadata(in_atoms, out_sparsity, in_basisset, in_spins)
1515

1616
# Initialize out_operator with zeros
17-
out_operator = RealBSparseOperator(in_kind, out_metadata; float = float)
17+
out_operator = BSparseOperator(in_kind, out_metadata; float = float)
1818

1919
# Populate out_operator with values from the in_operator
2020
populate!(out_operator, in_operator)
@@ -23,25 +23,25 @@ function RealBSparseOperator(in_operator::FHIaimsCSCOperator; radii = nothing, h
2323
end
2424

2525
# Probably shouldn't be used directly because this assumes appropriately converted metadata
26-
function populate!(out_operator::RealBSparseOperator, in_operator::FHIaimsCSCOperator)
26+
function populate!(out_operator::BSparseOperator, in_operator::FHIaimsCSCOperator)
2727
return populate!(
2828
get_keydata(out_operator),
2929
get_sparsity(out_operator),
3030
get_basisset(out_operator),
3131
get_data(in_operator),
3232
get_sparsity(in_operator),
33-
RealBSparseOperator,
33+
BSparseOperator,
3434
FHIaimsCSCOperator,
3535
)
3636
end
3737

3838
# Loop over the CSC sparsity and occupy appropriate values based on block sparsity
3939
function populate!(out_keydata, out_sparsity, out_basisset, in_data, in_sparsity,
40-
out_type::Type{RealBSparseOperator}, in_type::Type{FHIaimsCSCOperator})
40+
out_type::Type{BSparseOperator}, in_type::Type{FHIaimsCSCOperator})
4141

4242
# TODO: We could perform hermitian to hermitian populate! and afterwards perform
43-
# RealBSparseOperator hermitian -> RealBSparseOperator non-hermitian conversion.
44-
# However, one would have to modify RealBSparseOperator(::FHIaimsCSCOperator)
43+
# BSparseOperator hermitian -> BSparseOperator non-hermitian conversion.
44+
# However, one would have to modify BSparseOperator(::FHIaimsCSCOperator)
4545
# by computing non-hermitian sparsity and metadata after populate! and initiating
4646
# the conversion.
4747
herm_to_nonherm = in_sparsity.hermitian && !out_sparsity.hermitian

src/operators/canonical/bsparse.jl

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ using StructArrays
22

33
# TODO: add additional field with spin metadata? This is related to considerations of
44
# the ability to add arbitrary element metadata to `keydata`, how could this be extendable?
5-
# Would any additional metadata in `keydata` elements would have to be added to RealBSparseMetadata as a field?
5+
# Would any additional metadata in `keydata` elements would have to be added to BSparseMetadata as a field?
66
# This can be achieved by creating a function which would take relevant information such as basisf and spin from
77
# RealBSparseMetadata but would also allow to add custom metadata (no need for an extra struct)
88
# It would also be nice to be able to change metadata on `keydata` once RealBSparseOperator has been
9-
# defined already (however this wouldn't be possible without creating a new instance because RealBSparseOperator
9+
# defined already (however this wouldn't be possible without creating a new instance because BSparseOperator
1010
# is parametric with respect to KT, but that's possible without copies)
1111

1212
struct RealBSparseMetadata{A<:AbstractSystem, S<:RealBlockSparsity, B<:BasisSetMetadata, P<:Union{SpinsMetadata, Nothing}} <: AbstractBSparseMetadata{A, S, B, P}
@@ -16,23 +16,30 @@ struct RealBSparseMetadata{A<:AbstractSystem, S<:RealBlockSparsity, B<:BasisSetM
1616
spins::P
1717
end
1818

19+
struct RecipBSparseMetadata{A<:AbstractSystem, S<:RecipBlockSparsity, B<:BasisSetMetadata, P<:Union{SpinsMetadata, Nothing}} <: AbstractBSparseMetadata{A, S, B, P}
20+
atoms::A
21+
sparsity::S
22+
basisset::B
23+
spins::P
24+
kpoint::SVector{3, Float64}
25+
end
26+
1927
# I will usually work with the case where metadata in keydata are named tuples
2028
# i.e. KT == Tuple{Vector{@NamedTuple{basisf::BasisMetadata{E}, spin::SpinMetadata}}, ...}
2129
# TODO: Consider changing <:SpeciesPairAnyDict{<:AbstractArray{T}}
22-
struct RealBSparseOperator{O<:OperatorKind, T<:Real, D<:SpeciesPairAnyDict{<:AbstractArray{T}}, M<:AbstractBSparseMetadata, KD<:AtomPairAnyDict} <: AbstractBSparseOperator{O, T, D, M, KD}
30+
struct BSparseOperator{O<:OperatorKind, T<:Number, D<:SpeciesPairAnyDict{<:AbstractArray{T}}, M<:AbstractBSparseMetadata, KD<:AtomPairAnyDict} <: AbstractBSparseOperator{O, T, D, M, KD}
2331
kind::O
2432
data::D
2533
metadata::M
2634
keydata::KD
2735
end
2836

29-
get_float(operator::RealBSparseOperator) = typeof(operator).parameters[2]
30-
get_keydata(operator::RealBSparseOperator) = operator.keydata
37+
get_keydata(operator::BSparseOperator) = operator.keydata
3138

3239
# Constructor to initialize the operator with zero values
3340
# TODO: possibly split into smaller functions? Also this function could accept
3441
# additional metadata to go into keydata
35-
function RealBSparseOperator(kind::OperatorKind, metadata::RealBSparseMetadata; float::Type{T} = Float64) where T
42+
function BSparseOperator(kind::OperatorKind, metadata::AbstractBSparseMetadata; float::Type{T} = Float64) where T
3643

3744
z1z2_ij2interval = get_z1z2_ij2interval(metadata)
3845
basisset = get_basisset(metadata)
@@ -97,11 +104,11 @@ function RealBSparseOperator(kind::OperatorKind, metadata::RealBSparseMetadata;
97104
end
98105
keydata = Dictionary{NTuple{2, Int}, typeof(first(keydata_values))}(ij_contiguous, keydata_values)
99106

100-
return RealBSparseOperator(kind, data, metadata, keydata)
107+
return BSparseOperator(kind, data, metadata, keydata)
101108
end
102109

103-
get_z1z2_ij2interval(operator::RealBSparseOperator) = get_z1z2_ij2interval(get_atoms(operator), get_sparsity(operator))
104-
get_z1z2_ij2interval(metadata::RealBSparseMetadata) = get_z1z2_ij2interval(get_atoms(metadata), get_sparsity(metadata))
110+
get_z1z2_ij2interval(operator::BSparseOperator) = get_z1z2_ij2interval(get_atoms(operator), get_sparsity(operator))
111+
get_z1z2_ij2interval(metadata::AbstractBSparseMetadata) = get_z1z2_ij2interval(get_atoms(metadata), get_sparsity(metadata))
105112

106113
function get_z1z2_ij2interval(atoms::AbstractSystem, sparsity::RealBlockSparsity)
107114
unique_species = unique(species(atoms, :))
@@ -132,10 +139,10 @@ function get_z1z2_ij2interval(atoms::AbstractSystem, sparsity::RealBlockSparsity
132139
return Base.ImmutableDict(pairs(z1z2_ij2interval)...)
133140
end
134141

135-
get_z1z2_ij2offset(operator::RealBSparseOperator) = get_z1z2_ij2offset(get_atoms(operator), get_sparsity(operator))
136-
get_z1z2_ij2offset(metadata::RealBSparseMetadata) = get_z1z2_ij2offset(get_atoms(metadata), get_sparsity(metadata))
142+
get_z1z2_ij2offset(operator::BSparseOperator) = get_z1z2_ij2offset(get_atoms(operator), get_sparsity(operator))
143+
get_z1z2_ij2offset(metadata::AbstractBSparseMetadata) = get_z1z2_ij2offset(get_atoms(metadata), get_sparsity(metadata))
137144

138-
function get_z1z2_ij2offset(atoms::AbstractSystem, sparsity::RealBlockSparsity)
145+
function get_z1z2_ij2offset(atoms::AbstractSystem, sparsity::AbstractBlockSparsity)
139146
# Converting from Base.ImmutableDict to Dictionary
140147
z1z2_ij2interval = dictionary(get_z1z2_ij2interval(atoms, sparsity))
141148
return get_z1z2_ij2offset(z1z2_ij2interval)

src/sparsity.jl

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
abstract type AbstractSparsity end
22

3-
struct RealCSCSparsity <: AbstractSparsity
3+
abstract type AbstractCSCSparsity <: AbstractSparsity end
4+
abstract type AbstractBlockSparsity <: AbstractSparsity end
5+
6+
struct RealCSCSparsity <: AbstractCSCSparsity
47
rowval::Vector{Int}
58
colcellptr::Array{Int, 3}
69
images::Vector{SVector{3, Int}}
@@ -9,12 +12,17 @@ end
912

1013
# In reciprocal space we could only have unique (i, j) pairs from `ij2images`
1114
# Assuming 'U' hermicity
12-
struct RealBlockSparsity <: AbstractSparsity
15+
struct RealBlockSparsity <: AbstractBlockSparsity
1316
ij2images::Dictionary{NTuple{2, Int}, Vector{SVector{3, Int}}}
1417
images::Vector{SVector{3, Int}}
1518
hermitian::Bool
1619
end
1720

21+
struct RecipBlockSparsity <: AbstractBlockSparsity
22+
ij::Vector{NTuple{2, Int}}
23+
hermitian::Bool
24+
end
25+
1826
### FROM NEIGHBOURLIST ###
1927

2028
# assumes fractional coordinates of all atoms are [0.0, 1.0)
@@ -155,9 +163,9 @@ end
155163
# If converting from type 1 to nonhermitian sparsity then we will have new keys in ij2images.
156164
# Does that affect how we convert other properties during operator -> operator conversion?
157165
# This matters only for conversions where image order and (i, j) order matters in other operator
158-
# fields, e.g. 3rd axis in keydata in RealBSparseOperator contains some order of images
166+
# fields, e.g. 3rd axis in keydata in BSparseOperator contains some order of images
159167
# and by changing the sparsity the order would not be the same anymore.
160-
# This would make RealBSparseOperator -> RealBSparseOperator conversion a bit tricky
168+
# This would make BSparseOperator -> BSparseOperator conversion a bit tricky
161169
# but it's not something that would have to be done normally.
162170
function convert_to_nonhermitian(sparsity::RealBlockSparsity)
163171
!sparsity.hermitian && return sparsity

0 commit comments

Comments
 (0)