# Complete active space self-consistent field (CASSCF)

## Description

CASSCF simultaneously optimizes the orbital coefficients and the CI coefficients of all the possible determinants generated from the active space. The state-averaging scheme can be used for calculating excited states. When reference wavefunctions are given as a input to a CASSCF calculation, a Hartree–Fock calculation is performed by default prior to CASSCF. For the Hartree–Fock options, see the SCF section.

A two-step second-order algorithm is implemented in BAGEL. At each macroiteration, the CI coefficient is optimized by FCI calculations and the orbitals are updated. Microiterations are used for iteratively solving augmented Hessian problems for orbital updates.

The CASSCF algorithm in BAGEL is very robust. If it fails to converge, it is highly likely that your active space is wrong, or your guess orbitals are wrong.

Title: `casscf`

## Keywords

`nstate`

Description: Number of states included in the state averaging.
Datatype: int
Default: 1.

`nact`

Description: Number of active orbitals.
Datatype: int
Default: 0.

`nclosed`

Description: Number of closed orbitals.
Datatype: int
Default: Number of electrons / 2.

`active`

Description: Specify active orbitals. Note that the orbital index starts from 1.
Datatype: vector<int>
Default: Nact / 2 orbitals lower and higher from the valence orbital.
Example:
[36, 37, 39] : include 36th, 37th, and 39th orbitals.

`charge`

Description: Molecular charge.
Datatype: int
Default: 0

`nspin`

Description: The number associated with the spin states: 0 for singlet, 1 for doublet, 2 for triplet, etc.
Datatype: int
Default: 0

`algorithm`

Description: Orbital optimization algorithm.
Datatype: string
Values:
`second`: second-order algorithm.
`noopt`: no orbital optimization.
Default: `second`

`fci_algorithm`

Description: FCI algorithm employed in each macroiteration.
Datatype: string
Values:
`knowles`, `handy`, `kh`: Knowles–Handy Algorithm.
`harrison`, `zarrabian`, `hz`: Harrison–Zarrabian Algorithm.
`parallel`, `dist`: Parallel FCI algorithm.
Default: `parallel` (when the number of active orbital is larger than 9 and number of process is larger than 8), `knowles` (otherwise)

`thresh`

Description: Convergence threshold in macroiteration.
Datatype: double precision
Default: 1.0e-8.

`thresh_micro`

Description: Convergence threshold in microiteration.
Datatype: double precision
Default: 5.0e-6.

`conv_ignore`

Description: If set to “true,” BAGEL will continue running even if the maximum iterations is reached without convergence. Normally an error is thrown and the program terminates.
Datatype: bool
Default: false.

`restart_cas`

Description: If set to “true”, after each macroiteration the orbitals will be written to a binary archive with filename “casscf_<iter>.archive”. They can be read back in using the “load_ref” module.
Datatype: bool
Default: false.

`natocc`

Description: If set to “true,” occupation numbers of natural orbitals within the active space will be printed to casscf.log after each macroiteration.
Datatype: bool
Default: false.

`canonical`

Description: If set to “true,” optimized orbitals will be transformed to semi-canonical orbitals.
Datatype: bool
Default: false.

`maxiter`

Description: Maximum number of macroiteration.
Datatype: int
Default: 50.
Recommendation: Increase if convergence is not obtained.

`maxiter_micro`

Description: Maximum number of microiteration.
Datatype: int
Default: 100.

`maxiter_fci`

Description: Maximum number of iterations in CI coefficient optimization
Datatype: int
Default: copied from `maxiter`

## Example

Two-state CASSCF calculation of benzene. The active space of (6e,6o), which comprises three \(\pi\) and three \(\pi^*\) orbitals, is used.

### Sample input

    { "bagel" : [

    {
      "title" : "molecule",
      "basis" : "svp",
      "df_basis" : "svp-jkfit",
      "geometry" : [
      { "atom" : "C", "xyz" : [     -0.079002,      2.543870,      0.000000 ] },
      { "atom" : "C", "xyz" : [      2.557470,      2.543870,      0.000000 ] },
      { "atom" : "C", "xyz" : [      3.875630,      4.826190,      0.000000 ] },
      { "atom" : "C", "xyz" : [      2.557250,      7.109950,     -0.002266 ] },
      { "atom" : "C", "xyz" : [     -0.078588,      7.109800,     -0.003171 ] },
      { "atom" : "C", "xyz" : [     -1.396870,      4.826620,     -0.001289 ] },
      { "atom" : "H", "xyz" : [     -1.117900,      0.744245,      0.000850 ] },
      { "atom" : "H", "xyz" : [      3.595900,      0.743875,      0.002485 ] },
      { "atom" : "H", "xyz" : [      5.953730,      4.826340,      0.001198 ] },
      { "atom" : "H", "xyz" : [      3.596980,      8.909240,     -0.002377 ] },
      { "atom" : "H", "xyz" : [     -1.118170,      8.909350,     -0.004972 ] },
      { "atom" : "H", "xyz" : [     -3.474820,      4.826960,     -0.001629 ] }
      ]
    },
    {
      "title" : "hf"
    },
    {
      "title" : "casscf",
      "nstate" : 2,
      "nact" : 6,
      "nclosed" : 18,
      "active" : [17, 20, 21, 22, 23, 30]
    }
    ]}

