Replies: 1 comment
-
@AntObi just to flag in case it's useful, I was also playing around with the Also added to And with a timeout function here, to avoid hanging forever on tricky cases: |
Beta Was this translation helpful? Give feedback.
-
The mixed valency/charge ordering problem of SMACT
SMACT as a package has been used in works to both:
If we have a composition, AwBxCyDz, where A,B,C and D are unique elements, and w, x, y and z are integers indicating the stoichiometry, then we define the charge neutrality as:
Problem I: Conventional SMACT-based screenings for hypothetical compositions will miss compounds where mixed valency is observed.
This problem will typically arise from using
smact_filter
based approaches using unique combinations of elements to generate the compositions. Considering a chemical system A-B-C-D, our conventional approach cannot determine mixed valency simply as each enumeration of possible oxidation states only considers one oxidation state per element.Solution
To incorporate mixed-valency, users can include elements more than once in their combinations i.e. to get all the possible mixed binaries in a chemical system A-B, you must also consider the chemical systems A-A-B, A-B-B etc. This logic can be extended to any n-ary system, as well as any number of mixed-valenced elements in a composition
Fe3O4 example
For example, for Fe3O4, we cannot conventionally solve the charge neutrality by assuming a unique iron atom and unique oxygen atom, instead we need to consider an additional iron atom so that we can have both Fe2+ and Fe3+ as solutions to the charge neutrality equation.
For the "binary" case of the Fe-O system:
$$wq^{Fe} + xq^{O} = 0 $$
Has no integer solutions for$q^{Fe}$ when $q^{O}=-2$ , $w=3$ and $q=4$ . If we extend this system to Fe-Fe-O:
$$wq^{Fe'} +xq^{Fe''} + yq^{O} = 0$$ $w + x = 3$ , $y=4$ , $q^{O}=-2$ , which yields solutions $q^{Fe'}=2, q^{Fe''}=3$ when $w=1$ and $x=2$ .
Then it is possible to get a solution that can make the composition Fe3O4. Our conditions here are:
See this colab notebook as a reference for this example.
Problem 2: Using SMACT to check for charge-neutrality of known compositions
Related to issue #55
The
neutral_ratios
andpauling_test
functions in SMACT have seen use in checking if compositions are "SMACT" valid (i.e. charge-neutral and that the most electronegative element carries the most negative charge in a compound) in the following works:The
smact_validity
function in these works attempt to determine if a compound is charge neutral by solving the charge neutrality equation. The stoichiometries are known, so the function iteratively tries all the possible combinations of oxidation states and will return true if at least one combination of oxidation states leads to a solution.As only one oxidation state is considered per element in each iteration, compounds which contain elements with mixed valency will often fail this check.
Below is an attempt to use the
smact_validity
script on the GNoME database where about 70% of the compositions can either be (i) charge-balanced or (ii) likely intermetallics where all the constituent elements are metalsPotential solutions
We have yet to determine an ideal solution for this problem.
Using pymatgen (the
oxi_state_guesses
method of thepymatgen.core.composition.Composition
class)Where
smact_validity
fails, pymatgen can be used to attempt to assign oxidation states to compositions. If oxidation states can be assigned then the composition would be charge-neutral.Issues
The
smact_validity
script can screen through a large set of compositions within a reasonable time using very little resources. My attempts to use anoxi_state_guesses
solution have been slow and unsuitable for a large number of compositions. (This can be mitigated with a workstation/HPC with a lot of cores and using parallelising the task though).My own personal testing would suggest that a SMACT-based approach is about 15 times faster.
Beta Was this translation helpful? Give feedback.
All reactions