Skip to content

Spin-Orbit Coupling and g-tensor Calculation

Spin-Orbit Coupling

Spin-Orbit Coupling (SOC) is an important requirement for evaluating a number of molecular magnetic properties.1 In HUMMR, SOC can be treated in the framework of Quasi-Degenerate Perturbation Theory which can be regarded as a molecular equivalent to atomic Russell-Saunders (or LS) coupling. This approach corresponds to the diagonalization of the SOC Hamiltonian in the basis of nonrelativistic multiplets that were obtained as roots of a preceding CASSCF (CISolver FCI) or MCSCF (CISolver HCI) calculation. This type of calculation is invoked by setting the DoSOC keyword to true.

Following are the sample inputs for FCI-SOC and HCI-SOC calculations:

fci-soc.inp
General
  CalcType CASSCF
  Charge 1
  Mult 2
  OrcaJSONName orca.json
  Basis def2-svp
End

CASSCF
  NEl 3
  NOrb 4
  NRoots 2
  CISolver FCI
  MaxIter 30
  OrbStep FNR
  DoSOC true
End

Geom
  Li 0.0 0.0 0.0
  F  0.0 0.0 5.0
End
hci-soc.inp
General
  CalcType CASSCF
  Charge 1
  Mult 2
  Basis def2-svp
  OrcaJSONNAME orca.json
End

CASSCF
  NEl 3
  NOrb 4
  NRoots 2
  CISolver HCI
  MaxIter 35
  DoSOC true
End

CI
  DoCIPSIonHCI True
  EpsilonGen 1e-2
  EpsilonHCI 1e-5
End

Geom
  Li 0.0 0.0 0.0
  F  0.0 0.0 5.0
End

SOC Output

The Results are printed in the "SOC Calculation" section of the HUMMR ouput file. Following are example outputs:

Expand to show SOC output snippets
fci-soc.out
===============
SOC calculation
===============

  Calculating SOMF one-electron integrals...        done 7.40e-03 s
  Calculating SOMF two-electron integrals...        done 7.30e-02 s
  Transforming SOMF Integrals from Cartesian to Spherical basis...

  =================================
  SOC with CASSCF Diagonal Energies
  =================================
  Constructing SOC matrix                        ...done
      Non-zero SOC Matrix elements in cm^-1
      <Mult, Root, Ms  |H|Mult, Root, Ms  > 
      <   2,    0,  0.5|H|   2,    1,  0.5> =    0.000 + i * -125.500    at (  0,  2)
      <   2,    0, -0.5|H|   2,    1, -0.5> =    0.000 + i *  125.500    at (  1,  3)

  Diagonalizing Hamiltonian Matrix               ...done

  Total Hamiltonian Matrix Real:
              0            1            2            3     
    0   -106.51319953  -0.00000000   0.00000000   0.00000000
    1      0.00000000-106.51319953  -0.00000000   0.00000000
    2      0.00000000  -0.00000000-106.51319544  -0.00000000
    3      0.00000000   0.00000000   0.00000000-106.51319544

  Total Hamiltonian Matrix Imaginary:
              0            1            2            3     
    0     -0.00000000   0.00000000  -0.00057182  -0.00000000
    1      0.00000000   0.00000000  -0.00000000   0.00057182
    2      0.00057182   0.00000000   0.00000000   0.00000000
    3      0.00000000  -0.00057182   0.00000000  -0.00000000

  Order of states in above matrices: Mult/Root/Ms
  Spin-Orbit Coupled Eigen-values:
      E(  0) =    -106.513769306090 Eh          0.00 cm-1
      E(  1) =    -106.513769306090 Eh          0.00 cm-1
      E(  2) =    -106.512625662358 Eh        251.00 cm-1
      E(  3) =    -106.512625662358 Eh        251.00 cm-1

  Spin-Orbit Coupled Eigenstates:
  State(  0) =    -106.513769306090 Eh         0.00 cm-1
          Weight          Real           Imag       Mult    Root     Ms
        0.50178900     0.00000000    -0.70837067     2        0      0.5
        0.49821100    -0.70584063    -0.00000000     2        1      0.5

  State(  1) =    -106.513769306090 Eh         0.00 cm-1
          Weight          Real           Imag       Mult    Root     Ms
        0.50178900    -0.00000000    -0.70837067     2        0     -0.5
        0.49821100     0.70584063     0.00000000     2        1     -0.5

  State(  2) =    -106.512625662358 Eh       251.00 cm-1
          Weight          Real           Imag       Mult    Root     Ms
        0.49821100     0.00000000     0.70584063     2        0      0.5
        0.50178900    -0.70837067     0.00000000     2        1      0.5

  State(  3) =    -106.512625662358 Eh       251.00 cm-1
          Weight          Real           Imag       Mult    Root     Ms
        0.49821100    -0.00000000    -0.70584063     2        0     -0.5
        0.50178900    -0.70837067    -0.00000000     2        1     -0.5

  SOC calculation done in       0.0222 seconds.