the out of which is shown below. Note that the specified active orbitals are printed in the output.

    ---------------------------
        CASSCF calculation
    ---------------------------

      ==== Active orbitals : =====
           Orbital 17
           Orbital 20
           Orbital 21
           Orbital 22
           Orbital 23
           Orbital 30
      ============================

      * nstate   :      2
      * nclosed  :     18
      * nact     :      6
      * nvirt    :     90
    === CASSCF iteration (svp) ===

      * Using the second-order algorithm

        0  0      -230.58939332     3.18e-03      0.06
        0  1      -230.39960500     0.00e+00      0.06

           res : 9.89e-02   lamb: 1.00e+00   eps : -3.06e-02   step: 3.40e-01    0.02
           res : 2.13e-02   lamb: 1.00e+00   eps : -3.21e-02   step: 3.56e-01    0.02
           res : 2.72e-03   lamb: 1.00e+00   eps : -3.23e-02   step: 3.48e-01    0.02
           res : 2.64e-04   lamb: 1.00e+00   eps : -3.23e-02   step: 3.49e-01    0.03
           res : 3.09e-05   lamb: 1.00e+00   eps : -3.23e-02   step: 3.49e-01    0.04

        1  0      -230.60443140     3.79e-04      0.37
        1  1      -230.42264578     0.00e+00      0.37

           res : 1.06e-02   lamb: 1.00e+00   eps : -3.62e-04   step: 3.57e-02    0.02
           res : 2.13e-03   lamb: 1.00e+00   eps : -3.81e-04   step: 3.76e-02    0.02
           res : 3.31e-04   lamb: 1.00e+00   eps : -3.82e-04   step: 3.69e-02    0.02
           res : 4.53e-05   lamb: 1.00e+00   eps : -3.82e-04   step: 3.69e-02    0.03
           res : 4.21e-06   lamb: 1.00e+00   eps : -3.82e-04   step: 3.69e-02    0.04
           res : 5.33e-07   lamb: 1.00e+00   eps : -3.82e-04   step: 3.69e-02    0.02

        2  0      -230.60501843     1.17e-05      0.36
        2  1      -230.42244692     0.00e+00      0.36

           res : 2.38e-04   lamb: 1.00e+00   eps : -1.11e-07   step: 2.86e-04    0.02
           res : 3.75e-05   lamb: 1.00e+00   eps : -1.21e-07   step: 3.32e-04    0.02
           res : 8.19e-06   lamb: 1.00e+00   eps : -1.21e-07   step: 3.41e-04    0.02
           res : 1.11e-06   lamb: 1.00e+00   eps : -1.21e-07   step: 3.41e-04    0.03
           res : 8.72e-08   lamb: 1.00e+00   eps : -1.21e-07   step: 3.41e-04    0.02
           res : 2.97e-08   lamb: 1.00e+00   eps : -1.21e-07   step: 3.41e-04    0.03

        3  0      -230.60502169     3.97e-07      0.36
        3  1      -230.42244379     0.00e+00      0.36

           res : 6.62e-06   lamb: 1.00e+00   eps : -1.91e-10   step: 1.92e-05    0.02
           res : 1.37e-06   lamb: 1.00e+00   eps : -1.98e-10   step: 1.91e-05    0.02
           res : 2.63e-07   lamb: 1.00e+00   eps : -1.99e-10   step: 1.82e-05    0.02
           res : 4.76e-08   lamb: 1.00e+00   eps : -1.99e-10   step: 1.82e-05    0.03
           res : 5.65e-09   lamb: 1.00e+00   eps : -1.99e-10   step: 1.82e-05    0.02
           res : 1.68e-09   lamb: 1.00e+00   eps : -1.99e-10   step: 1.82e-05    0.03

        4  0      -230.60502176     2.01e-08      0.36
        4  1      -230.42244372     0.00e+00      0.36

           res : 3.09e-07   lamb: 1.00e+00   eps : -6.58e-13   step: 1.33e-06    0.03
           res : 7.14e-08   lamb: 1.00e+00   eps : -6.74e-13   step: 1.33e-06    0.03
           res : 1.28e-08   lamb: 1.00e+00   eps : -6.76e-13   step: 1.28e-06    0.04
           res : 2.75e-09   lamb: 1.00e+00   eps : -6.76e-13   step: 1.28e-06    0.02

        5  0      -230.60502177     1.21e-09      0.33
        5  1      -230.42244372     0.00e+00      0.33

      * Second-order optimization converged. *

## References

The second-order orbital optimization is implemented with an assistance of Takeshi Yanai (Institute for Molecular Science, Japan).