Skip to content

Commit d067377

Browse files
committed
Include additional API functions
1 parent 535e669 commit d067377

File tree

5 files changed

+61
-40
lines changed

5 files changed

+61
-40
lines changed

app/quoll.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ for idir in my_idirs
7474
@info "Converting operators into $(params.output.format) format"
7575

7676
operators = convert_operators(operators, params.output.format; hermitian = params.output.hermitian)
77+
78+
@info "Writing operators"
79+
80+
# write_operators(params.output.directory, operators)
7781
end
7882

7983
end

src/conversions/deeph/deeph.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ function convert_operator_data(out_metadata::DeepHMetadata, in_operator::RealBSp
3030
)
3131
end
3232

33+
# Probably change indexing to use data instead of keydata (tuples seem to cause many allocations)
3334
function convert_operator_data(out_sparsity, out_basisset, in_keydata, in_sparsity,
3435
out_type::Type{DeepHOperator}, in_type::Type{RealBSparseOperator}; float = Float64)
3536

@@ -70,7 +71,7 @@ function convert_operator_data(out_sparsity, out_basisset, in_keydata, in_sparsi
7071

7172
block = Array{float, 2}(undef, Nb_dict[zi], Nb_dict[zj])
7273
if herm_nonherm_conv && (!ij_present || image in_sparsity.ij2images[(iat, jat)])
73-
mt_image = Tuple(-image) # TODO: need to check allocations for this, maybe use view
74+
mt_image = Tuple(-image)
7475
for jb in axes(block, 2)
7576
@inbounds for ib in axes(block, 1)
7677
block[ib, jb] = in_keydata[(jat, iat)][

src/operators/abstract.jl

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,23 @@ function get_avail_filenames(operatorkind::OperatorKind, T::Type{<:AbstractOpera
6060
return get_avail_filenames(operatorkind, pairtypes..., T)
6161
end
6262

63-
# Could implement basic versions of those like for convert_operator
64-
function load_operators end
65-
function write_operators end
63+
64+
function write_operators(dir::AbstractString, operators)
65+
return write_operator.(dir, operators)
66+
end
67+
68+
# Here using a constructor as below would not make sense
69+
function write_operator end
70+
71+
function load_operators(dir::AbstractString, operatorkinds, operator_format::Type{<:AbstractOperator})
72+
return load_operator.(dir, operatorkinds, operator_format)
73+
end
74+
75+
# TODO: if this is the API I am going for then I should define an appropriate constructor for FHIaims
76+
# even though I defined a custom `load_operators`
77+
function load_operator(dir::AbstractString, operatorkind::OperatorKind, ::Type{T}) where T<:AbstractOperator
78+
return T(dir, operatorkind)
79+
end
6680

6781
# Could be specialised for particular operator conversions if the conversion can be done in a more efficient way
6882
# e.g. if metadata is always shared between operators

src/operators/fhiaims/fhiaims_csc.jl

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -128,41 +128,12 @@ function convert_sparsity(in_metadata::FHIaimsCSCMetadata, out_sparsity_type::Ty
128128
return convert_sparsity(get_sparsity(in_metadata), get_basisset(in_metadata), out_sparsity_type, hermitian = hermitian)
129129
end
130130

131-
function load_operators(dir::AbstractString, operatorkinds, ::Type{FHIaimsCSCOperator})
132-
# Load shared metadata
133-
atoms = load_atoms(dir, FHIaimsCSCOperator)
134-
sparsity = RealCSCSparsity(dir, FHIaimsCSCOperator)
135-
basisset = BasisSetMetadata(dir, atoms, FHIaimsCSCOperator)
136-
137-
# TODO: dictionary is not really necessary when the kind is present in the operator itself
138-
# operators = Dict{OperatorKind, FHIaimsCSCOperator}()
139-
operators = []
140-
for kind in operatorkinds
141-
spinsset = SpinsMetadata(kind, basisset, FHIaimsCSCOperator)
142-
metadata = FHIaimsCSCMetadata(atoms, sparsity, basisset, spinsset)
143-
push!(operators, FHIaimsCSCOperator(dir, kind, metadata))
144-
end
145-
146-
return operators
147-
end
148-
149-
# TODO: Not sure if I'll keep this function, it could be useful to have if
150-
# we want to use load_operator_metadata in quoll/bin
151-
function load_operator_metadata(dir::AbstractString, kind::OperatorKind, ::Type{FHIaimsCSCOperator})
152-
return FHIaimsCSCMetadata(dir, kind)
153-
end
154-
155-
function FHIaimsCSCMetadata(dir::AbstractString, kind::OperatorKind)
156-
atoms = load_atoms(dir, FHIaimsCSCOperator)
157-
sparsity = RealCSCSparsity(dir, FHIaimsCSCOperator)
158-
basisset = BasisSetMetadata(dir, atoms, FHIaimsCSCOperator)
159-
spins = SpinsMetadata(kind, basisset, FHIaimsCSCOperator)
160-
return FHIaimsCSCMetadata(atoms, sparsity, basisset, spins)
161-
end
162-
163-
function FHIaimsCSCOperator(dir::AbstractString, operatorkind::OperatorKind, metadata::FHIaimsCSCMetadata)
164-
data = load_operator_data(dir, operatorkind, FHIaimsCSCOperator)
165-
return FHIaimsCSCOperator(operatorkind, data, metadata)
131+
function FHIaimsCSCOperator(dir::AbstractString, kind::OperatorKind)
132+
return FHIaimsCSCOperator(
133+
kind,
134+
load_operator_data(dir, kind, FHIaimsCSCOperator),
135+
load_operator_metadata(dir, kind, FHIaimsCSCOperator)
136+
)
166137
end
167138

168139
function load_operator_data(dir::AbstractString, operatorkind::OperatorKind, ::Type{FHIaimsCSCOperator})
@@ -196,3 +167,34 @@ function load_operator_data(dir::AbstractString, operatorkind::OperatorKind, ::T
196167
throw(error("Reading the file $(basename(p)) is unsupported"))
197168
end
198169
end
170+
171+
function load_operator_metadata(dir::AbstractString, kind::OperatorKind, ::Type{FHIaimsCSCOperator})
172+
return FHIaimsCSCMetadata(dir, kind)
173+
end
174+
175+
function FHIaimsCSCMetadata(dir::AbstractString, kind::OperatorKind)
176+
atoms = load_atoms(dir, FHIaimsCSCOperator)
177+
sparsity = RealCSCSparsity(dir, FHIaimsCSCOperator)
178+
basisset = BasisSetMetadata(dir, atoms, FHIaimsCSCOperator)
179+
spins = SpinsMetadata(kind, basisset, FHIaimsCSCOperator)
180+
return FHIaimsCSCMetadata(atoms, sparsity, basisset, spins)
181+
end
182+
183+
# Specialised load_operators for loading metadata once because we know that
184+
# all FHIaimsCSCOperators in a dir will share metadata to some extent
185+
function load_operators(dir::AbstractString, operatorkinds, ::Type{FHIaimsCSCOperator})
186+
# Load shared metadata
187+
atoms = load_atoms(dir, FHIaimsCSCOperator)
188+
sparsity = RealCSCSparsity(dir, FHIaimsCSCOperator)
189+
basisset = BasisSetMetadata(dir, atoms, FHIaimsCSCOperator)
190+
191+
operators = []
192+
for kind in operatorkinds
193+
data = load_operator_data(dir, kind, FHIaimsCSCOperator)
194+
spinsset = SpinsMetadata(kind, basisset, FHIaimsCSCOperator)
195+
metadata = FHIaimsCSCMetadata(atoms, sparsity, basisset, spinsset)
196+
push!(operators, FHIaimsCSCOperator(kind, data, metadata))
197+
end
198+
199+
return operators
200+
end

src/shconversion.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ end
6969
# so not sure if it's bad to overwrite this or not
7070
function Base.:()(shconv2::T1, shconv1::T2) where {T1<:SHConversion, T2<:SHConversion}
7171
if shconv1.lmax != shconv2.lmax
72-
@warn "lmax of two SH conventions do not match, setting lmax to the lower value"
72+
@debug "lmax of two SH conventions do not match, setting lmax to the lower value"
7373
shconv1.lmax > shconv2.lmax ? (lmax = shconv2.lmax) : (lmax = shconv1.lmax)
7474
else
7575
lmax = shconv1.lmax

0 commit comments

Comments
 (0)