Psi4

Compute optical rotations using the CC linear response formalism. More...

`#include <cstdio>`
`#include <cstring>`
`#include <cstdlib>`
`#include <cmath>`
`#include <sstream>`
`#include "psi4/libpsi4util/process.h"`
`#include "psi4/libciomr/libciomr.h"`
`#include "psi4/libpsio/psio.h"`
`#include "psi4/libqt/qt.h"`
`#include "psi4/libmints/molecule.h"`
`#include "psi4/psi4-dec.h"`
`#include "MOInfo.h"`
`#include "Params.h"`
`#include "Local.h"`
`#include "globals.h"`
`#include "psi4/physconst.h"`

## Namespaces

psi
This is all defined in python.cc initialize.

psi::ccresponse

#define EXTERN

## Functions

void psi::ccresponse::pertbar (const char *pert, int irrep, int anti)

void psi::ccresponse::compute_X (const char *pert, int irrep, double omega)

void psi::ccresponse::linresp (double *tensor, double A, double B, const char *pert_x, int x_irrep, double omega_x, const char *pert_y, int y_irrep, double omega_y)

void psi::ccresponse::optrot (std::shared_ptr< Molecule > molecule)

## Detailed Description

Compute optical rotations using the CC linear response formalism.

Optical rotation is determined from imaginary part of the mixed electric- dipole/magnetic-dipole polarizability, Im<<mu;m>>, where mu is the electric-dipole vector operator and m is the magnetic-dipole vector operator. We may choose between two representations of mu: length where mu = -r, and velocity, where mu = -p = i Del. The trace of the velocity representation tensor is origin independent, but the length representation tensor is not. The "modified" velocity gauge involves subtraction of the zero-frequency <<mu(p);m>> tensor from the non-zero-frequency tensor. Furthermore, if one chooses both representations (gauge = both), then the code also computes the origin-depenedence vector of the length-representation optical rotation, which requires the Im <<mu(r);p>>_0 tensor.

The CC linear response tensors are computed as:

<< A ; B >>_w = 1/2 C(+/-w) P[A(-w), B(w)] * [<0|(1+L) { [ABAR,X(B,w)] + 1/2 [[HBAR,X(A,-w)],X(B,w)] } |0>]

= 1/2 [ <0|(1+L) { [ABAR,X(B,w)] + [BBAR, X(A,-w)] + [[HBAR,X(A,-w)],X(B,w)]

• [A*BAR,X(B*,-w)] + [B*BAR, X(A*,w)] + [[HBAR,X(A*,w)],X(B*,-w)] } |0>]

If w=0, this becomes:

<< A ; B >>_0 = 1/2 C * [<0|(1+L) [ABAR,X(B,0)]|0> + 1/2 <0|(1+L) [[HBAR,X(A,0)],X(B,0)]|0>]

= 1/2[<0|(1+L) [ABAR,X(B,0)]|0> + 1/2 <0|(1+L) [[HBAR,X(A,0)],X(B,0)]|0>]

• 1/2[<0|(1+L) [B*BAR,X(A*,0)]|0> + 1/2 <0|(1+L) [[HBAR,X(B*,0)],X(A*,0)]|0>]

Special notes: mu(p) and m are pure-imaginary operators, which means that a factor of i is included implicitly in the corresponding integrals. In the computation of the << mu(p); m >> tensor, where both operators carry i, an extra factor of -1 must appear in the computation of the tensors. (This happens in both terms of << A ; B >>_w above because complex conjugation of both opertors simultaneously doesn't change the overall sign of the tensor.

-TDC, 4/09, revised 3/15

## Macro Definition Documentation

 #define EXTERN