3.4 Specifying the basis (functions, empty sites, k-points, …)

Among the technical choices in FHI-aims, the choice of the basis set is by far the most important one, both regarding the efficiency and the desired accuracy of a calculation. The shape and details of the basis sets used are thus kept as obvious as possible to the user. At the same time, nobody should be required to type in an entire basis set plus additional specifications from scratch just to run a production calculation.

As described in Ref. [36], the basis functions of FHI-aims take the format

ϕ(𝐫)=u(r)/rYlm(θ,ϕ) (3.13)

in spherical coordinates (r,θ,ϕ) with respect to a given atomic center. Each radial function u(r) is numerically tabulated on a dense logarithmic radial grid, and evaluated as a cubic spline function in other parts of the code. Finally, most radial function types are subject to a cutoff potential of radial with w, ensuring that u(r)=0 for r>rcut=ronset+w.

In periodic calculations, the full basis specification additionally includes the k-point grid for Bloch functions in the first Brillouin zone. Unlike in many other implementations, this is not a performance-critical setting in FHI-aims, and should be set to a well converged value if possible.

The recommended approach to basis sets in FHI-aims is twofold:

  • First, obtain the basic description of each required element by copy-pasting one of the preconstructed species_default files into your control.in file. The preconstructed species_default files address all standard specifications associated with a single species, including the integration grids, the Hartree potential, and most importantly the basis set.

  • Second, edit the copy-pasted species_defaults file to match your specific accuracy and efficiency requirements. For the basis set, this is done by adjusting the species-dependent keywords described below. Most importantly, complete basis sets are listed at the end of each species_default file. You can increase/decrease the basis set accuracy by successively uncommenting / commenting tiers of the basis set. Note that each higher tier must only be used if all lower tiers are active. For example, it does not make sense to use all tier 2 basis functions if the first tier is not used.

In addition to our own case studies,[36] the accuracy of the “tier” (sometimes called “FHI-aims-2009”[327]) preconstructed basis sets for semilocal and hybrid DFT calculations was established in several benchmark assessments.[195, 157]

For beyond-DFT methods like MP2, GW, the random-phase approximation, etc., basis set convergence is very different and absolute convergence is often not possible. In the case of beyond-DFT methods, we recommend to ascertain basis set convergence by performing specific convergence tests for any important results. For total-energy differences between different structures, a counterpoise correction can often be employed (using the empty keyword to create sites which have basis functions but no atoms). For beyond-DFT calculations for light elements (H-Ar), the NAO-VCC-nZ basis sets[327] are additionally available among the species defaults and provide reliable convergence for total-energy methods (see Ref. [327] for details).

Finally, we can also use different approaches to create the free-atom-like core and valence basis functions that are included in the so-called “minimal basis” of the NAO basis sets provided with FHI-aims (unless explicitly excluded using the include_min_basis keyword). If semilocal density functionals are used in the overall calculation, these atomic radial functions are created for the same exchange-correlation functional as requested by the xc keyword of the control.in file. For hybrid density functionals, FHI-aims has historically used LDA- or GGA-derived free-atom-like basis functions by default (still current as of August 2017, but slated to be changed in the future), but the definition of the “minimal basis” can be changed in a limited way using the keywords atomic_solver_xc or atomic_solver. See, for instance, Figure 7 in Ref. [257] for the effect of changing the mimimal basis definition by keyword atomic_solver_xc on total energy convergence for a simple example. Similarly, the free-ion-like radial functions in the ionic basis part of the NAO basis sets can be generated with a different XC functional through the keyword ionic_solver_xc. If desired, both atomic_solver_xc and ionic_solver_xc keywords should be used to ensure a consistent basis set.

Tags for general section of geometry.in:

 

Tag: empty(geometry.in)

Usage: empty x y z species_name
Purpose: Specifies the initial location and type of a site where only the basis functions (but not the nucleus) of a given species are placed.
Restriction: The use of this option should be avoided for physical reasons if a structure relaxation is requested.
x, y, z are real numbers (in Å) which specify the atomic position.
species_name is a string descriptor which names the element on this atomic position; it must match with one of the species descriptions given in control.in.

This allows to place extra basis functions at specified locations outside the actual atoms, e.g., allowing for a counterpoise correction of basis set superposition errors. Although empty sites can be used with periodic boundary conditions, a special care should be taken when mixing periodic and non-periodic reference systems for counterpoise correction.