In the first example, the SOC calculation was done on top of a FCI-CASSCF calculation for a doublet with 2 roots. The Spin-Orbit Coupled Eigenstates are printed at the bottom of this section. For an Eigenstate, it's corresponding Eigenvalue (Real) and Eigenvector (Complex) is printed as follows:

soc.out
   Spin-Orbit Coupled Eigenstates:
   State(  0) =    -106.513769306090 Eh         0.00 cm-1
           Weight          Real           Imag       Mult    Root     Ms
         0.50178900     0.00000000    -0.70837067     2        0      0.5
         0.49821100    -0.70584063    -0.00000000     2        1      0.5

   State(  1) =    -106.513769306090 Eh         0.00 cm-1
           Weight          Real           Imag       Mult    Root     Ms
         0.50178900    -0.00000000    -0.70837067     2        0     -0.5
         0.49821100     0.70584063     0.00000000     2        1     -0.5

   State(  2) =    -106.512625662358 Eh       251.00 cm-1
           Weight          Real           Imag       Mult    Root     Ms
         0.49821100     0.00000000     0.70584063     2        0      0.5
         0.50178900    -0.70837067     0.00000000     2        1      0.5

   State(  3) =    -106.512625662358 Eh       251.00 cm-1
           Weight          Real           Imag       Mult    Root     Ms
         0.49821100    -0.00000000    -0.70584063     2        0     -0.5
         0.50178900    -0.70837067    -0.00000000     2        1     -0.5

   SOC calculation done in       0.0222 seconds.
Getting a more detailed output

To get a more detailed output, set the keyword PRINTLEVEL to greater than or equal to 2 in the General keyword block. This will print how the SOC matrix is calculated in more detail. Following is a sample input for such a calculation

soc.inp
General
  CalcType CASSCF
  Charge 1
  Mult 2
  ORCAJSONName orca.json
  Basis def2-svp
  AuxBasis def2-svp-C
  PRINTLEVEL 2
End

CASSCF
  NEl 3
  NOrb 4
  NRoots 3
  FullCIType FCI
  MaxIter 35
  OrbStep SuperCIPTDIIS
  SwitchOrbStep DIIS
  FullConvergence true
  DOSOC true
End

Geom
  Li 0.0 0.0 0.0
  F  0.0 0.0 5.0
End

RI Approximation for SOMF Integrals

To utilize the RI Approximation for evaluating the SOMF Integrals in a SOC calculation, the DORISOMF keyword has to be set to true in the Integrals Block of the HUMMR input file. In this case, the Coulomb contribution to the two-electron part is computed using a resolution-of-the-identity approach and hence requires definition of an auxiliary basis set in the General keyword block. The exchange contribution to the two-electron part of the SOMF integrals is calculated using a one-center approximation when DORISOMF is set to true. Following is a sample input:

soc_using_risomf.inp
General
  CalcType CASSCF
  Charge 1
  Mult 2
  ORCAJSONName orca.json
  Basis def2-svp
  AuxBasis def2-svp-C
End

CASSCF
  NEl 3
  NOrb 4
  NRoots 3
  FullCIType FCI
  MaxIter 35
  OrbStep SuperCIPTDIIS
  SwitchOrbStep DIIS
  FullConvergence true
  DOSOC true
End

Integrals
  DORISOMF true
End

