3
\brief Enter brief description of file here
13
namespace psi { namespace cceom {
15
/*** This function removes incorrectly non-zero elements from ***
16
*** a vector. The non-zero elements are due to the ***
17
*** specification of open-shell orbitals as both occupied ***
18
*** and virtual orbitals. ***/
20
void c_clean(dpdfile2 *CME, dpdfile2 *Cme,
21
dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) {
23
int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr;
24
int nirreps, *occ_sym, *vir_sym;
25
int mn, ef, m, n, e, f, h, M, N, E, F;
26
int msym, nsym, esym, fsym;
28
C_irr = CME->my_irrep;
29
nirreps = moinfo.nirreps;
30
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
31
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
32
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
33
openpi = moinfo.openpi;
35
dpd_file2_mat_init(CME);
36
dpd_file2_mat_rd(CME);
37
for(h=0; h < nirreps; h++) {
38
for(m=0; m<occpi[h]; m++)
39
for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++)
40
CME->matrix[h][m][e] = 0.0;
42
dpd_file2_mat_wrt(CME);
44
dpd_file2_mat_init(Cme);
45
dpd_file2_mat_rd(Cme);
46
for(h=0; h < nirreps; h++) {
47
for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++)
48
for(e=0; e<virtpi[h^C_irr]; e++)
49
Cme->matrix[h][m][e] = 0.0;
51
dpd_file2_mat_wrt(Cme);
53
for(h=0; h < nirreps; h++) {
54
dpd_buf4_mat_irrep_init(CMNEF, h);
55
dpd_buf4_mat_irrep_rd(CMNEF, h);
56
for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) {
57
for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) {
58
e = CMNEF->params->colorb[h^C_irr][ef][0];
59
f = CMNEF->params->colorb[h^C_irr][ef][1];
60
esym = CMNEF->params->rsym[e];
61
fsym = CMNEF->params->ssym[f];
62
E = e - vir_off[esym];
63
F = f - vir_off[fsym];
64
if ((E >= (virtpi[esym] - openpi[esym])) ||
65
(F >= (virtpi[fsym] - openpi[fsym])) )
66
CMNEF->matrix[h][mn][ef] = 0.0;
69
dpd_buf4_mat_irrep_wrt(CMNEF, h);
70
dpd_buf4_mat_irrep_close(CMNEF, h);
73
for(h=0; h < nirreps; h++) {
74
dpd_buf4_mat_irrep_init(Cmnef, h);
75
dpd_buf4_mat_irrep_rd(Cmnef, h);
76
for(mn=0; mn < Cmnef->params->rowtot[h]; mn++) {
77
m = Cmnef->params->roworb[h][mn][0];
78
n = Cmnef->params->roworb[h][mn][1];
79
msym = Cmnef->params->psym[m];
80
nsym = Cmnef->params->qsym[n];
81
M = m - occ_off[msym];
82
N = n - occ_off[nsym];
83
for(ef=0; ef < Cmnef->params->coltot[h^C_irr]; ef++) {
84
if ((M >= (occpi[msym] - openpi[msym])) ||
85
(N >= (occpi[nsym] - openpi[nsym])) )
86
Cmnef->matrix[h][mn][ef] = 0.0;
89
dpd_buf4_mat_irrep_wrt(Cmnef, h);
90
dpd_buf4_mat_irrep_close(Cmnef, h);
93
for(h=0; h < nirreps; h++) {
94
dpd_buf4_mat_irrep_init(CMnEf, h);
95
dpd_buf4_mat_irrep_rd(CMnEf, h);
96
for(mn=0; mn < CMnEf->params->rowtot[h]; mn++) {
97
n = CMnEf->params->roworb[h][mn][1];
98
nsym = CMnEf->params->qsym[n];
99
N = n - occ_off[nsym];
100
for(ef=0; ef < CMnEf->params->coltot[h^C_irr]; ef++) {
101
e = CMnEf->params->colorb[h^C_irr][ef][0];
102
esym = CMnEf->params->rsym[e];
103
E = e - vir_off[esym];
104
if ((N >= (occpi[nsym] - openpi[nsym])) ||
105
(E >= (virtpi[esym] - openpi[esym])) )
106
CMnEf->matrix[h][mn][ef] = 0.0;
109
dpd_buf4_mat_irrep_wrt(CMnEf, h);
110
dpd_buf4_mat_irrep_close(CMnEf, h);
117
void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme) {
118
int *occpi, *virtpi, *occ_off, *vir_off, *openpi;
119
int nirreps, *occ_sym, *vir_sym;
120
int mn, ef, m, n, e, f;
122
int msym, nsym, esym, fsym, C_irr;
124
C_irr = CME->my_irrep;
125
nirreps = moinfo.nirreps;
126
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
127
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
128
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
129
openpi = moinfo.openpi;
131
dpd_file2_mat_init(CME);
132
dpd_file2_mat_rd(CME);
133
for(h=0; h < nirreps; h++) {
134
for(m=0; m<occpi[h]; m++)
135
for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++)
136
CME->matrix[h][m][e] = 0.0;
138
dpd_file2_mat_wrt(CME);
140
dpd_file2_mat_init(Cme);
141
dpd_file2_mat_rd(Cme);
142
for(h=0; h < nirreps; h++) {
143
for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++)
144
for(e=0; e<virtpi[h^C_irr]; e++)
145
Cme->matrix[h][m][e] = 0.0;
147
dpd_file2_mat_wrt(Cme);
152
}} // namespace psi::cceom