Tags for general section of control.in:

 

Tag: atomic_solver(control.in)

Usage: atomic_solver string
Purpose: Changes the atomic solver library that generates the free-atom-like radial functions (or free-ion-like radial functions) used, e.g., in the minimal basis part of the NAO basis sets.
string is the name of the solver to be used, either sratom or atom_sphere. Default: sratom

The definition of free atom radial functions used as the “minimal basis” of FHI-aims affects the absolute convergence of total energies calculated by FHI-aims. The radial shape of the free-atom core and valence functions towards the nucleus is nearly exact also for bonded structures if the same exchange-correlation functional is used and thus, e.g., using DFT-PBE generated radial functions when using xc pbe will improve the convergence of total energies. (Other quantities, such as atomization energies or other energy differences, will often exhibit better convergence than the total energy, since the effect of the exact shape of the minimal basis functions near the nucleus often cancels to a reasonable extent. See, e.g., Ref. [157] for a study of these effects for Gaussian-type and NAO basis sets compared to accurate reference values.)

Options for string:

sratom: FHI-aims’ default solver for the electronic structure of spherical free atoms on a dense logarithmic grid, called “sratom” (for “scalar relativistic atom”) is the same solver as used in the Fritz Haber Institute 1998 pseudopotential generation code by Martin Fuchs and coworkers, reference [101]. It was modified by Timo Jacob to incorporate ZORA scalar relativity when needed. This solver can handle semilocal density functionals but not exact exchange. Thus, for hybrid density functionals in FHI-aims, the “minimal basis” radial functions produced by sratom are semilocal DFT, not hybrid functional basis functions. This leads to a slower convergence of absolute total energies with hybrid functionals in FHI-aims (the error in atomization energies cancels to a good extent). See Figure 7 in Ref. [257] for the magnitude of this effect for the example of the convergence of Hartree-Fock calculations for Au2 with an LDA-generated minimal basis compared to the same calculation, but with a minimal basis derived using the Krieger-Li-Iafrate (KLI) approximation [177, 178, 179] to the exact-exchange optimized effective potential. “sratom” is the current default solver for radial functions in FHI-aims.

atom_sphere: This solver for spherical free atoms was developed in Stefan Goedecker’s group for many years (beginning with Ref. [106]) and includes support for semilocal and hybrid density functionals. In FHI-aims, “atom_sphere” is used as a library under the Lesser General Public License (LGPL). As of this writing (August 2017), only non-relativistic calculations are supported by “atom_sphere”. In this case, the resulting total energies for hybrid density functionals converge precisely as well as their semilocal DFT equivalents, as shown, e.g., in Ref. [157]. “atom_sphere” will only work if support for libxc was compiled into the FHI-aims binary used.

 

Tag: atomic_solver_xc(control.in)

Usage: atomic_solver_xc string
Purpose: Changes the exchange-correlation functional used to generate the free-atom-like radial functions in the minimal basis part of the NAO basis sets.
Restriction: This keyword only has an effect if atomic_solver sratom is used.
This keyword must be used in combination with ionic_solver_xc, unless override_atomic_ionic_xc is set to .true.
string is the name of the exchange-correlation functional to be used for the free-atom solution. Default: Internal defaults (no specific option).

One specific option for this keyword is:

KLI

for the Krieger-Li-Iafrate (KLI) approximation [177, 178, 179] to the exact-exchange optimized effective potential. Figure 7 in Ref. [257] is an example of the effect of the choice of different minimal basis functions on the convergence of the total energy of a Hartree-Fock calculation for a heavy element. In that case, the KLI approximation is closer to the converged result since the radial behavior of the minimal basis functions towards the nucleus is closer to the Hartree-Fock result, and because the radial function behavior of the free atom near the nucleus is nearly identical to the near-nuclear behavior of the Kohn-Sham orbitals in the bonded structures. In other words, for Hartree-Fock, KLI represents the nuclear cusp better than the local-density approximation (which is the present default choice of minimal basis radial functions for Hartree-Fock).

In addition, the following functionals have been implemented for the atomic solver and may be specified even if a different functional is chosen for the xc keyword:

pz-lda, pw-lda, vwn, vwn-gauss, pw91_gga, pbe, rpbe, revpbe, pbeint, pbesol, blyp