Geom
  Li 0.0 0.0 0.0
  F  0.0 0.0 5.0
End

Reminder

Do not forget to set the AuxBasis keyword in the General Block

SOC-corrected Spectra

When DoSOC is set to true, HUMMR automatically computes and prints SOC-corrected excitation energies and oscillator strengths alongside the standard SOC output. The oscillator are boltzmann-weighted. This table provides a direct spectroscopic picture of the spin-orbit coupled states, using the CASSCF SOC eigenstates as the final states.

The SOC-corrected spectrum table is printed immediately after the SOC eigenvalues and eigenstates section alongside Boltzmann populations of all states at the specified Temperature. All i->j transitions from thermally populated states are printed.

SOC-corrected Spectrum Output Example

Following is a sample output:

soc_spectra.out
Temperature: 300.00 K (k_B*T = 0.025852 eV = 208.51 cm-1)
Thermally accessible initial states: 6 (within 5.0 k_B*T)

Boltzmann populations of SOC-corrected states:
    State   0:  E =   0.000000 eV (    0.00 cm-1),  Population = 2.0428e-01
    State   1:  E =   0.000002 eV (    0.01 cm-1),  Population = 2.0426e-01
    State   2:  E =   0.005673 eV (   45.76 cm-1),  Population = 1.6403e-01
    State   3:  E =   0.005673 eV (   45.76 cm-1),  Population = 1.6403e-01
    State   4:  E =   0.011347 eV (   91.52 cm-1),  Population = 1.3171e-01
    State   5:  E =   0.011347 eV (   91.52 cm-1),  Population = 1.3171e-01
    State   6:  E =   1.735081 eV (13994.37 cm-1),  Population = 1.4526e-30
    State   7:  E =   1.735081 eV (13994.37 cm-1),  Population = 1.4526e-30
    State   8:  E =   1.735082 eV (13994.38 cm-1),  Population = 1.4525e-30

SOC-corrected absorption spectrum:
    Transition     Energy [eV]         Energy [cm-1]       Wavelength [nm]       f_osc*pop         |μx| [au]   |μy| [au]   |μz| [au]
    4->5           0.000000            0.00                356248435323653.5     0.000000000       0.00000      0.00000      0.00000
    2->3           0.000000            0.00                123316766073572.4     0.000000000       0.00000      0.00000      0.00000
    0->1           0.000002            0.01                668301219.9           0.000000000       0.00000      0.00000      0.00000
    1->2           0.005671            45.74               218613.1              0.000000000       0.00012      0.00007      0.00000
    1->3           0.005671            45.74               218613.1              0.000000000       0.00007      0.00012      0.00000
    0->2           0.005673            45.76               218541.6              0.000000000       0.00007      0.00012      0.00000
    0->3           0.005673            45.76               218541.6              0.000000000       0.00012      0.00007      0.00000
    3->4           0.005673            45.76               218541.3              0.000000000       0.00010      0.00010      0.00000
    3->5           0.005673            45.76               218541.3              0.000000000       0.00010      0.00010      0.00000
    2->4           0.005673            45.76               218541.3              0.000000000       0.00010      0.00010      0.00000
    2->5           0.005673            45.76               218541.3              0.000000000       0.00010      0.00010      0.00000
    1->4           0.011345            91.50               109288.6              0.000000000       0.00000      0.00000      0.00000
    1->5           0.011345            91.50               109288.6              0.000000000       0.00000      0.00000      0.00000
    0->4           0.011347            91.52               109270.7              0.000000000       0.00000      0.00000      0.00000
    0->5           0.011347            91.52               109270.7              0.000000000       0.00000      0.00000      0.00000
    5->6           1.723735            13902.86            719.3                 0.000416782       0.19356      0.19356      0.00000
    5->7           1.723735            13902.86            719.3                 0.000000186       0.00409      0.00409      0.00000
    4->6           1.723735            13902.86            719.3                 0.000000186       0.00409      0.00409      0.00000
    4->7           1.723735            13902.86            719.3                 0.000416782       0.19356      0.19356      0.00000
    5->8           1.723735            13902.87            719.3                 0.000000000       0.00000      0.00000      0.00000
    4->8           1.723735            13902.87            719.3                 0.000000000       0.00000      0.00000      0.00000
    3->6           1.729408            13948.62            716.9                 0.000000000       0.00000      0.00000      0.00000
    3->7           1.729408            13948.62            716.9                 0.000000000       0.00000      0.00000      0.00000
    2->6           1.729408            13948.62            716.9                 0.000000000       0.00000      0.00000      0.00000
    2->7           1.729408            13948.62            716.9                 0.000000000       0.00000      0.00000      0.00000
    3->8           1.729409            13948.62            716.9                 0.000520999       0.23473      0.14096      0.00000
    2->8           1.729409            13948.62            716.9                 0.000520999       0.14096      0.23473      0.00000
    1->6           1.735079            13994.36            714.6                 0.000325465       0.13690      0.13690      0.00000
    1->7           1.735079            13994.36            714.6                 0.000325464       0.13690      0.13690      0.00000
    1->8           1.735080            13994.37            714.6                 0.000000000       0.00000      0.00000      0.00000
    0->6           1.735081            13994.37            714.6                 0.000325488       0.13690      0.13690      0.00000
    0->7           1.735081            13994.37            714.6                 0.000325489       0.13690      0.13690      0.00000
    0->8           1.735082            13994.38            714.6                 0.000000000       0.00000      0.00000      0.00000
