@@ -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)
129129end
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+ )
166137end
167138
168139function 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
198169end
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
0 commit comments