In all cases where atomic_solver_xc is not specified, the choice of the exchange-correlation functional for free atoms varies with the chosen setting for the xc keyword, but is not necessarily identical. For local and semilocal density functionals, the choice of functional for the minimal basis is generally identical to keyword xc, but for hybrid functionals, the choice may vary and is currently “best” documented in the source code (in subroutine get_free_atoms.f90).

An analagous keyword for the free-ion-like radial functions in the ionic basis part of the NAO basis sets is given by ionic_solver_xc.

 

Tag: ionic_solver_xc(control.in)

Usage: ionic_solver_xc string
Purpose: Changes the exchange-correlation functional used to generate the free-ion-like radial functions in the ionic basis part of the NAO basis sets. This keyword is analogous to atomic_solver_xc for the free-atom-like radial functions in the minimal basis part of the NAO basis sets.
Restriction: This keyword only has an effect if atomic_solver sratom is used.
This keyword must be used in combination with atomic_solver_xc, unless override_atomic_ionic_xc is set to .true.
string is the name of the exchange-correlation functional to be used for the free-atom solution. See the text below atomic_solver_xc for a full list of options. Default: Internal defaults (no specific option).

 

Tag: override_atomic_ionic_xc(control.in)

Usage: override_atomic_ionic_xc flag
Purpose: Overrides a stop that is put in place if a user requests only one of atomic_solver_xc or ionic_solver_xc, or if they request different XC functionals for each. The stop is present to try and ensure that the atomic and ionic basis functions are not generated by different XC functionals. If this, however, is desired by the user, this override can be set to .true.
flag is a logical string, either .false. or .true. Default: .false.
Restriction: This keyword only has an effect if atomic_solver sratom is used.

 

Tag: calculate_atom_bsse(control.in)

Usage: calculate_atom_bsse flag
Purpose: Allows calculation of the basis set superposition error (BSSE) corrected atomization energy.
flag is a logical string, either .false. or .true. Default: .false.

This keyword automates a specialized version of the counterpoise correction and should only be used with great care. A general counterpoise correction for molecules can be implemented manually and in separate steps using the empty keyword. The atomization BSSE correction implemented above, if used, must be checked very carefully to ensure that all single-atom reference calculations carried out in the process reached the exact same atomic reference state. Many important atoms have more than one self-consistent solution, and mixing different self-consistent solutions may produce completely erratic results. Our recommendation therefore to carry out any counterpoise correction manually instead, by doing separate single-point FHI-aims calculations with different molecular fragments and different basis definitions.

The atomization BSSE correction for a molecular structure is defined as:

Δac=x[Ex(x)Ex(sys)] (3.14)

where Ex(x) is the energy of the atom x calculated using only its basis set and Ex(sys) is its energy calculated with the basis set of the whole structure. The BSSE corrected total energy is then

EBSSE=Esys(sys)+Δac (3.15)

The atomization BSSE correction is usually small in the case of the LDA/GGA functionals, but can become significant for methods with explicit correlation like RPA and MP2.

The BSSE corrected atomization energy implemented here, on the other hand, is

EatBSSE=Esys(sys)xEx(sys) (3.16)

In the case where relative energies between different conformations of the same molecule are needed, (EatBSSE)rel(EBSSE)rel.

If the calculation of the full system is performed without spin polarization, the total energy of each atom will also be calculated without spin polarization (and vice versa). In this case, specially when performing the scf cycle with HF, symmetry breaking of the electronic configuration of certain atoms may occur, which might lead to wrong conclusions.

The keyword is currently implemented for use with cluster geometries only. Both RPA and MP2 as the total_energy_method are supported.

 

Tag: hydro_cut(control.in)

Usage: hydro_cut flag
Purpose: Determines whether or not hydrogenic functions are subject to a numerical cutoff potential.
flag is a logical expression, either .true. or .false. Default: .true.

This tag should be kept at the default value unless for testing purposes (e.g., comparing to other codes).

 

Tag: k_grid(control.in)

Usage: k_grid n1 n2 n3
Purpose: Sets up an evenly split k-points grid along the reciprocal lattice vectors of a periodic calculation
n1, n2, n3 : integer numbers defining the number of k-point splits along the first, second and third reciprocal axis of the first Brillouin zone, respectively

