====== CreateAtomicIndicesDict ======
###
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 //[[documentation:language_reference:functions:CreateAtomicIndicesList|CreateAtomicIndicesList()]]// and //[[documentation:language_reference:functions:AtomicNumberOperators|AtomicNumberOperators()]]//.
###
===== Input =====
* //orbs// : A list of strings that can be interpreted as atomic orbitals.
* //groupings// : an optional list of orbital groupings each in the format {groupname, {orb1, orb2,...}}.
===== Output =====
* //Ind// : A dictionary of lists of the indices corresponding to the orbitals given in //orbs//, as well as the groups.
* //NF//: The number of fermionic states in the system.
===== Example =====
###
A small Example:
###
==== Input ====
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)
==== Result ====
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
===== Table of contents =====
{{indexmenu>.#1}}