1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584
|
\subsubsection{Library Philosophy}
The \library{libchkpt.a} library is a collection of functions used to
access the \PSIthree\ checkpoint file (\FILE{32}) -- the file which
contains all most frequently used information about the computation
such as molecular geometry, basis set, HF determinant, etc.
Previously, the checkpoint file was a fixed-format file which is
accessed using the old \PSIthree\ I/O system. However, this changed
in the spring of 2002 to use the new \library{libpsio.a} I/O system to
access the checkpoint file, and it is now free format. That is, any
programmer can add content to the file at will. The old checkpoint
file interface has been updated to access the new underlying I/O
system. It is {\em mandatory} that the checkpoint file is accessed
via the \library{libchkpt.a} functions {\em only}.
\subsubsection{Basic Use Instructions}
Following the philosophy that a programmer who wants to read, say, the
number of atoms and the irrep labels from the checkpoint file should
not have to use fifty lines of code to do so, \library{libchkpt.a} was
written. Following a call to a single command, \celem{chkpt\_init()},
the programmer can extract many useful bits of info from the checkpoint file
relatively painlessly. \library{libchkpt.a} is dependent upon
\library{libipv1.a} and \library{libpsio.a} and thus requires that the
input parser and I/O system each be initialized so that the proper
file name labels may be referenced. An example of a minimal program
that sets up the input parser, initilizes a special structure within
the \library{libchkpt.a} library, and reads the SCF HF energy,
eigenvector and eigenvalues is given below. In order to illustrate
the writing capability of the library routines, a dummy correlated
energy is written to the checkpoint file and then read back again
within the code.
\begin{verbatim}
#include <cstdio>
#include <cstdlib>
#include <libipv1/ip_lib.h>
#include <libciomr/libciomr.h>
#include <libpsio/psio.h>
#include <libchkpt/chkpt.h>
extern "C" {
FILE *infile, *outfile;
char *psi_file_prefix;
}
using namespace psi::MODULE_NAME;
int main(int argc, char* argv[])
{
int nmo;
double escf, etot;
double *evals;
double **scf;
psi_start(&infile, &outfile, &psi_file_prefix,
argc-1, argv+1, 0);
ip_cwk_add(":MODULE_NAME"); // MODULE_NAME all caps here
psio_init(); psio_ipv1_config();
/* to start timing, tstart(outfile); */
/*------------------------------------
now initialize the checkpoint structure
and begin reading info
------------------------------------*/
chkpt_init(PSIO_OPEN_OLD);
escf = chkpt_rd_escf();
evals = chkpt_rd_evals();
scf = chkpt_rd_scf();
nmo = chkpt_rd_nmo();
chkpt_wt_etot(-1000.0);
etot = chkpt_rd_etot();
chkpt_close();
/*--------------------------------------------
print out info to see what has been read in
--------------------------------------------*/
fprintf(outfile,"\n\n\tEscf = %20.10lf\n",escf);
fprintf(outfile,"\tEtot = %20.10lf\n",etot);
fprintf(outfile,"SCF EIGENVECTOR\n");
eivout(scf,evals,nmo,nmo,outfile);
psio_done();
tstop(outfile);
psi_stop(infile,outfile,psi_file_prefix);
}
/*-------------------------------------------------
dont forget to add the obligatory gprgid section
-------------------------------------------------*/
extern "C" {
char *gprgid()
{
char *prgid = ":MODULE_NAME";
return(prgid);
}
}
\end{verbatim}
\subsubsection{Initialization}
\funcdesc{int chkpt\_init()}
{Initializes the \celem{checkpoint} struct to allow other \celem{chkpt\_*}
functions to perform their duties.}{the {\tt libpsio} status marker PSIO\_OPEN\_OLD; also requires that
the input parser be initialized so that it can open the checkpoint file.}
{zero. Perhaps this will change some day.} \\
\noindent \funcdesc{int chkpt\_close()}
{Closes the checkpoint file, frees memory, etc.}
{none, but \celem{chkpt\_init} must already have been called for
this to work.}
{zero. Perhaps this, too, will change one day.}
\subsubsection{Functions for reading information from the checkpoint file}
This section gives an overview of many of the most widely used
functions from \library{libchkpt.a}. For more details and
descriptions of newer functions that are not yet described here, see
the {\tt doxygen} generated documentation at \\
\htmladdnormallink{
{\tt http://www.psicode.org/doc/libs/doxygen/html}}
{http://www.psicode.org/doc/libs/doxygen/html}.
\begin{center}
Functions that return \celem{char*}
\end{center}
\funcdesc{char *chkpt\_rd\_corr\_lab()}
{Reads in a label from the checkpoint file which describes the
wavefunction used to get the correlated energy which is stored in
the checkpoint file (see \celem{chkpt\_rd\_ecorr()}).}
{takes no arguments.}
{a string, like "CISD", or "MCSCF" or
some other wavefunction designation.}\\
\noindent \funcdesc{char *chkpt\_rd\_label()}
{Reads the main the checkpoint file label.}
{takes no arguments.}
{calculation label.} \\
\noindent \funcdesc{char *chkpt\_rd\_sym\_label()}
{Reads the label for the point group.}
{takes no arguments.}
{point group label.}
\begin{center}
Functions that return \celem{char**}
\end{center}
\noindent \funcdesc{char **chkpt\_rd\_irr\_labs()}
{Read in the symmetry labels for all irreps in the
point group in which the molecule is considered.}
{takes no arguments.}
{an array of labels (strings) which denote
the irreps for the point group in which the molecule is considered,
\_regardless\_ of whether there exist any symmetry orbitals which
transform as that irrep.} \\
\noindent \funcdesc{char **chkpt\_rd\_hfsym\_labs()}
{Read in the symmetry labels {\em only} for those irreps
which have basis functions.}
{takes no arguments.}
{an array of labels (strings) which denote
the irreps which have basis functions (in Cotton ordering). For DZ or
STO-3G water, for example, in $C_{\rm 2v}$ symmetry, this would be an array of
three labels: "A1", "B1", and "B2".}
\begin{center}
Functions that return \celem{int}
\end{center}
\funcdesc{int chkpt\_rd\_iopen()}
{Reads in the dimensionality (up to a sign) of ALPHA and BETA vectors of
two-electron coupling coefficients for open shells (see
\celem{chkpt\_rd\_ccvecs()}).
Note : \celem{iopen} = MM * (MM + 1), where MM is the total number of
irreps containing singly occupied orbitals.}
{takes no arguments.}
{the +/- dimensionality of ALPHA and BETA vectors of
coupling coefficients for open shells.} \\
\noindent \funcdesc{int chkpt\_rd\_max\_am()}
{Reads in the maximum orbital quantum number of AOs in the basis.}
{takes no arguments.}
{the maximum orbital quantum number of AOs in the basis.} \\
\noindent \funcdesc{int chkpt\_rd\_mxcoef()}
{Reads the value of the constant \celem{mxcoef}.}
{takes no arguments.}
{the sum of the squares of the number of symmetry
orbitals for each irrep. This gives the number of elements in the
non-zero symmetry blocks of the SCF eigenvector. For STO-3G water
\celem{mxcoef}$ = (4*4) + (0*0) + (1*1) + (2*2) = 21$.} \\
\noindent \funcdesc{int chkpt\_rd\_nao()}
{Reads in the total number of atomic orbitals (read: Cartesian Gaussian
functions).}
{takes no arguments.}
{total number of atomic orbitals.} \\
\noindent \funcdesc{int chkpt\_rd\_natom()}
{Reads in the total number of atoms.}
{takes no arguments.}
{total number of atoms.} \\
\noindent \funcdesc{int chkpt\_rd\_ncalcs()}
{Reads in the total number of calculations in the checkpoint file
(was always 1 in old \library{libfile30.a}, probably still is for now).}
{takes no arguments.}
{total number of calculations in the checkpoint file.} \\
\noindent \funcdesc{int chkpt\_rd\_nirreps()}
{Reads in the total number of irreducible representations
in the point group in which the molecule is being considered.}
{takes no arguments.}
{total number of irreducible representations.} \\
\noindent \funcdesc{int chkpt\_rd\_nmo()}
{Reads in the total number of molecular orbitals (may be different
from the number of basis functions).}
{takes no arguments.}
{total number of molecular orbitals.} \\
\noindent \funcdesc{int chkpt\_rd\_nprim()}
{Reads in the total number of primitive Gaussian functions
(only primitives of \_symmetry independent\_ atoms are counted!).}
{takes no arguments.}
{total number of primitive Gaussian functions.} \\
\noindent \funcdesc{int chkpt\_rd\_nshell()}
{Reads in the total number of shells. For example, DZP basis set for
carbon atom (contraction scheme $[9s5p1d/4s2p1d]$) has a total of 15 basis
functions, 15 primitives, and 7 shells. Shells of \_all\_ atoms are counted
(not only of the symmetry independent; compare \celem{chkpt\_rd\_nprim}).}
{takes no arguments.}
{total number of shells.} \\
\noindent \funcdesc{int chkpt\_rd\_nso()}
{Reads in the total number of symmetry-adapted basis functions (read:
Cartesian or Spherical Harmonic Gaussians).}
{takes no arguments.}
{total number of SOs.} \\
\noindent \funcdesc{int chkpt\_rd\_nsymhf()}
{Reads in the total number of irreps
in the point group in which the molecule is being considered which
have non-zero number of basis functions. For STO-3G or DZ water, for
example, this is three, even though \celem{nirreps} is 4 (compare
\celem{int chkpt\_rd\_nirreps()}).}
{takes no arguments.}
{total number of irreducible representations
with a non-zero number of basis functions.} \\
\noindent \funcdesc{int chkpt\_rd\_num\_unique\_atom()}
{Reads in the number of symmetry unique atoms.}
{takes no arguments.}
{number of symmetry unique atoms.} \\
\noindent \funcdesc{int chkpt\_rd\_num\_unique\_shell()}
{Reads in the number of symmetry unique shells.}
{takes no arguments.}
{number of symmetry unique shells.} \\
\noindent \funcdesc{int chkpt\_rd\_phase\_check()}
{Reads the phase flag, which is 1 if the orbital phases have been checked
and is 0 otherwise (phase checking just helps ensure the arbitrary phases
of the orbitals are consistent from one geometry to the next, which helps
various guessing or extrapolation schemes).}
{takes no arguments.}
{flag.}
\noindent \funcdesc{int chkpt\_rd\_ref()}
{Reads the reference type from the flag in the checkpoint file.
0 = RHF, 1 = UHF, 2 = ROHF, 3 = TCSCF.}
{takes no arguments.}
{flag indicating the reference.}
\noindent \funcdesc{int chkpt\_rd\_rottype()}
{Reads the rigid rotor type the molecule represents.
0 = asymmetric, 1 = symmetric, 2 = spherical, 3 = linear, 6 = atom.}
{takes no arguments.}
{rigid rotor type.}
\begin{center}
Functions that return \celem{int*}
\end{center}
\funcdesc{int *chkpt\_rd\_am2canon\_shell\_order()}
{Reads in the the mapping array from the angmom-ordered
to the canonical (in the order of appearance) list of shells.}
{takes no arguments.}
{an array \celem{nshell} long that maps shells from the angmom-ordered
to the canonical (in the order of appearance) order.}
\noindent \funcdesc{chkpt\_rd\_atom\_position()}
{Reads in symmetry positions of atoms.
Allowed values are as follows:
\begin{itemize}
\item 1 - atom in a general position
\item 2 - atom on the c2z axis
\item 4 - atom on the c2y axis
\item 8 - atom on the c2x axis
\item 16 - atom in the inversion center
\item 32 - atom in the sigma\_xy plane
\item 64 - atom in the sigma\_xz plane
\item 128 - atom in the sigma\_yz plane
\end{itemize}
This data is sufficient to define stabilizers of the nuclei.}
{takes no arguments.}
{an array of symmetry positions of atoms.} \\
\noindent \funcdesc{int *chkpt\_rd\_clsdpi()}
{Reads in an array which has an element for each irrep of the
point group of the molecule (n.b. not just the ones
with a non-zero number of basis functions). Each element
contains the number of doubly occupied MOs for that irrep.}
{takes no arguments.}
{the number of doubly occupied MOs per irrep.} \\
\noindent \funcdesc{int *chkpt\_rd\_openpi()}
{Reads in an array which has an element for each irrep of the
point group of the molecule (n.b. not just the ones
with a non-zero number of basis functions). Each element
contains the number of singly occupied MOs for that irrep.}
{takes no arguments.}
{the number of singly occupied MOs per irrep.} \\
\noindent \funcdesc{int *chkpt\_rd\_orbspi()}
{Reads in the number of MOs in each irrep.}
{takes no arguments.}
{the number of MOs in each irrep.} \\
\noindent \funcdesc{int *chkpt\_rd\_shells\_per\_am()}
{Reads in the number of shells in each angmom block.}
{takes no arguments.}
{the number of shells in each angmom block.} \\
\noindent \funcdesc{chkpt\_rd\_sloc()}
{Read in an array of pointers to the first AO
from each shell.}
{takes no arguments.}
{Read in an array \celem{nshell} long of pointers to
the first AO from each shell.} \\
\noindent \funcdesc{chkpt\_rd\_sloc\_new()}
{Read in an array of pointers to the first basis
function (not AO as \celem{chkpt\_rd\_sloc} does)
from each shell.}
{takes no arguments.}
{an array \celem{nshell} long of pointers to
the first basis function from each shell.} \\
\noindent \funcdesc{int *chkpt\_rd\_snuc()}
{Reads in an array of pointers to the nuclei on which shells are centered.}
{takes no arguments.}
{an array \celem{nshell} long of pointers to the nuclei on which shells
are centered.}
\noindent \funcdesc{int *chkpt\_rd\_snumg()}
{Reads in array of the numbers of the primitive
Gaussians in the shells.}
{takes no arguments.}
{an array \celem{nshell} long of the numbers of
the primitive Gaussians in shells.} \\
\noindent \funcdesc{int *chkpt\_rd\_sprim()}
{Reads in pointers to the first primitive
from each shell.}
{takes no arguments.}
{an array \celem{nshell} long of pointers to the first
primitive from each shells.} \\
\noindent \funcdesc{chkpt\_rd\_sopi()}
{Read in the number of symmetry-adapted basis functions in each symmetry block.}
{takes no arguments.}
{an array nirreps long of the numbers of
symmetry orbitals in symmetry blocks.} \\
\noindent \funcdesc{int *chkpt\_rd\_stype()}
{Reads in angular momentum numbers of
the shells.}
{takes no arguments.}
{Returns an array \celem{nshell} long of
the angular momentum numbers of the shells.} \\
\noindent \funcdesc{int *chkpt\_rd\_symoper()}
{Read in the mapping array between "canonical" ordering
of the symmetry operations of the point group and the
one defined in \file{symmetry.h}.}
{takes no arguments.}
{a mapping array \celem{nirrep} long}
\noindent \funcdesc{int *chkpt\_rd\_ua2a()}
{Read in the mapping array from the symmetry-unique atom
list to the full atom list.}
{takes no arguments.}
{a mapping array \celem{num\_unique\_atom} long}
\noindent \funcdesc{int *chkpt\_rd\_us2s()}
{Read in the mapping array from the symmetry-unique shell list
to the full shell list.}
{takes no arguments.}
{a mapping array \celem{num\_unique\_shell} long}
\begin{center}
Functions that return \celem{int**}
\end{center}
\funcdesc{int **chkpt\_rd\_ict()}
{Reads the transformation properties of the nuclei
under the operations allowed for the particular symmetry point group
in which the molecule is considered.}
{takes no arguments.}
{a matrix of integers. Each row corresponds
to a particular symmetry operation, while each column corresponds to
a particular atom. The value of \celem{ict[2][1]}, then, should be interpreted
in the following manner: application of the third symmetry operation of
the relavant point group, the second atom is placed in the location
originally occupied by the atom number \celem{ict[2][1]}.} \\
\noindent \funcdesc{int **chkpt\_rd\_shell\_transm()}
{Reads in the transformation matrix for the shells. Each row of the
matrix is the orbit of the shell under symmetry operations of the point
group.}
{takes no arguments.}
{a matrix of \celem{nshell}*\celem{nirreps} integers.}
\begin{center}
Functions that return \celem{double}
\end{center}
\funcdesc{double chkpt\_rd\_ecorr()}
{Reads in the correlation energy stored in the checkpoint file. To get some
information (a label) on the type of correlated wavefunction
used to get this energy, see \celem{chkpt\_rd\_corr\_lab()}.}
{takes no arguments.}
{the correlation energy.} \\
\noindent \funcdesc{double chkpt\_rd\_enuc()}
{Reads in the nuclear repulsion energy}
{takes no arguments.}
{the nuclear repulsion energy.} \\
\noindent \funcdesc{double chkpt\_rd\_eref()}
{Reads in the reference energy (may be different from HF energy).}
{takes no arguments.}
{the reference energy.} \\
\noindent \funcdesc{double chkpt\_rd\_escf()}
{Reads in the SCF HF energy.}
{takes no arguments.}
{the SCF HF energy.}
\noindent \funcdesc{double chkpt\_rd\_etot()}
{The total energy, be it HF, CISD, CCSD, or whatever! This is
the preferred function to use for geometry optimization via energies,
printing energies in analysis, etc., since this value is valid whatever
the calculation type.}
{takes no arguments.}
{The total energy.}
\begin{center}
Functions that return \celem{double*}
\end{center}
\funcdesc{double *chkpt\_rd\_evals()\\
double *chkpt\_rd\_alpha\_evals()\\
double *chkpt\_rd\_beta\_evals()}
{Reads in the (spin-restricted HF, $\alpha$ UHF, and $\beta$ UHF) eigenvalues:
the orbital energies.}
{take no arguments.}
{an array of \_all\_ of the SCF eigenvalues,
ordered by irrep, and by increasing energy within each irrep.
(i.e. for STO-3G water, the four $a_1$ eigenvalues all come first, and
those four are ordered from lowest energy to highest energy,
followed by the single $b_1$ eigenvalue, etc. --- Pitzer ordering)} \\
\noindent \funcdesc{double *chkpt\_rd\_exps()}
{Reads in the exponents of the primitive Gaussian functions.}
{takes no arguments.}
{an array of doubles.} \\
\noindent \funcdesc{double *chkpt\_rd\_zvals()}
{Reads in nuclear charges.}
{takes no arguments.}
{an array natom long of nuclear charges (as doubles).}
\begin{center}
Functions that return \celem{double**}
\end{center}
\funcdesc{double **chkpt\_rd\_blk\_scf(int irrep)\\
double **chkpt\_rd\_alpha\_blk\_scf(int irrep)\\
double **chkpt\_rd\_beta\_blk\_scf(int irrep)}
{Reads in a symmetry block of
the (RHF, $\alpha$ UHF, $\beta$ UHF) eigenvector.}
{\celem{int irrep}, designates the desired symmetry block}
{a square matrix has \celem{orbspi[irrep]}
rows. The eigenvectors are stored with the column
index denoting MOs and the row index denoting SOs: this means that
\celem{scf\_vector[i][j]} is the contribution of the $i$th SO to the $j$th MO.} \\
\noindent \funcdesc{double **chkpt\_rd\_ccvecs()}
{Reads in a matrix rows of which are
ALPHA (ccvecs[0]) and BETA (ccvecs[1]) matrices of coupling
coefficients for open shells stored in lower triangular form.
Coupling coefficients are defined NOT as in
C.C.J.Roothaan Rev. Mod. Phys. {\bf 32}, 179 (1960) as it is stated in the
manual pages for CSCF, but according to Pitzer (no reference yet)
and are **different** from those in Yamaguchi, Osamura, Goddard, and
Schaefer's book "Analytic Derivative Methods in Ab Initio Molecular
Electronic Structure Theory".\\
The relationship between the Pitzer's and Yamaguchi's conventions is
as follows : ALPHA = 1-2*a , BETA = 1+4*b , where a and b are
alpha's and beta's for open shells
defined on pp. 69-70 of Dr. Yamaguchi's book.
}
{takes no arguments.}
{double **ccvecs, a matrix 2 by \celem{abs(iopen)} rows of which are coupling
coefficient matrices for open-shells in packed form.
For definition of \celem{iopen} see chkpt\_rd\_iopen().} \\
\noindent \funcdesc{chkpt\_rd\_contr\_full()}
{Reads in the normalized contraction coefficients.}
{takes no arguments.}
{a matrix \celem{MAXANGMOM} (a constant defined in ???)
by the total number of primitives \celem{nprim};
each primitive Gaussian contributes to only one shell (and one
basis function, of course), so most of these values are zero.} \\
\noindent \funcdesc{double **chkpt\_rd\_geom()}
{Reads in the cartesian geometry.}
{takes no arguments.}
{The cartesian geometry is returned as a matrix
of doubles. The row index is the atomic index, and the column is the
cartesian direction index (x=0, y=1, z=2). Therefore, \celem{geom[2][0]}
would be the x-coordinate of the third atom.} \\
\noindent \funcdesc{chkpt\_rd\_lagr()\\
chkpt\_rd\_alpha\_lagr()\\
chkpt\_rd\_beta\_lagr()}
{Reads in an (RHF, $\alpha$ UHF, $\beta$ UHF) Lagrangian matrix in MO basis.}
{takes no arguments.}
{a matrix \celem{nmo} by \celem{nmo}.} \\
\noindent \funcdesc{double **chkpt\_rd\_scf()\\
double **chkpt\_rd\_alpha\_scf()\\
double **chkpt\_rd\_beta\_scf()}
{Reads in the (RHF, $\alpha$ UHF, $\beta$ UHF) eigenvector.}
{takes no arguments.}
{a square matrix of dimensions \celem{nmo}
by \celem{nmo} (see: \celem{chkpt\_rd\_nmo()}).
The symmetry blocks of the SCF vector appear
on the diagonal of this matrix.} \\
\noindent \funcdesc{chkpt\_rd\_schwartz()}
{Reads in the table of maxima of Schwartz integrals (ij|ij)
for each shell doublet.}
{takes no arguments.}
{\celem{NULL} if no table is present in the checkpoint file,
a matrix \celem{nshell} by \celem{nshell} otherwise.} \\
\noindent \funcdesc{chkpt\_rd\_usotao\_new()}
{Reads in an AO to SO transformation matrix.}
{takes no arguments.}
{a \celem{nso} by \celem{nao} matrix of doubles.} \\
\noindent \funcdesc{chkpt\_rd\_usotbf()}
{Reads in a basis function to SO transformation matrix.}
{takes no arguments.}
{a \celem{nso} by \celem{nso} matrix of doubles.}
\begin{center}
Functions that return \celem{struct} \celem{*z\_entry}
\end{center}
{The z-matrix is read from the checkpoint file as an array of
\celem{z\_entry} structs which are declared in \file{chkpt.h}.
This structure contains the reference atom, an optimization flag, the
coordinate value, and any label used for each internal coordinate.
When not applicable (such as the first few lines of a z-matrix)
\celem{atom} variables are given values of -1, \celem{opt} variables are
given values of -1, \celem{val} variables are given values of -999.9,
and \celem{label} strings are left empty.} \\
\noindent \funcdesc{chkpt\_rd\_zmat()}
{Reads in the z-matrix}
{takes no arguments.}
{\celem{struct} \celem{*z\_entry} natom long.}
|