Note that the order of n1, n2, n3 must directly correspond to the order in which the lattice_vectors are listed in geometry.in, through the definition and order of the reciprocal lattice. By default, the resulting k_grid is centered around the Γ-point, but can be shifted using the k_offset keyword below.

The keyword symmetry_reduced_k_grid now allows to make use of time-reversal symmetry to reduce the number of k points by a factor of nearly two. This option is the default.

 

Tag: k_grid_density(control.in)

Usage: k_grid_density density
Purpose: Sets up an evenly spaced k-points grid along the reciprocal lattice vectors of a periodic calculation based on the k-point density.
density : float number in units of 1/Å-1 defining the density of k-point spacing along the reciprocal axes of the first Brillouin zone

This keyword generates a k_grid based on:

ni=k_grid_density2π|𝐚i| (3.17)

, where ni is the number of k-points along the i-th lattice vector, 𝐚i is the i-th lattice vector, and is the ceiling function.

Consider the following example. We specify a k_grid_density of 5.0 for the cubic Si diamond unit cell with a lattice constant of a=5.43 Å :

2π|𝐚i| =2πa=2π5.43 Å=1.157 Å1 (3.18)
ni =k_grid_density2π|𝐚i| (3.19)
=5.01.157 (3.20)
=5.785 (3.21)
=6. (3.22)

This results in a k_grid of 6x6x6.

 

Tag: generalized_regular_k_grid(control.in)

Usage: generalized_regular_k_grid density
Purpose: Sets up a generalized regular k-points grid. This keyword uses the autoGR library to compute the k-point grid. lattice vectors of a periodic calculation based on kpoint density.
density : float number in units of 1/Å-3 defining the number of k-points per reciprocal cubic Angstrom (this is different from k_grid_density).

Often, the sampling of the Brillouin zone based on the input geometry is not optimal (especially when you have very skewed systems). The autoGR[224] tries to find a symmetry conserving supercell of the input geometry (=Born-von Karman cell) that results in a better sampling of the Brillouin zone.

 

Tag: k_offset(control.in)

Usage: k_offset f1 f2 f3
Purpose: Defines a possible non-Γ offset for the k-point grid in periodic boundary conditions.
f1, f2, f3 : Fractional coordinates (between zero and one) of a k-point offset , in units of the reciprocal lattice vectors. Default: (0., 0., 0.).

Can be used to shift the grid off-Γ for better k-space sampling. For example, (0.5, 0.5, 0.5) together with even ni for k_grid defines a Monkhorst-Pack [223] type grid. See Sec. 4.3 for details.

The k_offset cannot be used with Hartree-Fock or hybrid density functionals as the current implementation assumes a Γ-centered grid.

 

Tag: k_points_external(control.in)

Usage: k_points_external
Purpose: Instead of an internally specified k-point grid, allows to specify an externally read k-grid from a file k_list.in .

This option is useful to specify an uneven special k-point set [59], etc.

The k_points_external keyword cannot presently be used with Hartree-Fock or hybrid density functionals as the current implementation the presence of the k_grid keyword and information in control.in.

If specified, k_points_external expects a separate input file k_list.in to be provided in the same working directory as all other input files. The format of k_list.in is as follows:
line 1: n1 n2 n3 line 2: Nk lines 3 - Nk+2: k1 k2 k3 weight

All lines are read as free format.
n1, n2, n3 are integers, specifying the descriptors of a 3D k-point grid. During s.c.f., these values are for reference only. However, they may be used for postprocessing after the s.c.f. cycle is complete, e.g., for keyword output postscf_eigenvalues, where the external k-point list k_list.in is not supported.
Nk is the (integer) number of k-points following in the file.
For each k-point, a separate line is expected, including via k1, k2, k3 the coordinates of this point in units of the reciprocal lattice vectors, and via weight the integration weight of this k-point in all Brillouin zone integrals.

 

Tag: override_kgrid_checks(control.in)

Usage: override_kgrid_checks flag
Purpose: By default, FHI-aims stops calculations for 1D and slab systems where more than 1 k-point is specified in vacuum directions. Additionally, the code verifies that the k-point density in reciprocal space is approximately uniform across non-vacuum directions. The current default threshold checks whether the ratio between k-point densities falls below 0.5 or exceeds 2.0. If override_kgrid_checks is set to .true., these checks will be ignored.
flag can be .true. or .false. Default: .false.

 

