Namespaces | Macros | Functions

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

#include <cstdio>
#include <cstring>
#include <cstdlib>
#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"


 This is all defined in initialize.


#define EXTERN


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)]

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>]

Macro Definition Documentation

#define EXTERN