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

« back to all changes in this revision

Viewing changes to src/bin/cclambda/WijmbL2.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 <libdpd/dpd.h>
 
3
#define EXTERN
 
4
#include "globals.h"
 
5
 
 
6
/* WijmbL2(): Computes the contributions of the Wmnie HBAR matrix
 
7
** elements to the Lambda double de-excitation amplitude equations.
 
8
** These contributions are given in spin orbitals as:
 
9
** 
 
10
** L_ij^ab = - P(ab) L_m^a Wijmb
 
11
**
 
12
** where Wijmb = Wmnie is defined as:
 
13
**
 
14
** Wmnie = <mn||ie> + t_i^f <mn||fe>
 
15
**
 
16
** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995)]
 
17
**
 
18
** All four spin cases are stored in (mn,ei) ordering (see Wmnie.c in
 
19
** the CCHBAR code).  The three L_ij^ab spin cases are computed as:
 
20
**
 
21
** L(IJ,AB) <-- - L(M,A) W(IJ,BM) + L(M,B) W(IJ,AM) (one unique
 
22
** contraction)
 
23
** L(ij,ab) <-- - L(m,a) W(ij,bm) + L(m,b) W(ij,am) (one unique
 
24
** contraction)
 
25
** L(Ij,Ab) <-- - L(M,A) W(Ij,bM) - L(m,b) W(jI,Am)
 
26
**
 
27
** TDC, July 2002
 
28
*/
 
29
 
 
30
void WijmbL2(int L_irr)
 
31
{
 
32
  dpdfile2 LIA, Lia;
 
33
  dpdbuf4 L2, newLijab, newLIJAB, newLIjAb;
 
34
  dpdbuf4 W, WMNIE, Wmnie, WMnIe, WmNiE;
 
35
  dpdbuf4 X1, X2, Z, Z1, Z2;
 
36
 
 
37
  /* RHS += -P(ab) Lma * Wijmb */
 
38
  if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/
 
39
 
 
40
    dpd_file2_init(&LIA, CC_OEI, L_irr, 0, 1, "LIA");
 
41
    dpd_file2_init(&Lia, CC_OEI, L_irr, 0, 1, "Lia");
 
42
 
 
43
    dpd_buf4_init(&WMNIE, CC_HBAR, 0, 2, 11, 2, 11, 0, "WMNIE");
 
44
    dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1");
 
45
    dpd_contract424(&WMNIE, &LIA, &X1, 3, 0, 0, 1.0, 0.0);
 
46
    dpd_buf4_close(&WMNIE);
 
47
    dpd_buf4_sort(&X1, CC_TMP1, pqsr, 2, 5, "X(2,5) 2");
 
48
    dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2");
 
49
    dpd_buf4_axpy(&X2, &X1, -1.0);
 
50
    dpd_buf4_close(&X2);
 
51
    dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB");
 
52
    dpd_buf4_axpy(&X1, &newLIJAB, 1.0);
 
53
    dpd_buf4_close(&newLIJAB);
 
54
 
 
55
 
 
56
    dpd_buf4_init(&Wmnie, CC_HBAR, 0, 2, 11, 2, 11, 0, "Wmnie");
 
57
    dpd_buf4_init(&X1, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 1");
 
58
    dpd_contract424(&Wmnie, &Lia, &X1, 3, 0, 0, 1.0, 0.0);
 
59
    dpd_buf4_close(&Wmnie);
 
60
    dpd_buf4_sort(&X1, CC_TMP1, pqsr, 2, 5, "X(2,5) 2");
 
61
    dpd_buf4_init(&X2, CC_TMP1, L_irr, 2, 5, 2, 5, 0, "X(2,5) 2");
 
62
    dpd_buf4_axpy(&X2, &X1, -1.0);
 
63
    dpd_buf4_close(&X2);
 
64
    dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New Lijab");
 
65
    dpd_buf4_axpy(&X1, &newLijab, 1.0);
 
66
    dpd_buf4_close(&newLijab);
 
67
 
 
68
    dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
 
69
 
 
70
    dpd_buf4_init(&WMnIe, CC_HBAR, 0, 0, 11, 0, 11, 0, "WMnIe");
 
71
    dpd_buf4_sort(&WMnIe, CC_TMP0, pqsr, 0, 10, "WMnIe (Mn,Ie)");
 
72
    dpd_buf4_close(&WMnIe);
 
73
 
 
74
    dpd_buf4_init(&WMnIe, CC_TMP0, 0, 0, 10, 0, 10, 0, "WMnIe (Mn,Ie)");
 
75
    dpd_contract244(&LIA, &WMnIe, &newLIjAb, 0, 2, 1, -1.0, 1.0);
 
76
    dpd_buf4_close(&WMnIe);
 
77
 
 
78
    dpd_buf4_init(&WmNiE, CC_HBAR, 0, 0, 11, 0, 11, 0, "WmNiE");
 
79
    dpd_buf4_sort(&WmNiE, CC_TMP0, qprs, 0, 11, "WmNiE (Nm,Ei)");
 
80
    dpd_buf4_close(&WmNiE);
 
81
 
 
82
    /* W(Nm,Ei) * L(i,b) --> L(Nm,Eb) */
 
83
    dpd_buf4_init(&WmNiE, CC_TMP0, 0, 0, 11, 0, 11, 0, "WmNiE (Nm,Ei)");
 
84
    dpd_contract424(&WmNiE, &Lia, &newLIjAb, 3, 0, 0, -1.0, 1.0);
 
85
    dpd_buf4_close(&WmNiE);
 
86
 
 
87
    dpd_buf4_close(&newLIjAb);
 
88
 
 
89
    dpd_file2_close(&Lia);
 
90
    dpd_file2_close(&LIA);
 
91
  }
 
92
  else if(params.ref == 2) { /** UHF **/
 
93
 
 
94
    dpd_file2_init(&LIA, CC_OEI, L_irr, 0, 1, "LIA");
 
95
    dpd_file2_init(&Lia, CC_OEI, L_irr, 2, 3, "Lia");
 
96
 
 
97
    /** W(IJ,AM) L(M,B) --> Z(IJ,AB) **/
 
98
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "Z'(IJ,AB)");
 
99
    dpd_buf4_init(&W, CC_HBAR, 0, 2, 21, 2, 21, 0, "WMNIE");
 
100
    dpd_contract424(&W, &LIA, &Z, 3, 0, 0, 1, 0);
 
101
    dpd_buf4_close(&W);
 
102
    /** Z(IJ,AB) --> Z(IJ,BA) **/
 
103
    dpd_buf4_sort(&Z, CC_TMP2, pqsr, 2, 5, "Z'(IJ,BA)");
 
104
    dpd_buf4_close(&Z);
 
105
    /** Z(IJ,AB) = Z(IJ,AB) - Z(IJ,BA) **/
 
106
    dpd_buf4_init(&Z1, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "Z'(IJ,AB)");
 
107
    dpd_buf4_init(&Z2, CC_TMP2, L_irr, 2, 5, 2, 5, 0, "Z'(IJ,BA)");
 
108
    dpd_buf4_axpy(&Z2, &Z1, -1);
 
109
    dpd_buf4_close(&Z2);
 
110
    /** Z(IJ,AB) --> New L(IJ,AB) **/
 
111
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "New LIJAB");
 