Tag: onsite_accuracy_threshold(control.in)

Usage: onsite_accuracy_threshold threshold
Purpose: Issues a warning if the onsite integral of a basis function on the ’radial’ integration grid differs from the same onsite integral on the more accurate logarithmic grid by more than threshold.
threshold is given in eV. Default: 0.03 eV.

See keyword output onsite_integrands for the integrals that are actually evaluated.

For “light” settings, you can most likely ignore the associated warning. Possibly, treat it as a reminder to check final results with “tight” settings or similar, just in case.

FHI-aims writes the respective onsite integral values for all its radial functions side by side after the setup of all radial functions is complete. Too large deviations between the calculated values on the radial and logarithmic grids can indicate accuracy problems, which is a particular concern for high-accuracy benchmark calculations. In particular, Gaussian-type orbital basis sets of the Dunning type that are used for high-level reference calculations need grids that are far more accurate than normal NAO basis sets, due to the unphysical wiggles that contracted Gaussian functions with high exponents introduce near the nucleus.

If the associated warning strikes, the grid accuracy can be improved either using the radial keyword or (simpler) the radial_multiplier keyword.

However, if onsite_accuracy_threshold triggers a warning for “light” settings, most likely you can safely ignore the warning. With light settings, the point may be to do a reduced-accuracy calculation, which should still be safe for its original purposes. Just check the radial grid when in doubt.

If the flag override_integration_accuracy is toggled to .false., however, FHI-aims does stop whenever it encounters a radial function whose onsite integrals are not deemed accurate enough by the onsite_accuracy_threshold criterion.

 

Tag: override_integration_accuracy(control.in)

Usage: override_integration_accuracy flag
Purpose: If set to false, FHI-aims stops calculations for which the onsite integral of any radial function is less accurate than prescribed by keyword onsite_accuracy_threshold.
flag can be .true. or .false. Default: .true.

 

Tag: symmetry_reduced_k_grid(control.in)

Usage: symmetry_reduced_k_grid flag
Purpose: Determines whether or not to make use of time-reversal symmetry.
flag is a logical expression, either .true. or .false. Default: .true.

 

Tag: small_basis_param(control.in)

Usage: small_basis_param element c rcut
Purpose: Alters the correction strength – c – and onset distance – rcut – of a specific element when using minimal+s species corrections either to re-parameterize for a different small basis set or to alter a specific element’s correction for to reduce basis set error in a known way. For default values for all implemented elements see the file small_basis_corrections.f90
element: This is used to input the element which is having its parameters changed. Input the element in the two letter periodic table format, i.e. Na
c: This is used to change the internal correction strength value used for the corrections on this element
rcut: This is used to change the cutoff distance in Angstroms

 

Tag: wave_threshold(control.in)

Usage: wave_threshold threshold
Purpose: Determines the outer radius beyond which a radial function is considered zero.
threshold is a small positive number. Default: 10-6. Lowered to 10-8 by default if output cube is requested.

A radial function is considered zero (not evaluated) beyond the radius where u(r) and its first and second derivatives become smaller than threshold. The default is chosen such as to not affect any results at all.

For electron densities or orbitals plotted for visualization using cube files (output cube functionality), a too high value of wave_threshold can sometimes lead to small but visible discontinuities. Thus, the default threshold is lowered to 10-8 if outputcube is requested.

Subtags for species tag in control.in:

 

species sub-tag: basis_acc(control.in)

Usage: basis_acc threshold
Purpose: Technical cutoff criterion for on-site orthonormalization of radial functions
threshold is a small positive real threshold. Default: 10-4.

Before any calculation, all radial functions for a single species are Gram-Schmidt orthonormalized. If the norm of the function after orthonormalization is smaller than threshold, that function is omitted.

 

species sub-tag: basis_dep_cutoff(control.in)

Usage: basis_dep_cutoff threshold
Purpose: Basis function dependent adjustment of the confinement potential for this species
threshold is either a positive real number, or can be explicitly set .false.. Default: 10-4.

If not .false., the onset of the basis confining potential (see cut_pot tag below) is adjusted separately for each basis function, such that the norm of this basis function outside ronset is smaller that threshold. The maximum possible onset radius is still given by the value explicitly specified by the cut_pot tag.

 

species sub-tag: confined(control.in)

