4
** Form the OV arrays of Bendazzoli and Evangelisti, JCP 98, 3141 (1993)
7
** University of Georgia
14
#include <libciomr/libciomr.h>
21
** This will only work for Full CI's right now (where Parameters.fci=true)
23
void form_ov(struct stringwr **alplist)
26
int i, j, nirreps, norbs;
27
int irrep, strnum, strsym, cnt=0;
28
int fullij, idx, ovcnt;
29
struct stringwr *strlist;
30
int signmask,nsignmask;
33
/* bitwise sign stuff */
35
signmask = 1 << (sizeof(int)*8-1);
36
nsignmask = ~signmask;
39
/* allocate memory for OV[list][fullij][string] */
41
norbs = CalcInfo.num_ci_orbs;
42
nirreps = AlphaG->nirreps;
43
OV = (int ***) malloc (sizeof(int **) * nirreps);
44
for (i=0; i<nirreps; i++) {
45
OV[i] = (int **) malloc (sizeof(int *) * norbs * norbs);
46
for (j=0; j<norbs*norbs; j++) {
47
OV[i][j] = (int *) malloc (sizeof(int) * AlphaG->max_str_per_irrep+1);
53
/* now fill up OV by walking through the stringwr lists */
55
for (irrep=0; irrep < nirreps; irrep++) {
56
strnum = AlphaG->sg[irrep][0].num_strings;
58
strlist = alplist[irrep];
59
while (cnt != strnum) {
60
for (strsym=0; strsym < nirreps; strsym++) {
61
for (i=0; i<strlist->cnt[strsym]; i++) {
62
fullij = strlist->oij[strsym][i];
65
if (strlist->sgn[strsym][i] != 1) idx = idx | signmask;
66
ovcnt = OV[irrep][fullij][0];
68
OV[irrep][fullij][ovcnt] = idx;
69
OV[irrep][fullij][0] = ovcnt;
78
/* print out the OV data */
80
if (Parameters.print_lvl > 3) {
81
for (irrep=0; irrep < nirreps; irrep++) {
82
for (fullij=0; fullij<norbs*norbs; fullij++) {
83
fprintf(outfile, "OV[irrep=%d][oij=%d]: ", irrep, fullij);
84
for (i=0; i<OV[irrep][fullij][0]; i++) {
85
idx = OV[irrep][fullij][i+1];
86
fprintf(outfile, "%c", (idx & signmask) ? '-' : '+');
87
idx = idx & nsignmask;
88
fprintf(outfile, "%2d ", idx);
90
fprintf(outfile, "\n");