1
#include <libdpd/dpd.h>
5
void rhf_check_energy(int);
6
void uhf_check_energy(int);
8
void check_energy(int chk)
10
if(params.ref == 0) return(rhf_check_energy(chk));
11
else if(params.ref == 2) return(uhf_check_energy(chk));
14
void rhf_check_energy(int chk)
23
fprintf(outfile, "\n\tEnergies re-computed from MP2 density:\n");
24
fprintf(outfile, "\t-------------------------------------\n");
25
dpd_file2_init(&D, CC_OEI, 0, 0, 0, "DIJ");
26
dpd_file2_init(&F, CC_OEI, 0, 0, 0, "fIJ");
27
E_opdm += dpd_file2_dot(&D, &F);
31
dpd_file2_init(&D, CC_OEI, 0, 1, 1, "DAB");
32
dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB");
33
E_opdm += dpd_file2_dot(&D, &F);
37
dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb");
38
dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>");
39
E_tpdm += 2 * dpd_buf4_dot(&G, &I);
44
fprintf(outfile, "\n\tEnergies re-computed from Fock-adjusted MP2 density:\n");
45
fprintf(outfile, "\t----------------------------------------------------\n");
46
dpd_file2_init(&D, CC_OEI, 0, 0, 0, "DIJ");
47
dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)");
48
E_opdm += dpd_file2_dot(&D, &F);
52
dpd_file2_init(&D, CC_OEI, 0, 1, 1, "DAB");
53
dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)");
54
E_opdm += dpd_file2_dot(&D, &F);
58
dpd_file2_init(&D, CC_OEI, 0, 1, 0, "DAI");
59
dpd_file2_mat_init(&D);
61
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)");
62
dpd_file2_mat_init(&F);
64
for(h=0; h < mo.nirreps; h++)
65
for(a=0; a < mo.virtpi[h]; a++)
66
for(i=0; i < mo.doccpi[h]; i++)
67
E_opdm += 2*D.matrix[h][a][i]*F.matrix[h][i][a];
68
dpd_file2_mat_close(&F);
69
dpd_file2_mat_close(&D);
73
dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl");
74
dpd_buf4_init(&I, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>");
75
dpd_buf4_scmcopy(&I, CC_AINTS, "A 2<ij|kl> - <ij|lk>", 2);
76
dpd_buf4_sort_axpy(&I, CC_AINTS, pqsr, 0, 0, "A 2<ij|kl> - <ij|lk>", -1);
78
dpd_buf4_init(&I, CC_AINTS, 0, 0, 0, 0, 0, 0, "A 2<ij|kl> - <ij|lk>");
79
E_tpdm += 0.5 * dpd_buf4_dot(&I, &G);
83
dpd_buf4_init(&G, CC_GAMMA, 0, 11, 0, 11, 0, 0, "GAiJk");
84
dpd_buf4_init(&I, CC_EINTS, 0, 11, 0, 11, 0, 0, "E 2<ai|jk> - <ai|kj>");
85
E_tpdm += 2*dpd_buf4_dot(&I, &G);
89
dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa");
90
dpd_buf4_init(&I, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>");
91
E_tpdm += dpd_buf4_dot(&I, &G);
93
dpd_buf4_init(&I, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>");
94
E_tpdm += dpd_buf4_dot(&I, &G);
98
dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb");
99
dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D 2<ij|ab> - <ij|ba>");
100
E_tpdm += 2*dpd_buf4_dot(&G, &I);
105
fprintf(outfile, "\n\tEnergies re-computed from MP2 Mulliken density:\n");
106
fprintf(outfile, "\t-----------------------------------------------\n");
107
dpd_file2_init(&D, CC_OEI, 0, 0, 0, "DIJ");
108
dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)");
109
E_opdm += dpd_file2_dot(&D, &F);
113
dpd_file2_init(&D, CC_OEI, 0, 1, 1, "DAB");
114
dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)");
115
E_opdm += dpd_file2_dot(&D, &F);
119
dpd_file2_init(&D, CC_OEI, 0, 1, 0, "DAI");
120
dpd_file2_mat_init(&D);
121
dpd_file2_mat_rd(&D);
122
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)");
123
dpd_file2_mat_init(&F);
124
dpd_file2_mat_rd(&F);
125
for(h=0; h < mo.nirreps; h++)
126
for(a=0; a < mo.virtpi[h]; a++)
127
for(i=0; i < mo.doccpi[h]; i++)
128
E_opdm += 2 * D.matrix[h][a][i] * F.matrix[h][i][a];
129
dpd_file2_mat_close(&F);
130
dpd_file2_mat_close(&D);
134
dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl");
135
dpd_buf4_init(&I, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>");
136
E_tpdm += 0.5 * dpd_buf4_dot(&I, &G);
140
dpd_buf4_init(&G, CC_GAMMA, 0, 11, 0, 11, 0, 0, "GAiJk");
141
dpd_buf4_init(&I, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>");
142
E_tpdm += 2*dpd_buf4_dot(&I, &G);
146
dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa");
147
dpd_buf4_init(&I, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>");
148
E_tpdm += dpd_buf4_dot(&I, &G);
152
dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb");
153
dpd_buf4_init(&I, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
154
E_tpdm += 2*dpd_buf4_dot(&G, &I);
162
fprintf(outfile,"\n");
163
fprintf(outfile,"\tE_OPDM = %20.15f\n",E_opdm);
164
fprintf(outfile,"\tE_TPDM = %20.15f\n",E_tpdm);
165
fprintf(outfile,"\tMP2 correlation energy = %20.15f\n",E_opdm+E_tpdm);
169
void uhf_check_energy(int chk)