Usage: confined n l radius
Purpose: Adds a confined free-atom like radial function to the basis set.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).
radius is the onset radius of the confining potential (in atomic units, 1 a.u. = 0.529177 Å). If the word auto is specified instead of a numerical value, the default onset radius given in the cut_pot tag is used.

The defining potential for this basis function type consists of the non-spinpolarized, self-consistent spherical free-atom potential (possibly itself confined, using the cut_free_atom tag), and a confining potential. The shape of the confining potential is the same for all basis functions of a given species, and set using the cutoff_type and cut_pot subtags.

 

species sub-tag: core(control.in)

Usage: core n l
Purpose: Defines the top “core” shell of the species for this angular momentum.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).

Currently not needed for production calculations, but listed here because the “core” infrastructure is currently being reworked and may see useful additions in the near future. This flag defines which electrons of the species are considered “core” electrons, and which enter as explicit valence electrons.

 

species sub-tag: core_shell_occ(control.in)

Usage: core_shell_occ n l occupation
Purpose: Specifies a non-standard occupation number for a core shell in the non-spinpolarized free atom that defines the minimal basis.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).
occupation is the number of electrons in the specified core shell of the given species.

This keyword can be used to introduce a non-spinpolarized, radially symmetric core hole into a species definition. The minimal basis functions for this species will then be generated in the presence of the core hole.

Example:
core_shell_occ 2 p 5.0

specifies the occupation of the 2p core shell with 5 electrons instead of the usual 6. Whenever core_shell_occ is used, the occupation of the valence levels must be adjusted accordingly using the keyword valence, to keep the free atom neutral.

Note that this keyword only affects the behaviour of the atomic solver. It does not modify the occupation of the core levels in the actual FHI-aims calculation - for that, one can use deltascf_basis or deltascf_projector.

 

species sub-tag: core_states(control.in)

Usage: core_states number
Purpose: Independent determination of the number of states that are core states in the current species.
number is an integer number (to be multiplied by 2 for the number of core electrons). Default: 0.

Experimental at present, not needed for any production purposes. See also the core keyword. The core_states keyword should interact with the core keyword, but does not yet, since any associated functionality is still under development. Both keywords are listed here for future reference only.

 

species sub-tag: cut_atomic_basis(control.in)

Usage: cut_atomic_basis flag
Purpose: Only relevant to decide whether the basis_dep_cutoff keyword also applies to atomic-type (minimal) radial functions.
flag is a logical expression, either .true. or .false. Default: .false.

This keyword applies only to the setting specified by keyword basis_dep_cutoff. Do not enable it routinely without thorough testing.

By default, the minimal basis functions in FHI-aims are subject to the cutoff potential with the fixed onset specified by the cut_pot keyword. However, the more restrictive basis_dep_cutoff keyword does not apply to the minimal basis by default.

This can be changed by setting cut_atomic_basis to .true., but the associated total energy changes are significantly larger than for other basis functions. By default, we therefore do not recommend adding a tighter cutoff to the minimal basis functions at this time. It is, however, possible that this effect is mainly a systematic error between the core states, and after further testing, we may yet choose to enable this keyword if we can guaranteed that its use is safe.

 

species sub-tag: cut_pot(control.in)

Usage: cut_pot onset width scale
Purpose: Specifies the numerical parameters for the general (default) confinement potential vc(r) for all basis functions of this species.
onset specifies the default onset radius of the cutoff potential, in Å (vc(r)=0 for r<ronset).
width specifies the radial width w of the cutoff potential, in Å (vc(r)= for r>ronset+w).
scale is a scaling parameter to increase or decrease the numerical value of vc.

This tag is mandatory, since it specifies onset, a critical parameter that allows to tune the efficiency of a calculation for a given target accuracy. Unless reduced by the basis_dep_cutoff tag, onset is the default onset radius used to construct all valence (minimal) and hydrogen-like basis functions of this species. In addition, any confined free-atom or free-ion like radial functions use this onset radius if auto is used in their specification.

Notes: The functional form of vc(r) can be selected using the cutoff_type keyword, and width and scale apply to this shape. Modifying these latter parameters is usually not necessary for a production calculation, but the onset value should be verified at least as a quick numerical check.

 

species sub-tag: cutoff_type(control.in)

