1: from pfac import fac
2: fac.SetAtom(’Fe’)
3: # 1s shell is closed
4: fac.Closed(’1s’)
5: fac.Config(’2*8’, group = ’n2’)
6: fac.Config(’2*7 3*1’, group = ’n3’)
7: # Self-consistent iteration for optimized central potential
8: fac.ConfigEnergy(0)
# the configurations passed to OptimizeRadial should always
# be one or two of the lowest lying ones. If you need more highly
# excited levels, such as n=4, 5, 6, ..., do not put them into
# OptimizeRadial.
9: fac.OptimizeRadial([’n2’, ’n3’])
10: fac.ConfigEnergy(1)
11: fac.Structure(’ne.lev.b’, [’n2’, ’n3’])
12: fac.MemENTable(’ne.lev.b’)
13: fac.PrintTable(’ne.lev.b’, ’ne.lev’, 1)
14: fac.TransitionTable(’ne.tr.b’, [’n2’], [’n3’])
15: fac.PrintTable(’ne.tr.b’, ’ne.tr’, 1)
Line numbers are added for easy reference, they are not part of the script. As is evident from the above
list, all functions implemented in the FAC extension modules have a naming convention of concatenated
capitalized words. Line 1 imports the extension module fac from the package pfac. Alternatively, one
could have used
from pfac.fac import *
then, all module qualifiers fac. in the following lines can be omitted. Line 2 set the atomic element to be iron.
Line 3 is a comment, which starts with a #. Line 4–6 specifies the electronic configurations to be included
in the calculation. The closed shells specified by the function Closed must be inactive in this calculation.
In the Config functions, 2*8 stands for an n = 2 complexes with 8 electrons, while 2*7 3*1 stands for all
configurations resulting from excitation of one electron from n = 2 to n = 3. For more possibilities in the
specification of electronic configurations, one is referred to Chapter 3. Line 8–10 carries out a Dirac-Fock-
Slater self-consistent calculation to derive a local central potential which represents the electronic screening
of the nuclear potential. In this calculation, the potential is optimized to the average electron clouds of
configurations n2 and n3, since in FAC, all atomic processes are treated with basis wavefunctions generated
from a single potential. This results in the potential to be less optimized for n2 and n3 individually. Lines
8 and 10 are used to make a crude correction to the resulting energy levels due to this effect. The first call
to ConfigEnergy(0) will make individual optimization to all configuration groups. The average energy of
each configuration group with these indivudually optimized potential is then calculated and stored. The
second call to ConfigEnergy(1) will then recalculate the average energy of configuration groups under
the potential taking into account all configuration groups. The difference between the two represents the
effect of a less optimized potential, and are used to adjust the final energy levels. If this procedure is not
needed, one can omit line 8 and 10 in this script. Line 11 sets up the Hamiltonian matrix for levels in
n = 2 and n = 3 complexes, diagonalize it, and saves to the energy level information in the binary file
ne.lev.b. Line 12 builds an in-memory table of energy levels, which is used to convert the binary files to
their ASCII counterparts in verbose mode, such as done in Line 13, which converts ne.lev.b to ne.lev
(the last argument to PrintTable indicates it be done in verbose mode). For the conversion in simple mode
(the last argument is 0), the in-memory table is not needed, and Line 12 may be omitted. For the difference
between the verbose and simple ASCII files, see Chapter 2. Line 14 calculates the E1 oscillator strength
12