Temperature is set in the General block

The temperature is set in the General block. The default value is 298.15 K. Following sample input shows how the temperature can be set:

soc.inp
General
  CalcType CASSCF
  Basis def2-SVP
  Charge 0
  Mult 3
  orcajsonname orca_calc.json
  Temperature 300
End

CASSCF
  NEl 6
  NOrb 6
  NRoots 3
  CISolver FCI
  MaxIter 0
  DoSOC True
End

Geom
  C  0.0  0.0  0.0
  O  0.0  0.0  1.128
End

The columns are in the output file are as follows:

No additional input required

The SOC-corrected spectrum table is generated automatically whenever DoSOC true is set. No extra keywords are needed.


g-tensor Calculation

To calculate the g-tensor in HUMMR, set the DOSOC and GTENSOR calculation keywords to true in the CASSCF block. The g-tensor is calculated using the Gerloch-McMeeking formulation. 1,2

Important Note

The g-tensor calculation requires the DOSOC keyword to be set to true in the CASSCF block.

Info

As implemented in the HUMMR, the g-tensor can only be calculated for Kramers' Systems i.e., half-integer spin systems (for eg. doublets, quartets, sextets and so on). 2

As with the SOC calculation, the g-tensor calculation can be done for the following CISolver:

  • FCI
  • HCI

Following is a sample input:

fci_gtensor.inp
General
  CalcType CASSCF
  Charge 1
  Mult 2
  ORCAGBWName LiF_input.gbw
  Basis sv
end

CASSCF
  NEl 3
  NOrb 4
  NRoots 2
  FINALACTORBS UNCHANGED
  FullCIType FCI
  MaxIter 0
  DOSOC true
  gTensor true
end

Geom
  Li 0.0 0.0 0.0
  F  0.0 0.0 5.0
End

g-tensor Output

The results are printed in the "g-tensor Calculation" section of the HUMMR output file. Following is an example output:

