~ubuntu-branches/ubuntu/quantal/psicode/quantal

« back to all changes in this revision

Viewing changes to src/lib/libdpd/buf4_symm2.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2006-09-10 14:01:33 UTC
  • Revision ID: james.westby@ubuntu.com-20060910140133-ib2j86trekykfsfv
Tags: upstream-3.2.3
ImportĀ upstreamĀ versionĀ 3.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include "dpd.h"
 
3
 
 
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
 
10
** work.
 
11
**
 
12
** Arguments:
 
13
**   dpdbuf4 *Buf1: A pointer to the left dpdbuf4 to be symmetrized.
 
14
**   dpdbuf4 *Buf2: A pointer to the right dpdbuf4 to be symmetrized.  */
 
15
 
 
16
int dpd_buf4_symm2(dpdbuf4 *Buf1, dpdbuf4 *Buf2)
 
17
{
 
18
  int h, row, col, all_buf_irrep;
 
19
  double value;
 
20
 
 
21
  all_buf_irrep = Buf1->file.my_irrep;
 
22
 
 
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);
 
26
 
 
27
      dpd_buf4_mat_irrep_init(Buf2, h);
 
28
      dpd_buf4_mat_irrep_rd(Buf2, h);
 
29
 
 
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;
 
34
            }
 
35
 
 
36
      dpd_buf4_mat_irrep_wrt(Buf1, h);
 
37
      dpd_buf4_mat_irrep_close(Buf1, h);
 
38
      dpd_buf4_mat_irrep_close(Buf2, h);
 
39
    }
 
40
 
 
41
  return 0;
 
42
}
 
43