6
/*** This function removes incorrectly non-zero elements from ***
7
*** a vector. The non-zero elements are due to the ***
8
*** specification of open-shell orbitals as both occupied ***
9
*** and virtual orbitals. ***/
11
void c_clean(dpdfile2 *CME, dpdfile2 *Cme,
12
dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) {
14
int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr;
15
int nirreps, *occ_sym, *vir_sym;
16
int mn, ef, m, n, e, f, h, M, N, E, F;
17
int msym, nsym, esym, fsym;
19
C_irr = CME->my_irrep;
20
nirreps = moinfo.nirreps;
21
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
22
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
23
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
24
openpi = moinfo.openpi;
26
dpd_file2_mat_init(CME);
27
dpd_file2_mat_rd(CME);
28
for(h=0; h < nirreps; h++) {
29
for(m=0; m<occpi[h]; m++)
30
for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++)
31
CME->matrix[h][m][e] = 0.0;
33
dpd_file2_mat_wrt(CME);
35
dpd_file2_mat_init(Cme);
36
dpd_file2_mat_rd(Cme);
37
for(h=0; h < nirreps; h++) {
38
for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++)
39
for(e=0; e<virtpi[h^C_irr]; e++)
40
Cme->matrix[h][m][e] = 0.0;
42
dpd_file2_mat_wrt(Cme);
44
for(h=0; h < nirreps; h++) {
45
dpd_buf4_mat_irrep_init(CMNEF, h);
46
dpd_buf4_mat_irrep_rd(CMNEF, h);
47
for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) {
48
for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) {
49
e = CMNEF->params->colorb[h^C_irr][ef][0];
50
f = CMNEF->params->colorb[h^C_irr][ef][1];
51
esym = CMNEF->params->rsym[e];
52
fsym = CMNEF->params->ssym[f];
53
E = e - vir_off[esym];
54
F = f - vir_off[fsym];
55
if ((E >= (virtpi[esym] - openpi[esym])) ||
56
(F >= (virtpi[fsym] - openpi[fsym])) )
57
CMNEF->matrix[h][mn][ef] = 0.0;
60
dpd_buf4_mat_irrep_wrt(CMNEF, h);
61
dpd_buf4_mat_irrep_close(CMNEF, h);
64
for(h=0; h < nirreps; h++) {
65
dpd_buf4_mat_irrep_init(Cmnef, h);
66
dpd_buf4_mat_irrep_rd(Cmnef, h);
67
for(mn=0; mn < Cmnef->params->rowtot[h]; mn++) {
68
m = Cmnef->params->roworb[h][mn][0];
69
n = Cmnef->params->roworb[h][mn][1];
70
msym = Cmnef->params->psym[m];
71
nsym = Cmnef->params->qsym[n];
72
M = m - occ_off[msym];
73
N = n - occ_off[nsym];
74
for(ef=0; ef < Cmnef->params->coltot[h^C_irr]; ef++) {
75
if ((M >= (occpi[msym] - openpi[msym])) ||
76
(N >= (occpi[nsym] - openpi[nsym])) )
77
Cmnef->matrix[h][mn][ef] = 0.0;
80
dpd_buf4_mat_irrep_wrt(Cmnef, h);
81
dpd_buf4_mat_irrep_close(Cmnef, h);
84
for(h=0; h < nirreps; h++) {
85
dpd_buf4_mat_irrep_init(CMnEf, h);
86
dpd_buf4_mat_irrep_rd(CMnEf, h);
87
for(mn=0; mn < CMnEf->params->rowtot[h]; mn++) {
88
n = CMnEf->params->roworb[h][mn][1];
89
nsym = CMnEf->params->qsym[n];
90
N = n - occ_off[nsym];
91
for(ef=0; ef < CMnEf->params->coltot[h^C_irr]; ef++) {
92
e = CMnEf->params->colorb[h^C_irr][ef][0];
93
esym = CMnEf->params->rsym[e];
94
E = e - vir_off[esym];
95
if ((N >= (occpi[nsym] - openpi[nsym])) ||
96
(E >= (virtpi[esym] - openpi[esym])) )
97
CMnEf->matrix[h][mn][ef] = 0.0;
100
dpd_buf4_mat_irrep_wrt(CMnEf, h);
101
dpd_buf4_mat_irrep_close(CMnEf, h);
108
void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme) {
109
int *occpi, *virtpi, *occ_off, *vir_off, *openpi;
110
int nirreps, *occ_sym, *vir_sym;
111
int mn, ef, m, n, e, f;
113
int msym, nsym, esym, fsym, C_irr;
115
C_irr = CME->my_irrep;
116
nirreps = moinfo.nirreps;
117
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
118
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
119
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
120
openpi = moinfo.openpi;
122
dpd_file2_mat_init(CME);
123
dpd_file2_mat_rd(CME);
124
for(h=0; h < nirreps; h++) {
125
for(m=0; m<occpi[h]; m++)
126
for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++)
127
CME->matrix[h][m][e] = 0.0;
129
dpd_file2_mat_wrt(CME);
131
dpd_file2_mat_init(Cme);
132
dpd_file2_mat_rd(Cme);
133
for(h=0; h < nirreps; h++) {
134
for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++)
135
for(e=0; e<virtpi[h^C_irr]; e++)
136
Cme->matrix[h][m][e] = 0.0;
138
dpd_file2_mat_wrt(Cme);