This is how I would do it.
- Create a Iron(II) element using all the properties from Iron.
- Used the DZP basis set for Iron, to create another basis set for Iron(II) with a different occupation
- And go!
###############################################################
# Creating a second Iron element.
###############################################################
class Iron2(Iron):
@staticmethod
def symbol(): return 'Fe(II)'
# Replace the Iron with Iron(II) for atom 2 and 4.
bulk_configuration.elements()[2] = Iron2
bulk_configuration.elements()[4] = Iron2
# It is required in ATK 10.8.0 to insert this snippet in order
# for it work properly. This is not required in newer versions.
def symbols(self): return [x.symbol() for x in self.elements()]
BulkConfiguration.symbols = symbols
###############################################################
# Setting up a basis set for Iron(II) starting from the
# Iron DZP basis set, but using a the new element, and
# a new occupation.
###############################################################
iron2_dzp = LDABasis.Iron_DoubleZetaPolarized(element=Iron2,
occupations=[8.0,0.0,0.0,0.0,0.0])
basis_set = [ iron2_dzp ] + LDABasis.DoubleZetaPolarized
However there are a few pitfalls to avoid:
- If you adjust the occupation of the orbitals, you have to consider using a different pseudo-potential for the Iron(II) element to get the best results.
- There is no support for saving the SCF results, and restarting from it when using a custom element. Therefore you have to select all the analysis up-front
I have attached a script where I use this approach on a LiFe2F6 crystal.