1
#ifndef _psi_src_bin_psimrcc_ccmanybody_h
2
#define _psi_src_bin_psimrcc_ccmanybody_h
3
/***************************************************************************
4
* PSIMRCC : Copyright (C) 2007 by Francesco Evangelista and Andrew Simmonett
5
* frank@ccc.uga.edu andysim@ccc.uga.edu
6
* A multireference coupled cluster code
7
***************************************************************************/
9
/*********************************************************
12
This class is used to do the basic operations that any
13
manybody code requires: compute the Fock matrix, denominators.
14
However, this implementation is specifically designed to
15
handle multireference cases
22
*********************************************************/
28
#include <libciomr/libciomr.h>
31
namespace psi{ namespace psimrcc{
34
enum TriplesType {pt2,ccsd,ccsd_t,ccsdt_1a,ccsdt_1b,ccsdt_2,ccsdt_3,ccsdt};
35
enum TriplesCouplingType {nocoupling,linear,quadratic,cubic};
39
* @author Francesco Evangelista <frank@ccc.uga.edu>
44
virtual ~CCManyBody();
45
void generate_integrals();
46
void generate_denominators();
47
void compute_reference_energy();
48
void make_fock_matrix();
49
void make_denominators();
50
void print_method(const char* text);
51
void zero_internal_amps();
52
void zero_t1_internal_amps();
53
void zero_internal_delta_amps();
55
// Effective Hamiltonian and the correpsonding eigenvectors
56
void print_eigensystem(int ndets, double** Heff,double*& eigenvector);
57
double diagonalize_Heff(int root,int ndets, double** Heff,double*& eigenvector, bool initial);
58
void sort_eigensystem(int ndets,double*& real,double*& imaginary,double**& left,double**& right);
59
double c_H_c(int ndets, double** H,double*& c);
61
double* zeroth_order_eigenvector;
66
// Effective Hamiltonian and the correpsonding eigenvectors
67
double current_energy;
82
TriplesType triples_type;
83
TriplesCouplingType triples_coupling_type;
85
void generate_triples_denominators();
86
void generate_d3_ijk(double***& d3,bool alpha_i,bool alpha_j,bool alpha_k);
87
void generate_d3_abc(double***& d3,bool alpha_a,bool alpha_b,bool alpha_c);
88
void deallocate_triples_denominators();
100
}} /* End Namespaces */
102
#endif // _psi_src_bin_psimrcc_ccmanybody_h