CreateAtomicIndicesDict(orbs) takes a list of strings and tries to interpret each as an atomic orbital by checking the last characters. If these are either 's', 'p', 'd', 'f', 'g' or 'h' the string will be interpreted as a non-relativistic orbital with the corresponding l quantum number, separated into Up and Down states. If the string ends on “1/2”, “12”, “3/2”, “32”,…, “9/2” or “92” it will be interpreted as a relativistic orbital with the corresponding j quantum number.
The function then assigns quantum numbers to these states. These can be accessed via the first return argument evaluated at the name of the orbital. The function furthermore creates an entry “all” for including all Indices, all names given in the optional argument groupings, and separate Up and Down entries for non-relativistic states.
With the upcoming release it will also be possible to create artificial orbitals with an arbitrary multiplicity by using strings of the form “name_m a” as input, where m is the desired multiplicity.
Compare CreateAtomicIndicesList() and AtomicNumberOperators().
A small Example:
orbitalsNonRel = {"H_1s","Fe_2s","Fe_2p","Fe_3s","Fe_3d"} orbitalsRel = {"H_1s12","Fe_2s12","Fe_3s12","Fe_2p12","Fe_2p32","Fe_3d32","Fe_3d52"} groupingsNonRel = { {"H_states", {"H_1s"} }, {"Fe_states", {"Fe_2s","Fe_2p","Fe_3s","Fe_3d"}} } IndNonRel, NFNonRel = CreateAtomicIndicesDict(orbitalsNonRel,groupingsNonRel) IndRel, NFRel = CreateAtomicIndicesDict(orbitalsRel) print("\nIndNonRel:") print(IndNonRel) print("\nNFNonRel:") print(NFNonRel) print("\nIndRel:") print(IndRel) print("\nNFRel:") print(NFRel)
IndNonRel: { All = { 0 , 1 , 2 , 3 , 4 , 6 , 8 , 5 , 7 , 9 , 10 , 11 , 12 , 14 , 16 , 18 , 20 , 13 , 15 , 17 , 19 , 21 } , Fe_3s_Up = { 11 } , Fe_2p = { 4 , 6 , 8 , 5 , 7 , 9 } , Fe_2s_Dn = { 2 } , Fe_3d_Dn = { 12 , 14 , 16 , 18 , 20 } , Fe_3s = { 10 , 11 } , Fe_3d = { 12 , 14 , 16 , 18 , 20 , 13 , 15 , 17 , 19 , 21 } , Fe_2s = { 2 , 3 } , Fe_2p_Dn = { 4 , 6 , 8 } , H_states = { 0 , 1 } , Fe_2p_Up = { 5 , 7 , 9 } , H_1s = { 0 , 1 } , Fe_states = { 2 , 3 , 4 , 6 , 8 , 5 , 7 , 9 , 10 , 11 , 12 , 14 , 16 , 18 , 20 , 13 , 15 , 17 , 19 , 21 } , all = { 0 , 1 , 2 , 3 , 4 , 6 , 8 , 5 , 7 , 9 , 10 , 11 , 12 , 14 , 16 , 18 , 20 , 13 , 15 , 17 , 19 , 21 } , H_1s_Up = { 1 } , Fe_3s_Dn = { 10 } , Fe_2s_Up = { 3 } , H_1s_Dn = { 0 } , Fe_3d_Up = { 13 , 15 , 17 , 19 , 21 } } NFNonRel: 22 IndRel: { All = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 } , Fe_2s12 = { 2 , 3 } , Fe_2p32 = { 8 , 9 , 10 , 11 } , Fe_3s12 = { 4 , 5 } , H_1s12 = { 0 , 1 } , all = { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 , 19 , 20 , 21 } , Fe_3d32 = { 12 , 13 , 14 , 15 } , Fe_3d52 = { 16 , 17 , 18 , 19 , 20 , 21 } , Fe_2p12 = { 6 , 7 } } NFRel: 22