Usage: cutoff_type identifier
Purpose: Specifies the functional form of the confinement potential associated with this species.
identifier is a string that selects a given confinement potential shape as specified in the code. Default: exp(1_x)_(1-x)2.

All confinement potentials in FHI-aims are characterized by the rigorous boundaries vc(r)=0 for r<ronset and vc(r)= for r>rcut=ronset+w, where ronset may depend on the basis function, and w is the width specified by the cut_pot tag. In addition, each shape contains a scaling parameter s, also specified via the cut_pot tag.

Available confinement potential shapes (identifier) for ronset<r<rcut=ronset+w are:

  • exp(1_x)_(1-x)2 :

    vc(r)=exp(wrronset)1(rrcut)2

    (the default in FHI-aims)

  • junquera :

    vc(r)=exp(wrronset)1(rrcut)

    (the form originally suggested by Junquera et al. [161])

  • x2_(1-x2)

    vc(r)=(rronset)21(rrcut)2

Note that the default shape is Equation (9) in reference [36], except that the “” sign in the exponential is missing in the reference. The source code, of course, has the “” sign as it should be, ensuring that the confinement potential and all its derivatives go to zero at r=ronset. Thanks go to Susi Lehtola for spotting this.

 

species sub-tag: gaussian(control.in)

Usage: gaussian L N [alpha]
              [ alpha_1 coeff_1 ]
              [ alpha_2 coeff_2 ]
              [ … ]
              [ alpha_N coeff_N ]
Purpose: Adds a Gaussian-based radial function to the basis set.
Restriction: This basis function type is not subject to a cutoff potential. It may therefore require a wider radial_base integration grid than the standard NAO’s in FHI-aims.
L is an integer number, specifying the angular momentum
N is an integer number, specifying how many primitive Gaussians comprise the present radial function
alpha : If N=1, this is the exponent defining a primitive Gaussian function [in bohr-2].
alpha_i coeff_i : If N>1, i=1,,N additional lines specify exponents αi and expansion coefficients gi for a non-primitive linear combination of Gaussians.

FHI-aims allows to use Gaussian-based radial functions to compare to existing popular Gaussian-based implementations of quantum chemistry. These functions can either be primitive Gaussians,

u(r)=B(L,α)rL+1exp(αr2), (3.23)

where B(L,α) is the normalization constant for a primitive gaussian, or non-primitive linear combinations.

u(r)=1𝑁𝑜𝑟𝑚rL+1i=1i=NgiBi(L,αi)exp(αir2). (3.24)

In existing quantum chemistry codes, Gaussian basis functions can be defined either as spherical Gaussians [Eq. (3.23) above], or as cartesian Gaussians,

ϕ(𝐫)=xkymznexp(αr2),wherek+m+n=L. (3.25)

This behavior can be mimicked using the pure_gauss tag (see below). Finally, note that in order to use an exclusively Gaussian-based basis set, you must prevent the use of the minimal free-atom like NAO basis functions using the include_min_basis tag.

 

species sub-tag: hydro(control.in)

Usage: hydro n l z_eff
Purpose: Adds a hydrogen-like radial function to the basis set.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).
z_eff scales the radial function as an effective nuclear charge in the defining Coulomb potential zeff/r.
By default, hydrogen-like basis functions in FHI-aims are subject to the numerical confinement potential given by cutoff_type and cut_pot. Optionally, analytical hydrogen-like functions (no confinement) can be requested using the global hydro_cut tag.

 

species sub-tag: include_min_basis(control.in)

Usage: include_min_basis flag
Purpose: Allows to exclude the minimal basis of numerically tabulated free-atom basis functions (core and valence) from the basis set.
flag is a logical expression, either .true. or .false. Default: .true.

This flag is normally only useful to compare explicitly with basis sets from other methods, usually Gaussian basis sets.

With Gaussian basis sets and any other basis sets that should not include any radial functions of the numeric atom-centered orbital spherical free atom, include_min_basis must be set to .false.

If include_min_basis is set to .true., the basis set will additionally include the numerical spherical free-atom radial functions. For our standard FHI-aims numeric atom-centered orbital basis sets, this behavior is desired and part of their definition. However, if these basis functions are added to a standard Gaussian-type basis set, then total energies and other computed quantities will not be the same as, say, with a pure Gaussian-type orbital code.