Expand to show soc.out snippet
fci_gtensor.out
  ********************
  g-Tensor Calculation
  ********************

  Setting-up the g-Tensor Calculation for Kramers' system (half-integer spin system)...

  Getting the Ground State Kramers' Partners...

  Ground State Kramers' Partners:
    State(  0) =    -106.513769305973  Eh
              Real           Imag
        0.00000000    -0.70837067
       -0.00000000    -0.00000000
       -0.70584063    -0.00000000
        0.00000000     0.00000000

    State(  1) =    -106.513769305973  Eh
              Real           Imag
        0.00000000    -0.00000000
        0.00000000     0.70837067
        0.00000000    -0.00000000
       -0.70584063    -0.00000000

  Generating the Spin Angular Momentum Matrices...

  Printing the Spin Angular Momentum Matrices in Spin-Orbit Coupled Basis...

  S(x) Real:
              0            1            2            3
    0      0.00000000  -0.00178900   0.00000000   0.49999680
    1     -0.00178900  -0.00000000  -0.49999680   0.00000000
    2      0.00000000  -0.49999680   0.00000000  -0.00178900
    3      0.49999680   0.00000000  -0.00178900  -0.00000000

  S(y) Imag:
              0            1            2            3
    0      0.00000000   0.00178900   0.00000000  -0.49999680
    1     -0.00178900   0.00000000  -0.49999680   0.00000000
    2     -0.00000000   0.49999680   0.00000000   0.00178900
    3      0.49999680  -0.00000000  -0.00178900   0.00000000

  S(z) Real:
              0            1            2            3
    0      0.50000000   0.00000000   0.00000000  -0.00000000
    1      0.00000000  -0.50000000   0.00000000   0.00000000
    2      0.00000000   0.00000000   0.50000000  -0.00000000
    3     -0.00000000   0.00000000  -0.00000000  -0.50000000

  Generating the Orbital Angular Momentum Matrices...

  Evaluating the Orbital Angular Momentum Integrals in AO Basis...

==============================================
Orbital Angular Momentum Integrals Evaluation
==============================================

  Orbital angular momentum integrals evaluation done in       0.0007 sec

  Printing the Orbital Angular Momentum Matrices in Spin-Orbit Coupled Basis...

  L(x) Imag:
              0            1            2            3
    0      0.00000000   0.00000000   0.00000000   0.00000000
    1     -0.00000000   0.00000000   0.00000000   0.00000000
    2     -0.00000000  -0.00000000   0.00000000   0.00000000
    3     -0.00000000   0.00000000  -0.00000000   0.00000000

  L(y) Imag:
              0            1            2            3
    0      0.00000000  -0.00000000  -0.00000000  -0.00000000
    1      0.00000000   0.00000000  -0.00000000   0.00000000
    2      0.00000000   0.00000000   0.00000000  -0.00000000
    3      0.00000000   0.00000000   0.00000000   0.00000000

  L(z) Imag:
              0            1            2            3
    0     -0.00000000   0.00000000   0.00000000   0.00000000
    1     -0.00000000  -0.00000000   0.00000000   0.00000000
    2     -0.00000000  -0.00000000  -0.00000000   0.00000000
    3     -0.00000000   0.00000000  -0.00000000  -0.00000000

  g-Tensor Calculation set-up done...

  Calculating the g-Tensor...

  G-Tensor Matrix:
              0            1            2
    0      0.00005133  -0.00000000   0.00000000
    1     -0.00000000   0.00005133  -0.00000000
    2      0.00000000  -0.00000000  16.01845732

  g-Tensor Matrix:
              0            1            2
    0      0.00716432  -0.00000000   0.00000000
    1     -0.00000000   0.00716432  -0.00000000
    2      0.00000000  -0.00000000   4.00230650

  g-Factors:
    g-1    =       0.007164315685
    g-2    =       0.007164315685
    g-3    =       4.002306500341
    g-iso  =       1.338878377237

  g-Shifts (in ppt):
    Δg-1   =   -1995.154988677331
    Δg-2   =   -1995.154988677331
    Δg-3   =    1999.987195978754
    Δg-iso =    -663.440927125303

  Orientation:
              0            1            2
    0     -1.00000000  -0.00000000  -0.00000000
    1     -0.00000000   1.00000000   0.00000000
    2      0.00000000   0.00000000  -1.00000000

  g-Tensor calculation done in       0.0273 seconds...

Total run time:    0 days   0 hours   0 minutes and  4 seconds

The above output section is printed out after the corresponding SOC calculation is done, since the Kramers' pair from the SOC calculation is required to calculate the g-tensor. The final g-factors and g-shifts are printed out in the end as following:

fci_gtensor.out
   g-Factors:
    g-1    =       0.007164315685
    g-2    =       0.007164315685
    g-3    =       4.002306500341
    g-iso  =       1.338878377237

   g-Shifts (in ppt):
    Δg-1   =   -1995.154988677331
    Δg-2   =   -1995.154988677331
    Δg-3   =    1999.987195978754
    Δg-iso =    -663.440927125303