3
#include "prototypes.h"
9
double *evals, *evals_symbl;
10
double **nmo_mo, **nmo_symbl;
11
double **b, **binv; /* (C+)*C */
12
double **cinv; /* C_{AO}^-1 = C_{AO}^T S_{AO,AO} */
13
double **tmat, **Smat;
14
double **psq_ao, **p_symbl;
16
nmo_ao = init_matrix(nbfao,nmo);
17
nmo_so = block_matrix(nbfso,nmo); /* need block matrix for chkpt_wt_scf() */
18
evals = init_array(nmo);
19
nmo_mo = init_matrix(nmo,nmo);
20
psq_ao = init_matrix(nbfao,nbfao);
22
tri_to_sq(Ptot,psq_ao,nbfao);
24
b = init_matrix(nmo,nmo);
25
cinv = init_matrix(nmo, nbfao);
26
tmat = init_matrix(nmo,nbfao);
27
Smat = init_matrix(nbfao,nbfao);
28
tri_to_sq(S,Smat,nbfao);
30
mmult(scf_evec_ao,1,Smat,0,cinv,0,nmo,nbfao,nbfao,0);
32
mmult(cinv,0,psq_ao,0,tmat,0,nmo,nbfao,nbfao,0);
33
mmult(tmat,0,cinv,1,b,0,nmo,nbfao,nmo,0);
34
free_matrix(cinv,nmo);
35
free_matrix(tmat,nmo);
36
free_matrix(Smat,nbfao);
39
for(i=0;i<nirreps;i++) {
42
p_symbl = init_matrix(dim_i,dim_i);
43
evals_symbl = init_array(dim_i);
44
nmo_symbl = init_matrix(dim_i,dim_i);
45
for(k=0;k<dim_i;k++) {
47
p_symbl[k][l] = p_symbl[l][k] = b[count+k][count+l];
51
if (print_lvl >= PRINTNMOLEVEL) {
52
fprintf(outfile, " Density Matrix for Symmetry Block %s\n",
54
print_mat(p_symbl,dim_i,dim_i,outfile);
55
fprintf(outfile,"\n");
58
sq_rsp(dim_i,dim_i,p_symbl,evals_symbl,3,nmo_symbl,1.0E-14);
60
for(k=0;k<dim_i;k++) {
61
evals[count+k] = evals_symbl[k];
63
nmo_mo[count+k][count+l] = nmo_symbl[k][l];
68
" Natural Orbital Occupation Numbers for Symmetry Block %s\n\n",
70
for (k=0; k<dim_i; k++) {
71
fprintf(outfile, "%5d %f\n",k+1,evals_symbl[k]);
73
fprintf(outfile, "\n");
76
if (print_lvl >= PRINTNMOLEVEL) {
77
fprintf(outfile, " Natural Orbitals for Symmetry Block %s\n",
79
eivout(nmo_symbl,evals_symbl,dim_i,dim_i,outfile);
80
fprintf(outfile, "\n");
82
free_matrix(p_symbl,dim_i);
83
free_matrix(nmo_symbl,dim_i);
89
mmult(scf_evec_ao,0,nmo_mo,0,nmo_ao,0,nbfao,nmo,nmo,0);
90
mmult(scf_evec_so,0,nmo_mo,0,nmo_so,0,nbfso,nmo,nmo,0);
93
if (print_lvl >= PRINTNMOLEVEL) {
95
" Natural orbitals in SO basis computed from density in file%d:\n",
97
eivout(nmo_so,evals,nbfso,nmo,outfile);
98
fprintf(outfile,"\n\n");
102
chkpt_wt_scf(nmo_so);
105
" Natural Orbitals have just been written to the checkpoint file\n\n");
110
free_matrix(nmo_mo,nmo);