3
\brief Enter brief description of file here
7
#include <libciomr/libciomr.h>
8
#include <libdpd/dpd.h>
15
namespace psi { namespace ccenergy {
17
double rhf_mp2_energy(void);
18
double uhf_mp2_energy(void);
20
double mp2_energy(void)
22
/* Note that if we reach this point and ref=1 (ROHF), then we aren't using
23
* semicanonical orbitals and so we can't compute a non-iterative MBPT(2)
25
if(params.ref == 0) return(rhf_mp2_energy());
26
else if(params.ref == 2) return(uhf_mp2_energy());
31
double rhf_mp2_energy(void)
33
double T2_energy, T1_energy;
37
double os_energy, ss_energy, scs_energy;
39
/* Initialize MP2 T1 Amps (zero for true HF references) */
40
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA");
41
dpd_file2_copy(&F, CC_OEI, "tIA (MP2)");
43
dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)");
44
dpd_file2_init(&D1, CC_OEI, 0, 0, 1, "dIA");
45
dpd_file2_dirprd(&D1, &T1);
49
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA");
50
dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)");
51
T1_energy = 2.0 * dpd_file2_dot(&F, &T1);
55
/* Initialize MP2 T2 Amps */
56
dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
57
dpd_buf4_copy(&D, CC_TAMPS, "tIjAb (MP2)");
59
dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb (MP2)");
60
dpd_buf4_init(&D, CC_DENOM, 0, 0, 5, 0, 5, 0, "dIjAb");
61
dpd_buf4_dirprd(&D, &T2);
65
dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>");
66
dpd_buf4_init(&T2, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tIjAb (MP2)");
67
T2_energy = dpd_buf4_dot(&D, &T2);
69
dpd_buf4_init(&S, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
70
os_energy = dpd_buf4_dot(&S, &T2);
72
ss_energy = (T2_energy - os_energy);
74
moinfo.emp2_ss = ss_energy;
75
moinfo.emp2_os = os_energy;
77
if (params.scs == 1) {
78
os_energy = params.scsmp2_scale_os * os_energy;
79
ss_energy = params.scsmp2_scale_ss * ss_energy;
83
os_energy = (6.0/5.6) * os_energy;
84
ss_energy = (1.0/3.0) * ss_energy;
87
moinfo.escsmp2_ss = ss_energy;
88
moinfo.escsmp2_os = os_energy;
93
return (T2_energy+T1_energy);
96
double uhf_mp2_energy(void)
98
double E2AA, E2BB, E2AB, T1A, T1B;
102
/* Initialize MP2 T1 Amps (zero for true HF references) */
103
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA");
104
dpd_file2_copy(&F, CC_OEI, "tIA (MP2)");
106
dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)");
107
dpd_file2_init(&D1, CC_OEI, 0, 0, 1, "dIA");
108
dpd_file2_dirprd(&D1, &T1);
109
dpd_file2_close(&D1);
110
dpd_file2_close(&T1);
112
dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia");
113
dpd_file2_copy(&F, CC_OEI, "tia (MP2)");
115
dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia (MP2)");
116
dpd_file2_init(&D1, CC_OEI, 0, 2, 3, "dia");
117
dpd_file2_dirprd(&D1, &T1);
118
dpd_file2_close(&D1);
119
dpd_file2_close(&T1);
121
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA");
122
dpd_file2_init(&T1, CC_OEI, 0, 0, 1, "tIA (MP2)");
123
T1A = dpd_file2_dot(&F, &T1);
125
dpd_file2_close(&T1);
127
dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia");
128
dpd_file2_init(&T1, CC_OEI, 0, 2, 3, "tia (MP2)");
129
T1B = dpd_file2_dot(&F, &T1);
131
dpd_file2_close(&T1);
133
dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)");
134
dpd_buf4_copy(&D, CC_TAMPS, "tIJAB (MP2)");
136
dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB (MP2)");
137
dpd_buf4_init(&D, CC_DENOM, 0, 2, 7, 2, 7, 0, "dIJAB");
138
dpd_buf4_dirprd(&D, &T2);
142
dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)");
143
dpd_buf4_copy(&D, CC_TAMPS, "tijab (MP2)");
145
dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab (MP2)");
146
dpd_buf4_init(&D, CC_DENOM, 0, 12, 17, 12, 17, 0, "dijab");
147
dpd_buf4_dirprd(&D, &T2);
151
dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>");
152
dpd_buf4_copy(&D, CC_TAMPS, "tIjAb (MP2)");
154
dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb (MP2)");
155
dpd_buf4_init(&D, CC_DENOM, 0, 22, 28, 22, 28, 0, "dIjAb");
156
dpd_buf4_dirprd(&D, &T2);
160
dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tIJAB (MP2)");
161
dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)");
162
E2AA = dpd_buf4_dot(&D, &T2);
166
dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tijab (MP2)");
167
dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)");
168
E2BB = dpd_buf4_dot(&D, &T2);
172
dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb (MP2)");
173
dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>");
174
E2AB = dpd_buf4_dot(&D, &T2);
178
return(T1A + T1B + E2AA + E2BB + E2AB);
180
}} // namespace psi::ccenergy