# Expert options¶

## Symmetry¶

The symmetry of the system is automatically detected. Normally the symmetry of the initial system is maintained. One can lower the symmetry with the `Symmetry`

key. In such cases the keyword `POTENTIALNOISE`

can force the solution away from the initial symmetry.

`SYMMETRY`

The most common option is

**NOSYM**forcing the program to run without any symmetry. It is also possible to run in a lower symmetry other than NOSYM but this is more involved. The argument should be a list of numbers, representing the operators to maintain. The way to proceed is as follows. First run the calculation with the following added to your inputprint symmetry stopafter gemtry

and then you look in the output for (here the first four operators are listed)

64 SYMMETRY OPERATORS: NO MATRIX TRANSL AXIS DET ROTATION -------------------------------------------------------------------------- 1) 1.000 0.000 0.000 0.000 0.000 1.0 1 0.000 1.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 1.000 2) 1.000 0.000 0.000 0.000 0.000 1.0 1 0.000 1.000 0.000 5.400 0.000 0.000 0.000 1.000 0.000 1.000 3) 1.000 0.000 0.000 5.400 0.000 1.0 1 0.000 1.000 0.000 0.000 0.000 0.000 0.000 1.000 0.000 1.000 4) 1.000 0.000 0.000 5.400 0.000 1.0 1 0.000 1.000 0.000 5.400 0.000 0.000 0.000 1.000 0.000 1.000

from this list you should select the desired operators and use that in your final calculation, for example

Symmetry 1 7 21 31

`POTENTIALNOISE`

The initial potential for the SCF procedure is constructed from a sum-of-atoms density. Added to this is some small noise in the numerical values of the potential in the points of the integration grid. The purpose of the noise is to help the program break the initial symmetry, if that would lower the energy, by effectively inducing small differences between (initially) degenerate orbitals.

PotentialNoise rval

The noise in the potential is randomly generated between zero and an upper limit

*rval*(**Default: 1e-4**a.u.). This can be used therefore to suppress the noise by choosing zero, or to increase it by specifying some large number.

## Excited States¶

By default the levels are occupied according to the aufbau principle. In some cases it is possible to create holes below the Fermi level or uneven occupation for up and down spin with the `Occupations`

(\(\Gamma\)-only) and alternatively the `EnforcedSpinPolarization`

(for an arbitrary number of k-points) key.

`OCCUPATIONS (block-type)`

Allows one to input specific occupations numbers. Applies only for calculations that use only one k-point (i.e. pseudo-molecule calculations).

OCCUPATIONS 1 occupations_alpha {// occupations_beta} End

`occupations_beta`

and the separating double slash (//) must not be used in a spin-restricted calculation.`occupations_alpha/beta`

is a sequence of values assigned to the states (‘bands’) in energy ordering.

If you want to enforce a specific spin-polarization (instead of occupying according to the aufbau principle) you can use the `EnforcedSpinPolarization`

key:

```
EnforcedSpinPolarization rval
```

`EnforcedSpinPolarization`

- Allows to specify the spin polarization, i.e. the difference between the number of alpha and beta electron.
e.g.
`EnforcedSpinPolarization 1`

means that there is one more alpha electron than beta electrons.

`ElectronHole (block-type)`

Allows one to specify an occupied band which shall be depopulated, where the electrons are then moved to the Fermi level. For a spin-restricted calculation 2 electrons are shifted and for a spin-unrestricted calculation only one electron is shifted.

ElectronHole BandIndex ival1 SpinIndex ival2 End

`BandIndex`

*ival1*defines which occupied band shall be depopulated.`SpinIndex`

*ival2*defines the spin of the shifted electron. (1 or 2)

**General Remark**: To accomplish the excitation of a specific low-lying AO of one atom it helps to define for all other atoms a basis set with frozen core and for the chosen one an all-electron basis set. Then the lowest bands are equal to the AOs of the chosen atom. (See the example Si_ElectronHole)

## The programmer key¶

The programmer has many options, most of which are set automatically. However, with the programmer key you can override many default behaviors. An overview is printed early in the output, and looks like

```
====================
R U N C O N F I G
====================
Calculate gradient of basis . . . . . . . . . . . T
Calculate sec. der. of basis . . . . . . . . . . . F
Calculate operator T working on basis . . . . . . . . T
Calculate gradient of fit . . . . . . . . . . . . T
Calculate sec. der. of fit. . . . . . . . . . . . F
Calculate gradient of fit pot. . . . . . . . . . . T
Kin. energy via grad. . . . . . . . . . . . . . F
Calculate gradient of energy . . . . . . . . . . . T
Calculate kin. energy density. . . . . . . . . . . F
Calculate nuc. grad of kin. energy density . . . . . . F
Calculate der. of density . . . . . . . . . . . . T
Calculate second der. of density. . . . . . . . . . F
Calculate nuc. grad. of density . . . . . . . . . . T
Calculate nuc. grad. of grad. density . . . . . . . . F
Exact rho during SCF. . . . . . . . . . . . . . T
Exact grad. rho during SCF. . . . . . . . . . . . F
Exact grad. rho post SCF . . . . . . . . . . . . T
Store history of dens. matrix. . . . . . . . . . . F
Store original Bloch functions . . . . . . . . . . T
Direct . . . . . . . . . . . . . . . . . . F
Direct basis . . . . . . . . . . . . . . . . F
Calculate DOS . . . . . . . . . . . . . . . . T
Calculate Band structure . . . . . . . . . . . . T
Calculate EFG . . . . . . . . . . . . . . . . F
```

Some of these option are controllable via the Programmer key.

`Programmer (block-type)`

`UseZlmFit [true | false]`

- Determines whether or not to use ZlmFit. When using this the DirectBas key will be enabled.

`FlioSinglePrecision [true | false]`

- The basis and fit functions are written and read to so-called FLIO files. With this option the double precision numbers can be converted to single precision, saving half of the IO. The results tend to be still fairly accurate. SCF convergence is usually possible to 1e-5. For deeper convergence disable this option.

`DirectBas [true | false]`

- Normally basis functions (and possibly derivatives) are calculated once and stored on disk. Enabling this option causes BAND not to store the basis functions but to recalculate them when needed. This reduces the amount of IO, at the cost of increased CPU. Also disables FlioSinglePrecision.

`ExactGradRho [true | false]`

- The gradient (and second derivative) of the density are usually obtained via the fitted density. With this option you force the program to use the exact density gradient. This requires the calculation of basis set derivatives.

`KinViaGrad [true | false]`

Matrix elements of the kinetic energy operator are normally calculated as

\[T_{ij} = \frac{1}{2} \int \Psi_i \nabla \cdot \nabla \Psi_j\]Using partial integration this can be rewritten as

\[T_{ij} = - \frac{1}{2} \int (\nabla \Psi_i) \cdot \nabla \Psi_j\]and requires the calculation of the gradient of the basis functions.

`DidervCompat [true | false]`

- Originally all radial derivatives of NAOs were done numerically. However, more accurate derivatives are available from the DIRAC subroutine. To get the old (and slightly worse) derivatives set this option to
*true*.