112
    dpd_buf4_axpy(&Z1, &L2, 1);
 
113
    dpd_buf4_close(&L2);
 
114
    dpd_buf4_close(&Z1);
 
115
 
 
116
 
 
117
    /** W(ij,am) L(m,b) --> Z(ij,ab) **/
 
118
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "Z'(ij,ab)");
 
119
    dpd_buf4_init(&W, CC_HBAR, 0, 12, 31, 12, 31, 0, "Wmnie");
 
120
    dpd_contract424(&W, &Lia, &Z, 3, 0, 0, 1, 0);
 
121
    dpd_buf4_close(&W);
 
122
    /** Z(ij,ab) --> Z(ij,ba) **/
 
123
    dpd_buf4_sort(&Z, CC_TMP2, pqsr, 12, 15, "Z'(ij,ba)");
 
124
    dpd_buf4_close(&Z);
 
125
    /** Z(ij,ab) = Z(ij,ab) - Z(ij,ba) **/
 
126
    dpd_buf4_init(&Z1, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "Z'(ij,ab)");
 
127
    dpd_buf4_init(&Z2, CC_TMP2, L_irr, 12, 15, 12, 15, 0, "Z'(ij,ba)");
 
128
    dpd_buf4_axpy(&Z2, &Z1, -1);
 
129
    dpd_buf4_close(&Z2);
 
130
    /** Z(ij,ab) --> New L(ij,ab) **/
 
131
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "New Lijab");
 
132
    dpd_buf4_axpy(&Z1, &L2, 1);
 
133
    dpd_buf4_close(&L2);
 
134
    dpd_buf4_close(&Z1);
 
135
 
 
136
 
 
137
    /** Z(jI,Ab) = W(jI,Am) L(m,b) **/
 
138
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 23, 28, 23, 28, 0, "Z(jI,Ab)");
 
139
    dpd_buf4_init(&W, CC_HBAR, 0, 23, 26, 23, 26, 0, "WmNiE");
 
140
    dpd_contract424(&W, &Lia, &Z, 3, 0, 0, -1, 0);
 
141
    dpd_buf4_close(&W);
 
142
    /** Z(jI,Ab) --> New L(Ij,Ab) **/
 
143
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, qprs, 22, 28, "New LIjAb", 1);
 
144
    dpd_buf4_close(&Z);
 
145
 
 
146
    /** Z(Ij,bA) = W(Ij,bM) L(M,A) **/
 
147
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 22, 29, 22, 29, 0, "Z(Ij,bA)");
 
148
    dpd_buf4_init(&W, CC_HBAR, 0, 22, 25, 22, 25, 0, "WMnIe");
 
149
    dpd_contract424(&W, &LIA, &Z, 3, 0, 0, -1, 0);
 
150
    dpd_buf4_close(&W);
 
151
    /** Z(Ij,bA) --> New L(Ij,Ab) **/
 
152
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, pqsr, 22, 28, "New LIjAb", 1);
 
153
    dpd_buf4_close(&Z);
 
154
 
 
155
    dpd_file2_close(&Lia);
 
156
    dpd_file2_close(&LIA);
 
157
  }
 
158
}
 
159