3
#include <libciomr/libciomr.h>
5
#include <libiwl/iwl.h>
10
void transL(double sign)
12
int stat, nao, noei_ao, nso, nmo;
14
double *scratch, **TMP, **X;
15
double **LX, **LY, **LZ; /* MO-basis dipole integrals */
20
noei_ao = moinfo.noei_ao;
22
/**** Transform the magnetic dipole integrals to the MO basis ****/
24
LX = block_matrix(nmo,nmo);
25
LY = block_matrix(nmo,nmo);
26
LZ = block_matrix(nmo,nmo);
28
TMP = block_matrix(nao, nao);
29
X = block_matrix(nao, nao);
30
scratch = init_array(noei_ao);
32
/* NB: (a|m|b) = -1/2 (a|L|b) */
33
/* NB: The angular momentum integrals are antisymmetric! */
34
stat = iwl_rdone(PSIF_OEI, PSIF_AO_LX, scratch, noei_ao, 0, 0, outfile); /* read lower triangle */
35
for(i=0,ij=0; i < nao; i++)
36
for(j=0; j <= i; j++, ij++) {
37
TMP[i][j] = 0.5 * scratch[ij] * sign;
38
TMP[j][i] = -0.5 * scratch[ij] * sign;
41
C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(moinfo.usotao[0][0]),nao,
43
C_DGEMM('n','n',nso,nso,nao,1,&(moinfo.usotao[0][0]),nao,&(X[0][0]),nao,
46
C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(moinfo.scf[0][0]),nmo,
48
C_DGEMM('t','n',nmo,nmo,nso,1,&(moinfo.scf[0][0]),nmo,&(X[0][0]),nao,
51
zero_arr(scratch,noei_ao);
53
stat = iwl_rdone(PSIF_OEI, PSIF_AO_LY, scratch, noei_ao, 0, 0, outfile);
54
for(i=0,ij=0; i < nao; i++)
55
for(j=0; j <= i; j++, ij++) {
56
TMP[i][j] = 0.5 * scratch[ij] * sign;
57
TMP[j][i] = -0.5 * scratch[ij] * sign;
60
C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(moinfo.usotao[0][0]),nao,
62
C_DGEMM('n','n',nso,nso,nao,1,&(moinfo.usotao[0][0]),nao,&(X[0][0]),nao,
65
C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(moinfo.scf[0][0]),nmo,
67
C_DGEMM('t','n',nmo,nmo,nso,1,&(moinfo.scf[0][0]),nmo,&(X[0][0]),nao,
70
zero_arr(scratch,noei_ao);
72
stat = iwl_rdone(PSIF_OEI, PSIF_AO_LZ, scratch, noei_ao, 0, 0, outfile);
73
for(i=0,ij=0; i < nao; i++)
74
for(j=0; j <= i; j++, ij++) {
75
TMP[i][j] = 0.5 * scratch[ij] * sign;
76
TMP[j][i] = -0.5 * scratch[ij] * sign;
79
C_DGEMM('n','t',nao,nso,nao,1,&(TMP[0][0]),nao,&(moinfo.usotao[0][0]),nao,
81
C_DGEMM('n','n',nso,nso,nao,1,&(moinfo.usotao[0][0]),nao,&(X[0][0]),nao,
84
C_DGEMM('n','n',nso,nmo,nso,1,&(TMP[0][0]),nao,&(moinfo.scf[0][0]),nmo,
86
C_DGEMM('t','n',nmo,nmo,nso,1,&(moinfo.scf[0][0]),nmo,&(X[0][0]),nao,
94
fprintf(outfile, "MO-Basis LX Integrals:\n");
95
mat_print(LX, nmo, nmo, outfile);
96
fprintf(outfile, "MO-Basis LY Integrals:\n");
97
mat_print(LY, nmo, nmo, outfile);
98
fprintf(outfile, "MO-Basis LZ Integrals:\n");
99
mat_print(LZ, nmo, nmo, outfile);
101
TMP = block_matrix(nmo, nmo);
102
for(i=0; i < nmo; i++) {
103
I = moinfo.pitzer2qt[i];
104
for(j=0; j < nmo; j++) {
105
J = moinfo.pitzer2qt[j];
106
TMP[I][J] = LX[i][j];
109
fprintf(outfile, "MO-Basis LX Integrals (QT):\n");
110
print_mat(TMP, nmo, nmo, outfile);
111
for(i=0; i < nmo; i++) {
112
I = moinfo.pitzer2qt[i];
113
for(j=0; j < nmo; j++) {
114
J = moinfo.pitzer2qt[j];
115
TMP[I][J] = LY[i][j];
118
fprintf(outfile, "MO-Basis LY Integrals (QT):\n");
119
print_mat(TMP, nmo, nmo, outfile);
120
for(i=0; i < nmo; i++) {
121
I = moinfo.pitzer2qt[i];
122
for(j=0; j < nmo; j++) {
123
J = moinfo.pitzer2qt[j];
124
TMP[I][J] = LZ[i][j];
127
fprintf(outfile, "MO-Basis LZ Integrals (QT):\n");
128
print_mat(TMP, nmo, nmo, outfile);