4
/* dpd_buf4_symm2(): Symmetrizes two dpdbuf4's by
5
** taking, I'(pq,rs) = 1/2 [I1(pq,rs) + I2(pq,rs)] (note the
6
** indices!). Users should keep in mind that the second buffer will
7
** be overwritten when this function is called. Also note that this
8
** routine will NOT check to see if the row and column dimensions of
9
** the input buffers are identical, which is necessary for this to
13
** dpdbuf4 *Buf1: A pointer to the left dpdbuf4 to be symmetrized.
14
** dpdbuf4 *Buf2: A pointer to the right dpdbuf4 to be symmetrized. */
16
int dpd_buf4_symm2(dpdbuf4 *Buf1, dpdbuf4 *Buf2)
18
int h, row, col, all_buf_irrep;
21
all_buf_irrep = Buf1->file.my_irrep;
23
for(h=0; h < Buf1->params->nirreps; h++) {
24
dpd_buf4_mat_irrep_init(Buf1, h);
25
dpd_buf4_mat_irrep_rd(Buf1, h);
27
dpd_buf4_mat_irrep_init(Buf2, h);
28
dpd_buf4_mat_irrep_rd(Buf2, h);
30
for(row=0; row < Buf1->params->rowtot[h]; row++)
31
for(col=0; col < Buf1->params->coltot[h^all_buf_irrep]; col++) {
32
value = 0.5*(Buf1->matrix[h][row][col]+Buf2->matrix[h][col][row]);
33
Buf1->matrix[h][row][col] = value;
36
dpd_buf4_mat_irrep_wrt(Buf1, h);
37
dpd_buf4_mat_irrep_close(Buf1, h);
38
dpd_buf4_mat_irrep_close(Buf2, h);