Multiple Dopant Structures


I apologize if this has been asked/discussed before, but I have been struggling with a creating a doped structure, and have exhausted my knowledge set. I have successfully generated doped structures before, in this case specifically perovskites with single dopants, but am failing to apply the same process to a perovskite with multiple dopants, particularly to one site in the material.

My steps:

Pull Cif from MP database
Parse Cif
Decorate with AutoOxiStateDecorationsTransformation
Replace B site with ReplaceSiteSpeciesTransformation (four part fractional composition in B-site perovskite)
Create Supercell (This is where the error starts as I cannot get a supercell that has each component in nonfractional values or to within a 0.1 tolerance without creating like a 10 x 10 x 10, which is just way to big, so the values are like A site - 8, B site - 0.8, 0.8, 3.2, 3.2, C site - 24)
Order the structure with OrderDisorder (This still works to generate a set of structures)
Pull out one of the structures
Balance the O charge with ChargeBalanceTransformation (This is where I get an error below, which I believe is from the new fractional charge on O to which I cannot then reapply OrderDisorder)

ValueError: Occupancy fractions not consistent with size of unit cell


I have tried to apply another supercell transformation after charge balance to get nonfractional O, but no dice. I have tried several other substitution modules, but still have this issue. Is there a way to increase unit cell or other method to use?

I would greatly appreciate any direction you can give me.

Thank you.

Hi @Xernaf, welcome!

I haven’t got time myself to investigate in detail, perhaps others have suggestions, but I would try something like this:

  1. Prepare your Structure as you suggested (CIF → AutoOxiState → ReplaceSiteSpecies).
  2. Use EnumerateStructureTransformation, which requires an installation of enumlib.

This should take care of making the appropriate sized supercells for you, and can be better for complex systems. However, for “awkward” occupancies you may still have very large cells generated.

Hope this helps,


Hi Matt,

Thank you for the welcome! I did also try EnumerateStructureTransformation (enumlib is installed), because if I am correct in my understanding, you can modify the cell size with it, which I had hoped would get rid of the error I was receiving, but it just hung. When I went back to my single doped script, I noticed that my oxygen charges were fractional there too, just as above, so that may not be the issue I thought it was; however, in single doped script they were over 0.9, (i.e., O2-:0.95X). In my multiple doped script, they were under 0.9. Could perhaps it be a tolerance thing (i.e., keeping resultant fractions to within 0.1 of the next whole number)?

Thank you.