electronDensityParameters — Specifies the mesh cut-off and whether or not (and to what degree) the atomic configuration should be considered as a spin-polarized system.
This function returns a dictionary with parameters that define the mesh used to represent real-space quantities when evaluating integrals and solving the Poisson equation.
In addition, this is also where you define the spin-properties of the system, specifically if the system should be spin-polarized or not, and whether this polarization is to be considered as fixed (the latter is only relevant for molecules).
If no spin values are supplied (this is the default), the system will not be regarded as spin-polarized. If spin values are provided, the corresponding spin-polarized version of the exchange-correlation potential will automatically be selected and used in the calculation.
The spin-polarization parameters cannot be combined arbitrarily. The following listings indicate the various available possibilities.
List of arguments
Parameter defining the density of the real-space grids for solving the Poisson
equation. The parameter is given as an energy
, which
implicitly defines the grid spacing
from the equivalent
plane wave cut-off component
(note that there is
no factor of 2 here!) which is related to the energy as
, where
is the electron mass. A higher value
(energy) of this parameter gives better accuracy in the calculations.
Default: 150*Rydberg
The value for the net spin-polarization of the initial electron density for
the whole system. The parameter is given as a scalar angular momentum,
e.g. 1.0*hbar. This parameter is not compatible with
initial_scaled_spin.
Default:
None
The scaled net spin-polarization per atom of the initial electron
density. This must be given as a list with numbers confined to the range
[-1:1], e.g. [0.8,-0.6,...] without
units. In addition, the length of the list must match the number of atoms in
the system. See below for a more detailed explanation of what the numbers
mean. This parameter is not compatible with
initial_spin.
Default:
None
The fixed value of the spin-polarization for the entire system given as an
angular momentum. e.g. 0.5*hbar. This parameter can only be
used for molecular calculations.
Default:
None
Set the initial spin, and also specify a finer grid, compared to the default values:
initial_electron_density = electronDensityParameters( mesh_cutoff = 250*Rydberg, initial_spin = 0.2*hbar )
Set the initial scaled spin for a sample with three atoms:
electron_density = electronDensityParameters( initial_scaled_spin = [0.34, -0.25, 0.9] )
If
is given in Rydberg, then
will be given in Bohr.
A higher value of the mesh cut-off gives better accuracy in the results, at the expense of prolonged computational time and more memory usage. It is highly recommended to perform a convergence analysis by systematically increasing this parameter (actually, first start by decreasing it in order to check if it is already converged with the default parameter).
The optimal value of the mesh cut-off depends on the elements (and thereby the pseudo-potentials), that are present in the sample. Elements like hydrogen and lithium only require a cut-off below 100 Rydberg, while some transition metal elements like iron may require cut-offs above 200 Rydberg. The default value for the mesh cut-off is a compromise and is usually (but certainly not always!) a good initial guess. For some materials it is crucial to increase the value to obtain good accuracy, while for others it can be lowered without affecting the accuracy noticeably.
It is not possible to specify both
initial_spin and initial_scaled_spin at
the same time.
The spin of an electron is
. Thus, a
total_spin (or initial_spin) of
2*hbar corresponds to 4 excess, unpaired, spin-up electrons,
which is also known as a quintet configuration (3 unpaired electrons is a
quartet, 2 is a triplet, 1 is a doublet, and 0 is a singlet).
When specifying a spin-polarized calculation, the sign (positive or negative) of the specified spin determines whether the system has a net surplus of spin-up or spin-down electrons.
If initial_spin is set to a larger number than what can be
supported by the electron configuration, double occupancies (two spin-up
electrons in the same orbital, for instance) can occur. This parameters should
only be used if the value of the initial spin has been found from careful
analysis, such as applying Hund's Rule to the atomic configuration.
The simplest way to obtain a spin-polarized calculation is to use the
initial_scaled_spin parameter and set all entries to
1.0. This is usually the safest way to obtain good
convergence in spin-polarized molecular and bulk systems. In spin-polarized
two-probe systems, however, a more careful analysis is often needed in order to
obtain reliable convergence. This will be described in the following section.
initial_scaled_spin
When specifying the initial spin-polarization per atom through the keyword
initial_scaled_spin, the length and ordering of the list must
be the same as the length and ordering of the atomic configuration.
The initial_scaled_spin parameter specifies the degree of
polarization for unpaired electrons (either spin-up or spin-down) within a given
valence electron shell.
Consider bulk iron, which has a total of 8 valence electrons (4s23d6).
How should these electrons be distributed with respect to spin? In the simplest picture, we start by filling all the available spin-up states, and when they have been filled we add the remaining electrons into spin-down states. The resulting occupations are shown in Table 6; remember that the 4s orbitals (both up and down) are filled before the 3d orbitals.
Table 6:
Iron in the maximum spin configuration, corresponding to
initial_scaled_spin = 1.0.
| 4s | 3d | ||||||
|---|---|---|---|---|---|---|---|
| Spin-up |
|
|
|
|
|
|
|
| Spin-down |
|
|
|||||
This configuration corresponds to using
initial_scaled_spin = 1.0 (or
-1, if we reverse the roles of spin-up and spin-down). For
obvious reasons, we will refer to this configuration as the maximum
spin configuration.
Let us define some symbols for reference. Let
be the
total population of shell
(4s and 3d, for iron) in the maximum
spin configuration, where
denotes the spin. We also define
the maximum spin polarization for each shell,
which thus is 4 for 3d in the case of iron. For 4s the maximum spin polarization is zero, which means that this shell cannot be initially polarized in the calculations. A spin polarization of the 4s shell can still occur as a result of the self-consistent calculation, but it requires that the total population of the 4s shell is lower than two, and this cannot be used as an initial condition, since the total population of each shell
is fixed and constant in the process of assigning the initial populations.
The parameter initial_scaled_spin (which we will denote
in the formulas below) determines the initial spin
occupations
of the states in shell
through the following expression:
As mentioned, the total number of valence electrons in each shell
must always be conserved, and this poses a constraint on the
initial spin configurations that can be constructed in this way. It can
easily be verified, that
gives exactly
.
Let us consider a concrete example for iron, with
initial_scaled_spin = 0.5. As mentioned
above, only the 3d shell can be polarized initially, and we find
Combined with the constraint
, we obtain
These populations are equally distributed among the five 3d states for each respective spin.
As a further example, had we instead specified 0.75 as the
value for initial_scaled_spin we would have obtained a
spin-polarized configuration with 3.5 spin-up and 1.5 spin-down electrons on
average per unit-cell in the 3d shell.
The parameter initial_scaled_spin (as well as
initial_spin) only affects the initial
spin polarization. The converged spin-polarization could very well be
different. Let us again study iron as an example.
The script below calculates and prints the converged Mulliken population of a
spin-polarized bulk bcc iron system. Since we do not know what value to use
for the initial scaled spin, we use 1.0.
from ATK.KohnSham import * # Create example structure Iron = BulkConfiguration( bravais_lattice=BodyCenteredCubic(2.87*Angstrom), elements=[Iron], cartesian_coordinates=[3*(0.0,)]*Angstrom ) # K-points must be specified for bulk calculations kpoints = brillouinZoneIntegrationParameters((10,10,10)) # Specify spin-polarized electron density initial_density = electronDensityParameters( initial_scaled_spin=[1.0] ) # Configure and perform actual calculation method = KohnShamMethod( electron_density_parameters=initial_density, brillouin_zone_integration_parameters=kpoints, ) scf_iron = method.apply(Iron) # Increase verbosity when reporting # Mulliken populations import ATK ATK.setVerbosityLevel(10) print calculateMullikenPopulation(scf_iron).toArray()
If you run the script, the script should print the following to your screen:
[[ 5.11434491] [ 2.88565509]]
The first number is the total Mulliken population of spin-up electrons and the second that of the spin-down electrons. If, in addition, you increased the verbosityLevel(), you would see that the calculation converged in 24 iterations. The question is now, could we have improved the convergence rate by choosing a different initial spin polarization?
As seen above, the converged Mulliken populations for the spin states
correspond to 5.11 electrons occupying a spin-up state whereas 2.89 electrons
occupy a spin-down state (on average per unit cell). Now these numbers also
include the 4s and in fact also some 5p electrons (since a DZP basis set was
used), but by studying the detailed output from the more verbose calculation
it can be seen that the spin polarization of these shells is only about one
percent of that of the 3d shell. Hence, to a very good approximation we can
assume
.
Thus, the converged result corresponds to a value of
initial_scaled_spin equal to
. It can therefore be expected that if we had used
this value in the calculation from the beginning, it would have converged
faster. This is indeed the case; rerunning the script with the new value of
initial_scaled_spin, the self-consistent iteration reaches
convergence in 12 steps, i.e. half as many as before!
We should therefore use 0.56 as the
initial_scaled_spin for iron in spin-polarized
calculations. In addition to providing a speed-up in execution time, a proper
choice of the initial spin can make the difference between converging or not
converging in e.g. spin-polarized two-probe systems.
Finally, let us show how to determine the value that should be assigned to
initial_scaled_spin in order to generate a given, initial,
spin-configuration.
Suppose we wanted to perform a spin-polarized calculation for manganese (7 valence electrons, (4s23d5)) with an initial spin occupation as the one shown in Table 7.
Table 7: Manganese in an electronic configuration with a majority of spin-down electrons.
| 4s | 3d | ||||||
|---|---|---|---|---|---|---|---|
| Spin-up |
|
|
|
||||
| Spin-down |
|
|
|
|
|||
We can see that
, as we
have one unpaired spin-down electron. The number of unpaired electrons in the
maximum spin configuration for manganese is 5 (all 3d electrons in the spin-up
state), and thus we need to set initial_scaled_spin to a
value of
to obtain the desired initial configuration.