Note that, due to the presence of the free-atom radial functions, our numeric atom-centered basis sets usually give lower total energies for DFT than standard Gaussian basis sets, because the description of the region near the nucleus is more precise. This is demonstrated quantitatively, including figures, in the appendix of Ref. [327].

 

species sub-tag: ion_occ(control.in)

Usage: ion_occ n l occupation
Purpose: Specifies the shell occupation of a radially symmetric, non-spinpolarized free ion that defines any ionic basis functions.
Restriction: Only one type of ion can be used to define ionic basis functions for a given species.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).
occupation is the number of electrons in the topmost occupied valence shell of this ion.

This tag defines an ionic configuration, but does not actually add any ionic functions to the basis used in the present calculation. Actual basis functions are added by the ionic keyword.

Only the topmost valence shell of each angular momentum channel of the ion is specified. All lower-lying shells are assumed to be completely filled for the self-consistent spherical free-ion calculation.

 

species sub-tag: ionic(control.in)

Usage: ionic n l radius
Purpose: Adds a free-ion like radial function to the basis set.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).
radius is the onset radius of the confining potential (in atomic units, 1 a.u. = 0.529177 Å). If the word auto is specified instead of a numerical value, the default onset radius given in the cut_pot tag is used.

 

species sub-tag: pure_gauss(control.in)

Usage: pure_gauss flag
Purpose: If .true., any gaussian basis functions for this species will be purely spherical Gaussians.
flag is a logical string, either .false. or .true. Default: .true.

See keyword gaussian for the distinction between spherical and cartesian Gaussian functions. In short, cartesian and spherical Gaussian functions are equivalent except that for a given L, cartesian Gaussians add a so-called angular momentum contamination. If pure_gauss is specified, this angular momentum contamination is mimicked by FHI-aims.

Consider the simple (textbook!) three-dimensional harmonic oscillator in quantum mechanics. This can be solved either in cartesian coordinates, or in spherical coordinates. If solves in cartesian coordinates, you will find that there are six degenerate solutions for the principal quantum number 2, five of which correspond to l=2 (d channel), but one of which corresponds to l=0 (s channel). This is the exact angular momentum contamination exhibited by the cartesian definition of a Gaussian basis function.

 

species sub-tag: valence(control.in)

Usage: valence n l occupation
Purpose: Specifies the shell occupation of the radially symmetric, non-spinpolarized free atom that defines the minimal basis.
n is the (integer) radial quantum number.
l is a character, specifying the angular momentum ( s, p, d, f, …).
occupation is the number of electrons in the topmost occupied valence shell of this ion.

Only the topmost valence shell of each angular momentum channel of the atom is specified. All lower-lying shells are assumed to be completely filled for the self-consistent spherical free-atom calculation. The valence occupation must be defined explicitly for each species.

The self-consistent free-atom potential generated by this calculation is used to generate all minimal and confined basis functions used for this species, after the confining potential is added.

The self-consistent free-atom calculation can itself be confined by a different confining potential, the onset of which is specified by the cut_free_atom keyword.

For DFT-LDA/GGA, the same xc functional that is used in the full three-dimensional calculation is also used to define the self-consistent free atom. For any methods involving Hartree-Fock exchange (e.g., hybrid functionals), the free atom is generated using the pw-lda LDA functional.

The self-consistent free atom density generated here is also used in the construction of partition functions for the Hamiltonian integrals and the Hartree potential, as well as to build the initial charge density (unless otherwise requested!) and the reference charge density subtracted before constructing the Hartree potential.

 

species sub-tag: sto(control.in)

Usage: sto n l zeta
Purpose: Adds a Slater-type orbital to the basis set.
Notes: This basis function type is not subject to a cutoff potential.
n is an integer which plays the role of the principal quantum number for the STO
l is an integer specifying the STO angular momentum
zeta is a double precision number specifying the STO exponent, which plays the role of the effective nuclear charge

 

species sub-tag: species_default_type(control.in)

Usage: species_default_type type
Purpose: Gives information to the program about the type of species being used.
type: This is a string which is parsed by the program to understand what type of species is being used.

This keyword is only currently implemented forspecies_default_type minimal+s. This line in the species defaults enables the force, energy, and stress corrections for use with minimal+s type species defaults – see species default section for more information on these basis sets. To change the c, and rcut parameters of these corrections, see the entry of the small_basis_param keyword.