First round of corrections to Judi's modifications

This commit is contained in:
Robert Harrison 1997-01-28 02:08:31 +00:00
parent 4ab84abdff
commit be2e43170a
17 changed files with 3229 additions and 1926 deletions

View file

@ -1,21 +1,25 @@
\label{sec:basis}
In NWChem, basis sets consist of sets of generally contracted Cartesian
Gaussian functions. (An optional functionality also exists that allows the
user to specify an effective core potential (ECP) basis set; see
section \ref{sec:ecp}.) The basis functions to be used for a given
calculation can be drawn from a standard set in the EMSL basis set library
that is included in the release of NWChem. (See Appendix \ref{knownbasis}
for a list of the standard basis sets currently supplied with the release
of the code.) Alternatively, the user can specify particular functions
explicitly in the input defining a particular basis set.
\label{sec:basis}
NWChem currently supports basis sets consisting of generally
contracted Cartesian Gaussian functions. The {\tt BASIS} directive is
used to define these, and also to specify use of an effective core
potential (ECP) that is associated with a basis set; see section
\ref{sec:ecp}.)
The basis functions to be used for a given calculation can be drawn
from a standard set in the EMSL basis set library that is included in
the release of NWChem. (See Appendix \ref{sec:knownbasis} for a list
of the standard basis sets currently supplied with the release of the
code.) Alternatively, the user can specify particular functions
explicitly in the input defining a particular basis set.
The form of the \verb+BASIS+ directive is as follows;
\begin{verbatim}
BASIS [<string name default "ao basis">] \
[spherical || cartesian default cartesian] \
[segment || nosegment default segment] \
[print || noprint default print]
[(spherical || cartesian) default cartesian] \
[(segment || nosegment) default segment] \
[(print || noprint) default print]
<string tag> library [<string tag_in_lib>] \
<string standard set> [file <filename>]
@ -29,94 +33,84 @@ The form of the \verb+BASIS+ directive is as follows;
END
\end{verbatim}
The string \verb+name+ allows the user to identify a specific basis set
in the database for a calculation. The various modules in the code expect
to find the
basis set in the database under the name \verb+"ao basis"+. The user can
assign the string \verb+name+ to \verb+"ao basis"+ using the \verb+SET+
directive (see Section \ref{sec:set}), in the same manner as that in
which different
\verb+geometry+ objects are assigned the default name \verb+geometry+
for specific tasks. This indirection allows the user to assign different
basis sets to the same geometry object, or the same basis set to different
geometry objects, for different calculations in
the course of the same job.
Examining first the keywords on the \verb+BASIS+ directive line:
\begin{itemize}
\item {\tt NAME}
By default the basis set is stored in the database with the name
\verb+"ao basis". By specifying another name in the \verb=BASIS=
directive, multiple basis sets may be stored at once in the database.
Also, the DFT (Section \ref{sec:dft}), RISCF (Section \ref{sec:riscf})
and RIMP2 (Section \ref{sec:rimp2}) modules require multiple basis
sets with specific names.
The user can associate the \verb+"ao basis" with another named basis
using the \verb+SET+ directive (see Section \ref{sec:set}).
\item {\tt SPHERICAL} and {\tt CARTESIAN}}
The keywords \verb+spherical+ and \verb+cartesian+ offer the option of
specifying the basis functions in either spherical or cartesian coordinates.
The keywords \verb+segment+ and \verb+nosegment+ allow the user to specify
whether or not the functions will be segmented. Currently, NWChem assumes
that all basis sets are segmented and cartesian, whether specified by the
user or taken from the standard library sets.
The options for spherical coordinates and unsegmented functions will become
usable in all calculations only when the derivative integral code is
extended to handle
general contractions and sphericals. Currently, only the energy codes are
able to handle these, which means that spherical basis functions can be used
only for (************???what sort of calculations???**********).
using either spherical-harmonic (5 d, 7 f, 9 g, \ldots) or Cartesian
(6 d, 10 f, 15 g, \ldota) angular functions. The default is
Cartesian because the current integral derivative program cannot
handle spherical functions. If only energy calculations are being
performed, then {\tt SPHERICAL} can be specified.
Note that the correlation-consistent basis sets were designed using
spherical harmonics and to use these the \verb+SPHERICAL+ keyword
should be present on the \verb+BASIS+ directive (in energy
calculations). Use of spherical functions also helps eliminate
problems with linear dependence.
\item {{\tt SEGMENT} or {\tt NOSEGMENT}}
By default NWChem forces all basis sets to be segmented,
even if they are input with either general contractions, or $L$ or sp
shells. This is because the current derivative integral package cannot
handle general contractions. If just computing energies a substantial
performance gain can result from exploiting generally contracted basis
sets, in which case {\tt NOSEGMENT} should be specified.
\item {{\tt PRINT} and {\tt NOPRINT}}
The keywords \verb+print+ and \verb+noprint+ allow the user to override
instructions from the top level \verb+PRINT+ directive for the basis sets.
The default is for the input module to print all basis sets encountered.
Specifying the keyword \verb+noprint+ allows the user to supress this output.
% This directive describes a basis set of generally contracted Cartesian
% Gaussian functions. By default basis sets are automatically segmented
% and cartesian\footnote{This will change when the derivative integral
% code is extended to handle general contractions and sphericals. Only
% the energy codes can presently handle these.} even if general
% contractions are input. Basis functions are associated with centers
% in geometries through the tags or names of centers which must match
% exactly (including case) and are limited to sixteen (16) characters.
% Each center with the same tag will have the same basis set. By
% default the input module prints each basis set encountered; use the
% \verb+NOPRINT+ option to disable printing.
%
% In the same fashion as for geometries, basis sets are named, with the
% default name being \verb+"ao basis"+. It should be clear from the
% above discussion on geometries and database entries how indirection is
% supported.
%
% Basis functions may be either drawn from a standard set in the EMSL
% basis set library or specified explicitly. See Appendix
% \ref{knownbas} for the current list of standard basis sets. An
% installation default is provided for the path to the basis set
% library, which may be overridden in the input. The case of names of
% standard basis sets is ignored. By default the standard basis
% appropriate to the atom on which it is centered is used, however this
% may be overriden, for instance to place ghost functions on dummy
% centers in counterpoise calculations. When explicitly specifying
% generally contracted basis sets, simply specify on each line the
% exponent followed by the contraction coefficients for each contraction
% of that exponent. The following examples will make the use of this
% directive clear.
\end{itemize}
The input specified in lines beginning with the string \verb+tag+
allows a particular center or atom in a calculation to be associated with
a particular set of basis functions. The values specified for \verb+tag+
must correspond exactly with the names supplied for the \verb+tag+ entries
on the \verb+GEOMETRY+ directive for a particular calculation. Each atom
or center with the same \verb+tag+ will have the same basis set, which must
also be specified with the same name \verb+tag+.
Basis sets are associated with centers by using the tag of a center in
a geometry that has either been input by the user (Section
\ref{sec:geom}) or created automatically. Each atom or center with
the same \verb+tag+ will have the same basis set. All atoms must have
basis functions assigned to them --- only dummy centers may have no
basis functions.
The keyword \verb+library+ specifies that the calculation will use the
We examine next how to reference standard basis sets in the basis set
library, and, finally, how to define a basis using exponents and
coefficients.
\subsection{Basis set library}
The keyword \verb+library+ specifies that the calculation will use the
standard basis sets in NWChem. The string \verb+standard_set+ is the
name that identifies the functions in the library. (See Appendix
name that identifies the functions in the library. The names of
standard basis sets are not case sensitive. See Appendix
\ref{sec:knownbasis} for a complete list of the basis functions in the
NWChem library.) If the string \verb+tag+ corresponds to
a dummy center, the string \verb+tag_in_lib+ must also be entered on
this line, to identify
the correct name for the atom in the basis function library.
NWChem library and their specification. If basis functions are to be
placed upon a dummy center, the string \verb+tag_in_lib+ must also be
entered on this line, to identify the correct atom type to use in the
basis function library (see the ghost atom example in Section
(\ref{sec:set} and below).
A default path to the basis set library
is provided on installation of the code, and the user can specify a
particular standard set by supplying the name in the library
in the string \verb+tag_in_lib+. However, a different path can be defined
for the particular basis set by specifying the keyword \verb+file+ after
the keyword \verb+library+, and then explicitly naming the file to be
accessed for the basis functions.
A default path to the basis set library is provided on installation of
the code, but a different path can be defined by specifying the
keyword \verb+file+ and then explicitly naming the file to be accessed
for the basis functions.
For example, NWChem contains the Thom Dunning cc-pvdz basis sets for
For example, NWChem contains the Dunning cc-pvdz basis sets for
oxygen and hydrogen in the standard basis set library. The \verb+BASIS+
directive to use these basis sets in a calculation of the water molecule
could be formulated quite simply as follows;
@ -128,13 +122,6 @@ could be formulated quite simply as follows;
end
\end{verbatim}
\Large
*****
QUESTION: In Appendix A, this basis set is listed as ``cc-pVDZ''. Is
this input case-sensitive, or not?
******
\normalsize
In this example, the cc-pvdz basis functions will be obtained from the
NWChem library, as defined by the default path on installation. To obtain
functions from some other library, such as the user's own experimental
@ -148,20 +135,14 @@ explicitly. An example illustrating this option is as follows,
end
\end{verbatim}
This directive tells the code to use the basis sets \verb+3-21g+ in the
file /usr/d3g681/nwchem/library for atoms or centers with \verb+tag+
strings \verb+o+ and \verb+si+ , rather than looking for them in the
default library.
This directive tells the code to use the basis sets \verb+3-21g+ in
the file /usr/d3g681/nwchem/library for atoms \verb+o+ and \verb+si+ ,
rather than looking for them in the default library.
The basis functions must be defined for dummy centers as well for
as atoms. Since the dummy centers are given \verb+tag+ names that begin
with \verb+bq+ to distinguish them from atoms (see the description of the
\verb+GEOMETRY+ directive in Section \ref{sec:geom}), the \verb+BASIS+
directive must identify their corresponding functions explicitly. For
example, to specify the cc-pvdz basis for a calculation on the water
monomer in the dimer basis, where the dummy oxygen and dummy hydrogen
centers have been identified as \verb+bqo+ and \verb+bqh+ respectively,
the \verb+BASIS+ directive is as follows,
Another example. To specify the cc-pvdz basis for a calculation on
the water monomer in the dimer basis, where the dummy oxygen and dummy
hydrogen centers have been identified as \verb+bqo+ and \verb+bqh+
respectively, the \verb+BASIS+ directive is as follows,
\begin{verbatim}
basis
@ -172,36 +153,27 @@ the \verb+BASIS+ directive is as follows,
end
\end{verbatim}
\subsection{Explicit basis set definition}
The user also has the option of explicitly specifying the generally
contracted basis functions for particular elements. This can be useful
as a means of specifying alternative basis functions for 'ghost' atoms
or dummy centers in counterpoise calculations, for instance.
For those particular elements named in some string \verb+tag+ (and identified
appropriately on a \verb+GEOMETRY+ directive), the string \verb+tag+ input
line on the \verb+BASIS+ directive is of the form,
A generally contracted Gaussian basis function is associated with a
center as follows
\begin{verbatim}
<string tag> <string shell\_type>
<real exponent> <real list\_of\_coefficients>
...
\end{verbatim}
The string \verb+shell_type+ is used to specify the outer electron shell of
the atom, which may be \verb+s+ for the s-shell, \verb+p+ for the p-shell,
(***or whatever***). The user must then specify the real exponent for
each electron(?), followed by the contraction coefficients for each
contraction of that exponent. The input for the \verb+list_of_coefficients+
is free-format, and assumed to be type 'real'.
For example, the \verb+BASIS+ directive to use Thom Dunning's cc-pvdz basis
functions for the water molecule, as illustrated above,
can be modified to add a specific basis function that defines a diffuse
s-shell (specified by string {\em s} for \verb+shell_type+) for oxygen.
The modified directive is of the form,
The \verb+shell_type+ identifies the angular momentum of the shell,
$s$, $p$, $d$, \ldots. By default, NWChem is configured to handle up
to $i$ functions. Subsequent lines define the primitive function
exponents and contraction coefficients. General contractions are
specified by including multiple coefficients.
For example, the following \verb+BASIS+ directive augments the Dunning
cc-pvdz basis set for the water molecule with a diffuse s-shell on
oxygen
\begin{verbatim}
basis
basis spherical nosegment
oxygen library cc-pvdz
hydrogen library cc-pvdz
oxygen s
@ -209,42 +181,9 @@ The modified directive is of the form,
end
\end{verbatim}
In all of these examples, the basis set is given the default name
\verb+"ao basis"+. The functions are assumed segmented and cartesian,
and the input module will print a description of the basis set. The functions
of this basis set consist of the library functions for hydrogen, plus
the library functions for oxygen as modifed based on the specified contraction
coefficients.
The basis functions for a molecule can be explicitly specified for all
atoms, with none of the functions drawn from the standard library. In such
a case, the \verb+shell_type+, \verb+exponent+, and \verb+list_of_coefficients+
must be supplied for each atom or center in the molecule. (Note that
the name of
each atom or center must also correspond to an appropriate entry for
a \verb+tag+ string
identifying each atom or center of the molecule on the corresponding
\verb+GEOMETRY+ directive.)
% The following directive specifies exactly the same basis set as the
% previous directive except that all basis functions are explicitly
% described (all input is free format --- the formatting here is just
% for readability).
The following example illustrates this option for the water molecule. The
user must enter explicitly all the information that could be obtained
simply by specifying the NWChem library functions using the lines
This is equivalent to the following explicit specification
\begin{verbatim}
oxygen library cc-pvdz
hydrogen library cc-pvdz
\end{verbatim}
The input for the \verb+BASIS+ directive in this example when the option
for specifying explicit functions is selected becomes,
\begin{verbatim}
basis
basis spherical nosegment
oxygen s
11720.0000 0.000710 -0.000160
1759.0000 0.005470 -0.001263
@ -280,36 +219,6 @@ for specifying explicit functions is selected becomes,
end
\end{verbatim}
% Note that the correlation-consistent basis sets were designed using
% spherical harmonics and to use these the \verb+SPHERICAL+ keyword must
% be present on the \verb+BASIS+ directive.
% *******NOTE: the above paragraph is not consistent with what has
% already been said about the keywords spherical and
% cartesian. And it's not consistent with the directive.
% What is right here?
% *******************************************************************
%
% This example uses a 3-21g basis set for centers \verb+o+ and \verb+si+
% and explicitly specifies the path to the basis set library (perhaps
% because you cannot find the copy installed with NWChem).
% \begin{verbatim}
% basis
% o library 3-21g file /usr/d3g681/nwchem/library
% si library 3-21g file /usr/d3g681/nwchem/library
% end
% \end{verbatim}
%
% In order to perform counterpoise corrections in standard basis sets it
% is necessary to specify the atom type. The following input specifies a
% cc-pvdz basis for a calculation on the water monomer in the dimer basis.
% \begin{verbatim}
% basis
% o library cc-pvdz
% h library cc-pvdz
% bqo library o cc-pvdz
% bqh library h cc-pvdz
% end
% \end{verbatim}

View file

@ -1,124 +1,58 @@
\label{sec:ecp}
In addition to the standard basis sets that can be specified using the
\verb+BASIS+ directive, the basis functions can be described in NWChem
using a effective core potential (ECP) basis set. An ECP basis set
consists of contracted gaussian functions that are fit to gaussians by the
function,
This directive describes an effective core potential (ECP) basis set
of contracted gaussian functions. The ECPs are fit to Gaussians
with the form
\[
r^2V_l(r) = \sum_{k} A_{lk} r^{n_{lk}} e^{B_{lk}r^{2}}
r^2V_l(r) = \sum_{k} A_{lk} r^{n_{lk}} e^{B_{lk}r^{2}}
\]
where $A_{lk}$ is the contraction coefficient, $n_{lk}$ is the
exponent of the ``r'' term (r-exponent), and $B_{lk}$ is the gaussian
exponent. (Note: to be consistent with most of the literature on ECP
functions, the r-exponent is shifted by 2; e.g., an r-exponent of 0
implies $r^{-2}$).
exponent. The r-exponent is shifted by 2 as per most of the ECP
literature, e.g., an r-exponent of 0 implies $r^{-2}$.
The EMSL library does not currently support a standard set of ECP basis
functions. Basis sets using these functions must be specified explicitly
by user input in the \verb+ECP+ directive. This directive has
essentially the same form as the standard \verb+BASIS+ directive,
except for differences in the type of information to be supplied for
each atom or center using the ECP basis set. The form of the input for
the \verb+ECP+ directive is as follows;
By default ECP basis sets are automatically segmented and cartesian
even if general contractions are input.
\begin{verbatim}
ecp [<string name default "ecp basis">] \
[spherical || cartesian default cartesian] \
[segment || nosegment default segment] \
[print || noprint default print]
\end{verbatim}
ECP basis functions are associated with centers in geometries through
the tags or names of centers which must match exactly (including case)
and are limited to sixteen (16) characters. Each center with the same
tag will have the same ECP basis set. By default the input module
prints each ECP basis set encountered; use the \verb+NOPRINT+ option
to disable printing. There can be only one active ECP basis set even
though several may exist in the input deck. The ECP modules load
``ecp basis'' with any ``ao basis'' present. The ECP functionality
works for energy and gradients.
% <string tag> library [<string tag_in_lib>] \
% <string standard set> [file <filename>]
%
% or
%
\begin{verbatim}
<string tag> [nelec] <integer number_of_electrons_replaced>
...
In the same fashion as for geometries or regular basis sets, ECP basis
sets are named, with the default name being \verb+"ecp basis"+. It
should be clear from the above discussion on geometries and database
entries how indirection is supported.
<string tag> <string shell_type>
<real r-exponent> <real gaussian-exponent> <real list_of_coefficients>
...
END
\end{verbatim}
% This directive describes an effective core potential (ECP) basis set
% of contracted gaussian functions. These are fit to gaussians by the
% function:
% \[
% r^2V_l(r) = \sum_{k} A_{lk} r^{n_{lk}} e^{B_{lk}r^{2}}
% \]
% Where $A_{lk}$ is the contraction coefficient, $n_{lk}$ is the
% exponent of the ``r'' term (r-exponent), and $B_{lk}$ is the gaussian
% exponent. The r-exponent is shifted by 2 as per most of the ECP
% literature, e.g., an r-exponent of 0 implies $r^{-2}$.
%
% By default basis sets are automatically segmented and cartesian even
% if general contractions are input. Generally contracted ECP basis
% sets are not in wide use but the functionality is available. ECP
% basis functions are associated with centers in geometries through the
% tags or names of centers which must match exactly (including case) and
% are limited to sixteen (16) characters. Each center with the same tag
% will have the same ecp basis set. By default the input module prints
% each ecp basis set encountered; use the \verb+NOPRINT+ option to
% disable printing. There can be only one active ECP basis set even
% though several may exist in the input deck. The ECP modules load
% ``ecp basis'' with any ``ao basis'' present. The ECP functionality
% works for energy and gradients.
%
% In the same fashion as for geometries or regular basis sets, ecp basis
% sets are named, with the default name being \verb+"ecp basis"+. It
% should be clear from the above discussion on geometries and database
% entries how indirection is supported.
%
% Basis functions currently may not be drawn from a standard set in the
% EMSL basis set library; they must be specified explicitly. All
% directives that are in common with the standard gaussian basis set
% input have the same function and syntax.
The string \verb+name+ allows the user to identify a specific ECP basis set
in the database for a calculation. If no name is specified explicitly, the
default name is \verb+"ecp basis"+ The various modules in the code expect
to find the
basis set in the database under the name \verb+"ao basis"+. The user can
assign the string \verb+name+ (or \verb+"ecp basis"+, if the default name
is used) to \verb+"ao basis"+ using the \verb+SET+
directive (see Section \ref{sec:set}), in the same manner as that in
which standard basis sets of some (non-default) \verb+name+
are assigned the default name \verb+"ao basis"+
for specific tasks. This indirection allows the user to assign different
basis sets to the same geometry object, or assign the same basis set to
different geometry objects, for different calculations in
the course of the same job. Only one ECP basis set can be active for a
given task, although any number of such basis sets can be defined in the
input under names other than \verb+"ecp basis"+.
Basis functions currently may not be drawn from a standard set in the
EMSL basis set library; they must be specified explicitly. All
directives that are in common with the standard gaussian basis set
input have the same function and syntax.
The keyword pairs
\begin{verbatim}
spherical || cartesian
segment || nosegment
print || noprint
spherical || cartesian
segment || nosegment
print || noprint
\end{verbatim}
are interpreted
in the \verb+ECP+ directive in the same manner as for the \verb+BASIS+
directive, but only the defaults are currently available for
the coordinate system and segmentation in the \verb+ECP+ directive.
NWChem assumes
that all ecp basis sets are segmented and cartesian.
The keywords are included in the directive, however, because it is
expected that eventually the code will include the options for the
user to specify basis functions in either spherical or
are interpreted in the \verb+ECP+ directive in the same manner as for
the \verb+BASIS+ directive, but only the defaults are currently
available for the coordinate system and segmentation in the \verb+ECP+
directive. NWChem assumes that all ECP basis sets are segmented and
cartesian. The keywords are included in the directive, however,
because it is expected that eventually the code will include the
options for the user to specify basis functions in either spherical or
cartesian coordinates, segmented or unsegmented. The print keyword is
currently active, and can be used to specify that the descriptions of
the functions will be printed or not printed by the input module, at the user's
discretion.
the functions will be printed or not printed by the input module, at
the user's discretion.
% , whether specified by the
% user or defined in the standard library sets.
@ -134,67 +68,55 @@ also be specified with the same name \verb+tag+.
The keyword \verb+NELEC+ allows the user to specify the number of core
electrons replaced by
the ecp basis specification for the atom represented by the tag. Additional
the ECP basis specification for the atom represented by the tag. Additional
input lines can then be used to define the specific coefficients.
The string \verb+shell_type+ is used to specify the components of the
ECP basis function. The label \verb+ul+ entered for \verb+shell_type+
for a given atom or center (identified by the string \verb+tag+) denotes
the local part of the ECP basis. This is equivalent to the highest
angular momentum
functions specified in the literature for most ecp basis sets. The
functions specified in the literature for most ECP basis sets. The
standard entries (\verb+s, p, d+, etc.) for \verb+shell_type+ delineate
the angular momentum projector onto the local function. The shell type
label of \verb+s+ indicates the \verb+ul-s+ projector input, \verb+p+
indicates the \verb+ul-p+, etc.
An application of the \verb+ECP+ directive is illustrated in the following
example using the molecule H$_2$CO. This input defines an ECP basis set
example for the molecule H$_2$CO. This input defines an ECP basis set
for the carbon and oxygen atoms in the molecule.
\Large
(*****What about the hydrogen molecule? What basis set does it use?******)
\normalsize
% The following example illustrate the input of an ECP for H$_2$CO.
% \centerline{{\bf H$_2$CO }}
\begin{verbatim}
ecp print
C nelec 2 # ecp replaces 2 electrons on C
C ul # d
1 80.0000000 -1.60000000
1 30.0000000 -0.40000000
2 0.5498205 -0.03990210
C s # s - d
0 0.7374760 0.63810832
0 135.2354832 11.00916230
2 8.5605569 20.13797020
C p # p - d
2 10.6863587 -3.24684280
2 23.4979897 0.78505765
O nelec 2 # ecp replaces 2 electrons on O
O ul # d
1 80.0000000 -1.60000000
1 30.0000000 -0.40000000
2 1.0953760 -0.06623814
O s # s - d
0 0.9212952 0.39552179
0 28.6481971 2.51654843
2 9.3033500 17.04478500
O p # p - s
2 52.3427019 27.97790770
2 30.7220233 -16.49630500
end
ecp print
C nelec 2 # ecp replaces 2 electrons on C
C ul # d
1 80.0000000 -1.60000000
1 30.0000000 -0.40000000
2 0.5498205 -0.03990210
C s # s - d
0 0.7374760 0.63810832
0 135.2354832 11.00916230
2 8.5605569 20.13797020
C p # p - d
2 10.6863587 -3.24684280
2 23.4979897 0.78505765
O nelec 2 # ecp replaces 2 electrons on O
O ul # d
1 80.0000000 -1.60000000
1 30.0000000 -0.40000000
2 1.0953760 -0.06623814
O s # s - d
0 0.9212952 0.39552179
0 28.6481971 2.51654843
2 9.3033500 17.04478500
O p # p - s
2 52.3427019 27.97790770
2 30.7220233 -16.49630500
end
\end{verbatim}
Generally contracted ECP basis sets are not in wide use, but the
functionality has been included in NWChem for applications where
they might be useful. The user should be aware, however, that
the atomic SCF code does not currently handle the guess
generation for ECP centers. Therefore, it may not be possible to obtain
an initial set of orbitals for either the SCF or DFT when using an ECP
basis set. It may be necessary to use a smaller basis set and then
project those orbitals to the
basis set that will be used, (refer to Section \ref{sec:vectors}). Convergence
and starting orbital guesses are being addressed in ongoing development
work with the code.
functionality has been included in NWChem for applications where they
might be useful.

View file

@ -12,7 +12,7 @@ specific resources, and differing services provided by the operating system.} .
To run NWChem sequentially on nearly all UNIX-based platforms simply
use the command \verb+nwchem+ and provide the name of the input file
as an argument (section \ref{sec:inputfilename}).
as an argument (section \ref{sec:inputstructure}).
Output is to standard output, standard error and Fortran unit 6
(usually the same as standard output). Files are created by default

View file

@ -0,0 +1,29 @@
\label{sec:functionality}
Current functionality includes:
\begin{itemize}
\item Self Consistent Field or Hartree Fock energy and analytic
gradients (RHF, UHF, high-spin ROHF). Analytic second derivatives
under development.
\item Gaussian Density Functional Theory (DFT) energy and analytic
gradients with many local and non-local exchange-correlation potentials
\item MP2 semi-direct energy and analytic gradients for RHF and UHF
references (frozen core under development). Direct MP2 energy (RHF
only) and resolution of the identity (RI) integral approximation MP2
(RHF and UHF).
\item Coupled-cluster (RHF) with linear triples (gradients under
development).
\item Complete active space SCF (CASSCF) energy (gradients under
development).
\item Selected-CI with perturbation correction energy.
\item First derivatives for all methods by numerical difference of the
energy if analytic derivative is not available.
\item Second derivatives by numerical difference of gradients if
analytic seconds are not available.
\item Geometry Optimization (Minimization and Transition State) for
all methods.
\item Generation of the electron density file for the {\em Insight}
graphical program.
\item Interface to the natural bond orbital package.
\item Interface to the COLUMBUS multi-reference CI package.
\end{itemize}

View file

@ -1,272 +1,223 @@
\label{sec:geom}
The \verb+GEOMETRY+ directive is used to define specific geometry objects
for a calculation or series of calculations. The input for this directive
allows the user to define the geometry of the molecule(s) to be considered
in the calculation(s). NWChem already has a fairly good idea of what most
atoms look like and the sort of molecular structures in which they might be
arranged. This information is stored in the basis sets, which can be specified
for a given task using the \verb+BASIS+ directive (see Section
\ref{sec:basis}). The \verb+GEOMETRY+ directive allows the user to specify
particular elements of the geometry objects, such as the coordinates of
the individual atoms in a molecule, and the appropriate symmetry group.
It is also possible to define multiple geometry objects for the same
molecule under different names, for use in different tasks of the same
calculation.
The form of the \verb+GEOMETRY+ directive is as follows;
\begin{verbatim}
GEOMETRY [<string name default geometry>] \
[units <string units default bohr>] \
[units <string units default angstrom>] \
[bqbq] \
[print [xyz] || noprint]
[print [xyz] || noprint] \
[autoz]
[SYMMETRY GROUP <string group_name> [print]]
[SYMMETRY [GROUP] <string group_name> [print]]
<geometry specification (cartesian or Z-matrix)>
geometry specification (cartesian || Z-matrix)
[ZCOORD ... END]
END
\end{verbatim}
% Cartesian geometry specification, as well as Z-matrix-like format is
% available. As mentioned above (section
% \ref{sec:arch}), multiple geometries may be stored in the database
% provided each is given an independent name. The default name of
% \verb+"geometry"+ is used by most application modules to access the
% geometry at which to perform a calculation. Associating a named
% geometry with the required name of \verb+"geometry"+ is described in
% section \ref{sec:arch}. Known names for units are \verb+au+,
% \verb+bohr+, or \verb+angstrom+ (the conversion factor used to convert
% from Angstr\"{o}m to Bohr is $1.8897265$). By default, the input
% module prints any geometry it encounters. Printing can be disabled
% with the \verb+PRINT+ option. The \verb+XYZ+ qualifier to print
% causes the geometry to also be printed in the \verb+XYZ+ format of
% XMol.
This is a multiple directive and may contain many or few lines,
depending on the application. The input supplied with this directive
consists of three main sections;
The input supplied with this directive consists of three main
sections;
\begin{itemize}
\item basic information to identify the geometry object in the code and
define how it will be processed
\item input to identify the symmetry group for the molecule
\item input to specify the geometric locations of the atoms in the
molecule (cartesian coordinates or Z-matrix)
\item keywords on the the line of the geometry directive that specify
the name, units, etc.
\item symmetry information
\item input to specify the locations of the atoms and centers
(cartesian coordinates or Z-matrix)
\end{itemize}
The input options and keywords for each of these sections are
discussed in detail in the following subsections.
These are examined in the following subsections.
\subsection{Geometry Object Identification Input}
\subsection{Keywords on the geometry directive}
\subsubsection*{{\tt NAME}}
The default \verb+name+ for a geometry object is \verb+geometry+, and
most modules in the code look for a geometry with this name. The user
can direct a module to a different geometry by assigning the string
\verb+geomery+ to \verb+name+ using the \verb+SET+ directive (see the
example in Section \ref{sec:set}).
The input for the first four lines of the directive allows the user to name
the object, specify the geometry input format, decide how to treat dummy
centers in the geometry, and tell the code what to do about printing
the geometry information.
\subsubsection*{{\tt UNITS}}
The default units for the geometry input unit is {\AA}ngstr\"{o}m
(\verb+bohr+ or \verb+au+), however atomic units or Bohr are used
internally. However, the geometric coordinates can also be supplied
in atomic units, nanometers and picometers by specifying the
appropriate value for the \verb+UNITS+ keyword. (Note: The default
conversion factor used in the code to convert from {\AA}ngstr\"{o}m to
Bohr is $1.8897265$.)
The default \verb+name+ for a geometry object is the string \verb+geometry+,
and most modules in the code look for an object with this name.
The user can redirect the module to a different geometry object by assigning
the string \verb+geomery+ to \verb+name+ using the \verb+SET+ directive
(see Section \ref{sec:set}). The default for the geometry input unit
is \verb+bohr+ (or \verb+au+), and this is the working unit for such
distances in the code.
However, the geometric coordinates can be supplied in
\verb+angstrom+ by specifying this keyword in the directive.
(Note: The conversion factor used in the code to convert from Angstr\"{o}m
to Bohr is $1.8897265$.)
Possible values for the \verb+UNITS+ keyword are (only the first two
characters need be specified)
\begin{itemize}
\item \verb+angstrom+ --- {\AA}ngstr\"{o}m, the default. Converts
to A.U. using the \AA\ to A.U. conversion factor.
\item \verb+au+ or \verb+atomic+ or \verb+bohr+ --- Atomic units
\item \verb+nm+ or \verb+nanometers+ --- nanometers (converts to
A.U. using a conversion factor computed as $10.0$ times the
\AA\ to A.U. conversion)
\item \verb+pm+ or \verb+picometers+ --- picometers (converts to
A.U. using a conversion factor computed as $0.01$ times the
\AA\ to A.U. conversion)
\end{itemize}
The default in NWChem is to ignore interactions between dummy centers.
Specifying the keyword \verb+bqbq+ forces the code to include these
interactions. The complimentary keywords \verb+print+ and \verb+noprint+
allow the user to specify the print option for the geometry module,
independent of any specifications in the top-level \verb+PRINT+ directive.
The \verb+print+ keyword tells the code to print everything for this
module, regardless of other instructions. In addition, the keyword
\verb+xyz+ specifies that the coordinates will be printed in the XYZ
format of XMol. If the keyword \verb+noprint+ is specified, the printing
of all geometry output for this module is suppressed.
E.g., the following directives all specify the same geometry for $H_2$
(a bond length of 0.732556\ \AA).
\begin{verbatim}
geometry
h 0 0 0
h 0 0 0.732556
end
geometry units nm
h 0 0 0
h 0 0 0.0732556
end
geometry units pm
h 0 0 0
h 0 0 73.2556
end
geometry units atomic
h 0 0 0
h 0 0 1.3843305
end
\end{verbatim}
\subsubsection*{{\tt BQBQ}}
The default in NWChem is to ignore interactions between dummy centers
(those beginning with \verb+bq+ or \verb+x+),
when computing energies or energy derivatives. These interactions
will be included if the keyword \verb+BQBQ+ is specified.
\subsubsection*{{\tt PRINT} and {\tt NOPRINT}}
The complimentary keywords \verb+print+ and \verb+noprint+
enable/disable printing of the geometry when it is read by the input
module. It is printed by default. In addition, the print keyword may
be qualitifed by the additional keyword \verb+XYZ+ which specifies
that the coordinates should be printed in the XYZ format of XMol.
\subsubsection*{{\tt AUTOZ}}
By default the Cartesian or Z-matrix parameters provided by the user
in the body of the geometry directive are used in subsequent geometry
optimizations. If \verb+AUTOZ+ is specified then the user's input is
used {\em only} to define the starting geometry and NWChem will
automatically generate a set of internal coordinates suitable for
geometry optimization. See the Section \ref{sec:zcoord} for how to
force the definition of specific internal variables in combination
with automatically generated variables.
\subsection{Symmetry Group Input}
The input following the keyword \verb+SYMMETRY GROUP+ is used to specify
the symmetry for the molecule modeled with this geometry object.
There is no default for this input in the current version of NWChem, since
the use of molecular symmetry is not yet automated in the code.
Examples of expected input for the string \verb+group_name+ include
such entries as
The symmetry directive is used to specify the point group for the
molecular geometry (space group information for 1-, 2-, and
3-dimensional periodic systems is not yet documented). The point
group name should be specified as the standard Sch\"{o}files symbol.
\begin{itemize}
\item \verb+c2v+ -- for molecular symmetry C\_{2v}
\item \verb+d2h+ -- for molecular symmetry D\_{2h}
\item \verb+Td+ -- for molecular symmetry T\_{d}
\item \verb+d6h+ -- for molecular symmetry D\_{6h}
\end{itemize}
The user must know the symmetry of the molecule being modeled, and be able
to specify the
coordinates of the symmetry-unique atoms in a suitable orientation
relative to the rotation axes and symmetry planes.
Appendix \ref{symexamples} lists a number of examples of the \verb+geometry+
directive input for specific molecules having symmetry patterns recognized
by NWChem.
The default is no symmetry ($C_1$ point group) and detection of point
group symmetry is not yet automated, though this is planned. The user
must also know the symmetry of the molecule being modeled, and be able
to specify the coordinates of the symmetry-unique atoms in a suitable
orientation relative to the rotation axes and symmetry planes.
Appendix \ref{symexamples} lists a number of examples of the
\verb+geometry+ directive input for specific molecules having symmetry
patterns recognized by NWChem.
\subsection{Cartesian coordinate input}
\label{sec:cart}
The default in NWChem is to specify the geometry information in Cartesian
coordinates. Each atom of the molecule being modeled by the geometry
object must be specified on a line in the directive. That is, each atom
or center
must be identified on a line of the following form;
The default in NWChem is to specify the geometry information entirely
in Cartesian coordinates, and examples of this format have already
appeared above (e.g, Section \ref{sec:realsample}). Each center
(usually an atom) is identified on a line of the following form;
\begin{verbatim}
<string tag> <real x> <real y> <real z> \
[charge <real charge>] [mass <real mass>] [ghost]
[charge <real charge>] [mass <real mass>]
\end{verbatim}
The string \verb+tag+ is the name of the atom or center. The string
is limited to
16 characters, and must correspond to the
name of an atom in one of the basis sets defined for the calculation.
Atoms or centers with the same \verb+tag+ will use the same basis set in
the calculation.
(See Section \ref{sec:basis} for a discussion of the input for the
\verb+BASIS+ directive). In most cases, the entry for \verb+tag+ is the
chemical symbol for the element, such as \verb+O+ for oxygen, \verb+H+
for hydrogen, \verb+Fe+ for iron, etc. Dummy centers
are differentiated from atoms and centers by giving them a \verb+tag+ that
begins with the letters \verb+bq+. An atom must have basis functions
associated with it, and so must all centers. If the keyword \verb+bqbq+
is specified, dummy centers must also have basis functions.
The string \verb+tag+ is the name of the atom or center and its case
(upper or lower) is important. The tag is limited to 16 characters
and is interpreted as follows
\begin{itemize}
\item If it begins with either the symbol or name of an element
(ignoring case) then it is thought to be an atom of that type
and the default charge is the atomic number adjusted for the
presence of ECPs (see \ref{sec:ecp}). Additional characters can
be used to distinguish between atoms of the same element. E.g.,
the tags \verb+oxygen+, \verb+O+, \verb+o34+, \verb+olonepair+,
and \verb+Oxygen-ether+, will all be interpreted as being oxygen
atoms. Atoms {\em must} have basis functions associated with
them (Section \ref{sec:basis}).
\item If the tag begins with either \verb+BQ+ or \verb+X+
(ignoring case) then it is treated as a dummy center with
default zero charge. Dummy centers may optionally have basis
functions or non-zero charge. Note, that in order to recogonize
the xenon atom (Xe) it is not possible to input a dummy atom
beginning with the characters \verb+XE+ --- an attempt to do
this will generate a xenon atom.
\item {\em If the tag begins with characters that cannot be
matched against an atom or \verb+BQ+ or \verb+X+ then a fatal
error is generated.}
\end{itemize}
The xyz coordinates of the atom in the molecule
are specified as real numbers
following the string \verb+tag+. The user also has the option of
specifying the charge of the atom (or center) and its mass.
It is {\em important} to be aware of the following points
\begin{itemize}
\item The tag of a center is used in the \verb+BASIS+ directive (Section
\ref{sec:basis}) to associate functions with centers.
\item All centers with the same tag will have the same basis
functions.
\item When automatic symmetry detection is functional only centers
with the same tag will be candidates for testing for symmetry
equivalence.
\item The user specified charges (of all centers, atomic and dummy)
and any net total charge of the system (Section \ref{sec:charge}) are
used to determine the number of electrons.
\end{itemize}
The default charge for an
atom is its atomic number, adjusted for the presence of ECPs (see Section
\ref{sec:ecp}). In order to specify a different value for the
charge on a particular atom, the user must enter
the keyword \verb+charge+, then enter a real number for the unit charge
of the atom in the real variable \verb+charge+. The values specified for the charges of
all atoms, centers, and
dummy centers are used in conjunction with the
total charge of the system (as specified with the \verb+CHARGE+ directive;
see Section
\ref{sec:charge}) to determine the total number of electrons in the system.
The Cartesian coordinates of the atom in the molecule are specified as real
numbers following the string \verb+tag+. The user also has the option
of specifying the charge of the atom (or center) and its mass.
The default mass for an atom is taken to be the mass of its highest naturally
occurring isotope. If the user wishes to model some other isotope of the
element, its mass must be defined explicitly by specifying the keyword
\verb+mass+ and entering the appropriate value for \verb+mass+.
The default charge for an atom is its atomic number, adjusted for the
presence of ECPs (see Section \ref{sec:ecp}). In order to specify a
different value for the charge on a particular atom, the user must
enter the keyword \verb+CHARGE+.
The default mass for an atom is taken to be the mass of its highest
naturally occurring isotope. If the user wishes to model some other
isotope of the element, its mass must be defined explicitly by
specifying the keyword \verb+MASS+.
% Each line in the body of the directive specifies the name or tag, and
% the coordinates of one center or atom. The charge associated with the
% center is inferred from the atom type. The charge may be explicitly
% specified using the \verb+CHARGE+ keyword. Default masses may be
% overriden by specifying the mass. The default masses are those of the
% highest naturally abundant isotope for the given atom, not the average
% mass of the element.
%
% The tag associated with each center is interpreted as follows:
% \begin{itemize}
% \item If it begins with \verb+BQ+ (ignoring case) then it is treated
% as a dummy center with default zero charge. Dummy centers may
% optionally have basis functions or non-zero charge.
% \item If it begins with either the symbol or name of an element then
% it is thought to be an atom. Atoms {\em must} have basis
% functions associated with them and the default charge is the
% atomic number adjusted for the presence of ECPs (see
% \ref{sec:ecp}). The user provided charges (of all centers,
% atomic and dummy) and the total charge of the system are used to
% determine the number of electrons
% \item The tag of a center is used in the \verb+BASIS+ directive to
% associate functions with centers. All centers with the same tag
% will have the same basis functions. Atomic centers may have
% standard basis sets sited upon them.
% \item When automatic symmetry detection is functional only centers
% with the same tag will be candidates for testing for symmetry
% equivalence.
% \end{itemize}
%
% By default NWCHEM does not include the interaction between dummy
% centers. The \verb+BQBQ+ qualifier to the \verb+GEOMETRY+ directive
% causes these interactions to be included.
%
% The use of molecular symmetry in NWCHEM is not yet automated, thus,
% the user is responsible for detecting symmetry and specifying the
% coordinates of the symmetry unique atoms in a suitable orientation
% relative to the rotation axes and symmetry planes. Since it seems
% that only the original authors of the symmetry package seem to
% understand the latter, we provide many examples in Appendix
% \ref{symexamples}.
\subsection{Z-matrix input}
\label{sec:Z-matrix}
Using the
\begin{verbatim}
[zmt
<string tag> <Z-matrix coordinate specification> [ghost]
(ZMT || ZMATRIX || ZMAT)
<Z-matrix coordinate specification>
[VARIABLES
<list of active variables>]
<list of active variables>
[CONSTANTS
<list of frozen variables>]
<list of frozen variables>
zend]
(END || ZEND)
\end{verbatim}
allows
the user to specify the structure of the molecule by means of its Z-matrix.
However, it is also possible to enter the coordinates of some of the atoms using
cartesian coordinates, even in the \verb+[zmt ... zend]+ environment.
The code is able to distinguish between
the two types of input by means of the input following the string \verb+tag+
for the particular atom. If the Z-matrix input is specified for the atom,
the input consists of pairs numbers that define connectivity indices and
bond length, bond angle, or torsion angle. If the
input is in Cartesian coordinates, the input consists of three real numbers
defining the x,y,z coordinates of the atom. However, the x,y,z coordinates
must be specified in {\AA}ngstr{\"o}ms, regardless of the entry specified
for \verb+units+.
This allows the user to specify the structure of the system with a
Z-matrix which allows specification of the molecular structure using
either cartesian coordinates (see Section \ref{sec:zmcart})or internal
coordinates (bond lengths, bond angles and dihedral angles). The
Z-matrix input for a center consists of pairs numbers that define
connectivity indices and a bond length and bond or torsion angless.
Cartesian coordinate input consists of three real numbers defining the
x,y,z coordinates of the atom. {\em Within the Z-matrix input bond
lengths and cartesian coordinates must presently be specified in
{\AA}ngstr{\"o}ms, regardless of the entry specified for
\verb+units+.} Angles are specified in degrees.
The keyword \verb+ghost+ is used to denote a 'ghost' atom in the molecular
geometry. A 'ghost' atom is like an ordinary atom in that it has its
associated basis set, but it is assumed to have a nuclear charge of zero.
This is a useful property for such things as counterpoise calculations to assess basis set
superposition error.
% If the \verb+GEOMETRY+ directive contains the \verb+zmat+ keyword, the
% structure of the molecule is defined by means of its Z-matrix, or
% the cartesian coordinates of the atoms, or a mixture of the two. A
% blank line terminates the list of the atoms. Bond lengths, bond
% angles, or torsion angles can be specified by means of numerical
% values assigned to variables. The list of variables and their
% assigned numerical values follow the list of atoms, and is also
% terminated with a blank line. Then comes the end of the data group
% input with a last line 'end'
%
% A second set of variables to be qualified as '{\bf frozen}' may be
% specified. They come after the blank line that indicates the end
% of the 'variables'. The second set is also terminated by a blank line.
% {\bf The 'frozen' specification is presently not active, but included
% to ensure compatibility with other codes. Only cartesian coordinates
% can be kept constant via the 'active atoms' list (see section
% \ref{sec:activeatoms})}
%
% 'Ghost' atoms, often used in the assessment of basis set superposition
% error for example, are atoms with their associated basis set, but
% for which the nuclear charge is set to zero. Specifying a 'ghost' atom
% may be accomplished appending the '{\tt ghost}' parameter at the end of the
% appropriate lines below.
%
% When two numerical values, separated by a comma, are given for some
% variables, they are considered as the initial and final values for the
@ -274,187 +225,160 @@ superposition error.
% geometries generated by linear interpolation between the initial and
% final values.
The input supplied for the atoms describing the molecule by means of its
Z-matrix requires the following sequential approach.
The centers (denoted as \verb+i+, \verb+j+, and \verb+k+ below) used
to specify Z-matrix connectivity may be given either as integers
(indentifying the centers by number) or as the tag of the center.
{\em If the tag is used, this tag must be unique.} The use of
``dummy'' atoms is possible, by using \verb+X+ or \verb+BQ+ at the
start of the tag.
Bond lengths, bond angles and dihedral angles (denoted below as {\tt
R}, {\tt alpha}, {\tt beta} respectively) may be specified either as
numerical values or as symbolic strings which are subsequently
defined. The same sybmolic string may be used several times. Any
mixture of numeric data and symbols may be given.
The Z-matrix input is specified sequentially as follows
\begin{verbatim}
tag1
tag2 i R
tag3 i R j alpha
tag4 i R j alpha k beta [l]
...
\end{verbatim}
We examine this in more detail. In the following, the tag or number
of the center being currently defined is labelled as \verb+C+ (``C''
for current). Figures \ref{fig:zmat1}, \ref{fig:zmat2} and
\ref{fig:zmat3} display the relationship between the input data
and the definition of centers and angles.
\begin{figure}[htbp]
\centering
\psfig{figure=zmat1.eps}
\caption{\label{fig:zmat1} Relationship between the centers, bond angle
and dihedral angle in Z-matrix input.}
\end{figure}
\begin{figure}[htbp]
\centering
\psfig{figure=zmat2.eps}
\caption{\label{fig:zmat2} Relationship between the centers and two
bond angles in Z-matrix input with optional parameter specified as $+1$.}
\end{figure}
\begin{figure}[htbp]
\centering
\psfig{figure=zmat3.eps}
\caption{\label{fig:zmat3} Relationship between the centers and two
bond angles in Z-matrix input with optional parameter specified as $-1$.}
\end{figure}
\begin{enumerate}
\item $<$atom$>$ [ghost]
\item \verb+tag1+
% Only the name of the first atom is required. 'ghost' is used
% only when specifying a 'ghost' atom.
For the first atom in the molecule, the Z-matrix input requires only
the name of the atom at it appears in the basis set. This is usually
the chemical symbol for the atom.
However, if the atom is a 'dummy center', the chemical symbol must
be preceded by \verb+x+ or \verb+bq+. (The keyword 'ghost' is required
only when specifying that the atom is to be defined as a 'ghost' atom.)
Only the tag of the first center is required.
\item $<$atom$>$ $<$i1$>$ $<$blength$>$ [ghost]
\item \verb+tag2 i R+
% Only a name and a bond distance is required for atom 2. For 'ghost',
% same remark applies as before.
For the second atom, the Z-matrix input requires the name of the atom
as it appears in the basis set,
plus the connectivity $<$i1$>$ and the bond distance $<$blength$>$
connecting it to another atom.
The second center requires specification of its tag and the
bond-length ($R_{Ci}$) from the first atom which is identified by
\verb+i+.
(NOTE: The connectivity for any bond, {\tt i1, i2, i3} \ldots,
can be specified as an integer (1, 2, 3, \ldots) or as a string
which matches the name specified for one of the atoms in the molecule.
If the connectivity (such as {\tt i1}) is defined as a string,
and the same element appears more than once in the molecule, a number
must be added to the {\tt atom} string of the Z-matrix input for
subsequent appearances of that element in the molecule, to ensure
a unique \verb+tag+ for each occurance.)
\item \verb+tag3 i R j alpha+
\item $<$atom$>$ $<$i1$>$ $<$blength$>$ $<$i2$>$ $<$alpha$>$ [ghost]
The third center requires specification of its tag, its distance
($R_{Ci}$) to one of the previous two centers (identified by the
value of \verb+i+) and the angle $\widehat{Cij}$.
% Only a name, distance, and angle are required for atom 3. For
% 'ghost', same remark applies as before.
For the third atom of the molecule, the Z-matrix input requires the
name of the atom as it appears in the basis set and the connectivity
$<$i1$>$ and bond distance
$<$blength$>$ connecting it to atom 2, plus the connectivity $<$i2$>$
and angle $<$alpha$>$ it makes with the plane of the first two atoms.
\item \verb+tag i R j alpha k beta [<integer l default 0>]+
\item $<$atom$>$ $<$i1$>$ $<$blength$>$ $<$i2$>$ $<$alpha$>$ $<$i3$>$ $<$beta$>$ $<$i4$>$ [ghost] %
The fourth, and all subsequent centers, require the tag, a bond
length ($R_{Ci}$) relative to center \verb+i+, the angle with
centers \verb+i+ and \verb+j+ ($\widehat{Cij}$), and {\em either}
\begin{enumerate}
\item the dihedral angle betwen the current center and centers
\verb+i+, \verb+j+ and \verb+k+ (Figure \ref{fig:zmat1}), or
\item a second bond angle $\widehat{Cik}$ and an orientation to
the plane containing the other three centers (Figure
\ref{fig:zmat2} and \ref{fig:zmat3}).
\end{enumerate}
For the fourth atom and all subsequent atoms in the molecule (if it
has more than four atoms), the Z-matrix input requires the name
of the atom as it appears in the basis set,
plus the connectivities and bond length,
bond angle, and either the dihedral angle or a second bond angle
for the atom.
\begin{itemize}
% \item [$\bullet$] {\tt atom} is the chemical symbol of this
% atom; it can be followed
% by numbers if desired. The chemical symbol implies the nuclear
% charge.
\item [$\bullet$] {\tt i1} defines the connectivity of the following bond
% \item [$\bullet$] {\tt blength} is the bond length 'this atom-atom i1'.
\item [$\bullet$] {\tt blength} is the bond length between this atom and the atom denoted by {\tt i1}
\item [$\bullet$] {\tt i2} defines the connectivity of the following angle
% \item [$\bullet$] {\tt alpha} is the angle 'this atom-atom i1-atom i2'.
\item [$\bullet$] {\tt alpha} is the angle that the bond with this atom
makes with the plane of the bond between atom {\tt i1} and atom {\tt i2}
\item [$\bullet$] {\tt i3} defines the connectivity of the following angle
% \item [$\bullet$] {\tt beta} is either the dihedral angle
%'this atom-atom {\tt i1}-atom {\tt i2}-atom
% {\tt i3}', or perhaps a second bond angle, 'this atom-atom i1-atom {\t%t i3}'
\item [$\bullet$] {\tt beta} is the dihedral angle between
this atom and the plane containing atom {\tt i1} and atom {\tt i2} and atom
{\tt i3}; alternatively, it defines a second bond angle for
this atom, between this atom and the plane of the two atoms
atom {\tt i1} and atom {\tt i3}.
Which alternative is selected depends on the value specified for {\tt i4}, as explained below.
% \item [$\bullet$] {\tt i4} defines the nature of {\tt beta}. If
%{\tt beta} is a dihedral
% angle, {\tt i4}=0 ( default ). If {\tt beta} is a second bond angle,
% then {\tt i4}=+/-1
% (sign specifies one of two possible directions).
% \item [$\bullet$] For 'ghost', same remark applies as before.
\item [$\bullet$] {\tt i4} defines the nature of the input for {\tt beta}. If {\tt i4} is zero,
{\tt beta} is interpreted as a dihedral
angle. (This is the default.) If {\tt i4} is entered as +1 or -1, {\tt beta}
is interpreted as a second bond angle. (The sign of {\tt i4} specifies the
direction of the bond angle relative to the plane described by the
three reference atoms).
\end{itemize}
% \item Line no.\ 4 is repeated for each remaining atom. A blank line
% indicates the end of the atoms in the molecule.
% \item The use of 'dummy' atoms is possible, by using 'X' or 'BQ' for the
%chemical symbol.
%
% \item The connectivity i1, i2, i3, may be given as integers,
% 1, 2, 3, 4, 5, \ldots or as strings which match one of the {\tt atom}s.
% In this case, numbers must be added to the {\tt atom} string to
% ensure uniqueness.
%
% \item Symbolic strings may be given in place of numeric values for
%{\tt blength}, {\tt alpha}, {\tt beta}. The same string may be repeated. Any mixture of
% numeric data and symbols may be given.
%
% \item All symbolic definitions follow the blank line that signals the
% end of the Z-matrix input. The list of symbolic definitions ends with a
% blank line, followed by an '{\tt end}' directive. If there are no symbolic
% definitions, and all the bond lengths, angles, and torsions are
% specified by their numeric values in the Z-matrix data, then the
% end of the Z-matrix data is detected through two blank lines, one
% to indicate the end of the Z-matrix proper, the other to indicate
% the end of the symbolic definitions.
%
% \item A second set of symbolic definitions, separated from the
% first set through a blank line, may be included to specify
% {\bf frozen} internal
% coordinates. A blank line again defines the end of the
% list of 'frozen' internal coordinates.
%
% \item Note that atoms in the Z-matrix data may be specified via Cartesian
% coordinates expressed in units of {\AA}ngstr{\o}ms, Each line has the
% following form:
%
% \begin{verbatim}
% <atom> <x> <y> <z> [ghost]
% \end{verbatim}
%
% with {\tt atom} being the atomic name as before, x, y, z being the
% Cartesian coordinates, and {\tt ghost} used only when specifying a
% 'ghost' atom.
By default $\beta$ is interpreted as a dihedral angle (see Figure
\ref{fig:zmat1}), but if the optional last parameter (\verb+l+) is
specified with the value $\pm 1$ then $\beta$ is interpreted as
the angle $\widehat{Cik}$. The sign of \verb+l+ specifies the
direction of the bond angle relative to the plane described by the
three reference atoms. If \verb+l+ is $+1$ then the new center
(\verb+C+) is above the plane (Figures \ref{fig:zmat2}), and if
\verb+l+ is $-1$ then \verb+C+ is below the plane (Figure
\ref{fig:zmat3}).
\end{enumerate}
The Z-matrix variables {\tt blength}, {\tt alpha}, and {\tt beta} can be
entered either as numeric values or symbolic strings, or as a mixture of
the two types for a given atom. The end of the Z-matrix input for the
molecule is signaled by a blank line in the directive, and all symbolic
definitions for the variables must be supplied following that blank line.
The list of symbolic definitions is terminated with another blank line.
If there are no symbolic definitions for the Z-matrix input (that is,
all of the bond lengths, angles, and torsions are specified by their
numeric values), then the end of the Z-matrix data is signaled by entering
two blank lines in the directive; one to indicate the end of the Z-matrix
input, and the other to indicate the end of the symbolic definitions.
Following the Z-matrix center definitions described above, may be two
optional sections which are described next.
The \verb+GEOMETRY+ directive also contains a feature that allows the user
to define symbolic definitions for a set of variables that will be
qualified as '{\bf frozen}'. A {\bf frozen} atom is one that will not
have any of its geometric parameters changed in the course of an optimization
or other calculation that would change the geometry of a molecule.
The ability to actually use this feature
for atoms defined by means of the Z-matrix input does not exist in NWChem
as yet, but the input option has been included to ensure compatibility with
other codes. Only atoms that have been specified using Cartesian coordinates
can retain their geometry parameters at the specified input values. This
is accomplished by means of the optional 'active atoms' list (refer to Section
\ref{sec:activeatoms}).
If the user wishes to specify a set of {\bf frozen} variables, however,
% (we won't ask why...)
they must be specified following the blank line that signals the end of
the symbolic definitions for the Z-matrix input. The end of the input
for the {\bf frozen} variables is also signaled with a blank line.
The following example illustrates the Z-matrix input for the molecule
$CH_3CF_3$. This input uses integer numbers for the connectivities {\tt i1},
{\tt i2}, {\tt i3} \ldots, but has symbolic strings as entries for the Z-matrix
variables {\tt blength}, {\tt alpha}, and {\tt beta}. It therefore must
also include input lines defining the symbolic strings, following the blank
line that terminates the Z-matrix input. This example also includes a set
of {\bf frozen} variables, which are entered after the blank line terminating
the definitions of the symbolic strings used by the Z-matrix.
% \subsubsection*{example}
% The following example is the z-matrix for $CH_3CF_3$,
The \verb+GEOMETRY+ directive for this example is as follows;
The first must be prefaced by the directive \verb+VARIABLES+ and is
used to define initial values for the symbolic variables used within
the Z-matrix.
\begin{verbatim}
zmt
VARIABLES
<string symbol> <double value>
...
\end{verbatim}
Each line contains the name of a variable followed by its value.
Optionally, an equals sign (\verb+=+) may be included between the
symbol and its value.
The second section, \verb+CONSTANTS+, is used to define Z-matrix symbolic
variables that remain unchanged during geometry optimizations.
\begin{verbatim}
CONSTANTS
<string symbol> <double value>
...
\end{verbatim}
Each line contains the name of a variable followed by its value.
Optionally, an equals sign (\verb+=+) may be included between the
symbol and its value.
{\em Note that this functionality is not yet available and that all
Z-matrix parameters (Cartesian coordinates, numerically specified
bond-lengths and angles, and symbolic variables) will be modified
during geometry optimizations.} To freeze the Cartesian coordinates
of an atom refer to Section \ref{sec:activeatoms}).
The end of the Z-matrix input signaled by either \verb+END+ or
\verb+ZEND+.
A simple example is presented for water. All Z-matrix parameters are
specified numerically, and the symbolic tags are used to specify
connectivity information. This requires that all tags are unique, and
so different tags are used for the hydrogen atoms which might
otherwise be identical.
\begin{verbatim}
geometry
zmatrix
O
H1 O 1.08
H2 O 1.08 H1 108.0
end
end
\end{verbatim}
The following example illustrates the Z-matrix input for the molecule
$CH_3CF_3$. This input uses the numbers of centers when specifying
the connectivity information (\verb+i+, \verb+j+ and \verb+k+) and
uses symbolic variables for the Z-matrix parameters {\tt R}, {\tt
alpha}, and {\tt beta} which are defined in \verb+VARIABLES+ and
\verb+CONSTANTS+ sections.
\begin{verbatim}
geometry
zmatrix
C
C 1 CC
H 1 CH1 2 HCH1
@ -463,40 +387,75 @@ The \verb+GEOMETRY+ directive for this example is as follows;
F 2 CF1 1 CCF1 3 TOR3 0
F 2 CF2 1 CCF2 6 FCH1 1
F 2 CF3 1 CCF3 6 FCH2 -1
CC = 1.4888
CH1 = 1.0790
CH2 = 1.0789
CH3 = 1.0789
CF1 = 1.3667
CF2 = 1.3669
CF3 = 1.3669
HCH1 = 10428
HCH2 = 10474
HCH3 = 1047
CCF1 = 112.0713
CCF2 = 112.0341
CCF3 = 112.0340
TOR1 = 109.3996
TOR2 = 109.3997
TOR3 = 180.0000
FCH1 = 106.7846
FCH2 = 106.7842
zend
variables
CC 1.4888
CH1 1.0790
CH2 1.0789
CH3 1.0789
CF1 1.3667
CF2 1.3669
CF3 1.3669
constants
HCH1 10428
HCH2 10474
HCH3 1047
CCF1 112.0713
CCF2 112.0341
CCF3 112.0340
TOR1 109.3996
TOR2 109.3997
TOR3 180.0000
FCH1 106.7846
FCH2 106.7842
end
end
\end{verbatim}
% The separation of the symbolic definitions into two groups is what
% makes the internal coordinates of the second group 'frozen'.
% Removal of the blank line between the first and second set of
% symbolic definitions would remove the 'frozen' character of all the
% variables defined in the second group.
\subsubsection{Using Cartesian variables in Z-matrices}
\label{sec:zmcart}
In this example, the symbolic strings listed after the first blank line
(which signals the end of the Z-matrix input for the molecule) are defined
with the values listed ({\tt CC= 1.4888}, {\tt CH1 = 1.0790}, etc.). The
second blank line forces the symbolic definitions starting with {\tt HCH1
= 10428} to be {\bf frozen}. Currently this has no effect on the
program, but is included for compatibility with other codes.
In order to specify Cartesian coordinates within the Z-matrix it is
necessary to understand the orientation of centers specified using
internal coordinates. These are arranged as follows:
\begin{itemize}
\item The first center is placed at the origin.
\item The second center is placed along the positive z-axis.
\item The third center is placed in the z-x plane.
\end{itemize}
\subsection{{\tt ZCOORD} --- Defining internal coordinates for {\tt AUTOZ}}
\label{sec:zcoord}
The \verb+AUTOZ+ keyword forces automatic generation of internal
coordinates for use in geometry optimizations. Connectivity
is inferred by comparing inter-atomic distances with van de Waals
radii, and under some circumstances it may be necessary to augment the
automatically generated list of internal coordinates. This is
accomplished by including a {\tt ZCOORD} section within the geometry
directive.
The centers \verb+i+, \verb+j+, \verb+k+ and \verb+l+ below {\em must} be
specified using number of the centers.
\begin{verbatim}
ZCOORD
ijbond i j
ijkang i j k
ijklto i j k l
ijklop i j k l
ijklnb i j k l
END
\end{verbatim}
\begin{itemize}
\item {\tt ijbond} --- a bond between the two centers.
\item {\tt ijkang} --- a bond angle $\widehat{ijk}$.
\item {\tt ijklto} --- a torsion (or dihedral) angle. The
angle between the planes \verb+i-j-k+ and \verb+j-k-l+.
\item {\tt ijklop} --- an out-of-plane bend. The angle of center
\verb+l+ out of the plane \verb+i-j-k+.
\item {\tt ijklnb} --- a linear bend. This defines two angles
corresponding to the deformation of the centers \verb+i--j--k+
which may initially be arranged (nearly) linearly. The center
\verb+l+ must not be colinear. The two bends are constructed to be
within and perpendicular to the plane containing the atoms.
\end{itemize}

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,4 @@
\label{knownbasis}
\label{sec:knownbasis}
Basis sets were obtained (8/12/96) from the Extensible Computational
Chemistry Environment (ECCE) Basis Set Database, as developed and distributed

View file

@ -1,9 +1,7 @@
\label{sec:mcscf}
\Large
*****
It would be really nice if someone could supply a '25 words or less'
description of the Multiconfiguration SCF module right here.********
\normalsize
The NWChem MCSCF module can currently perform complete active space
SCF (CASSCF) calculations with at most 20 active orbitals and about
500 basis functions.
The Multiconfiguration SCF program is invoked in NWChem
by specifying the keyword \verb+mcscf+ on the compound directive,

View file

@ -1,13 +1,9 @@
\label{SCF}
\Large
***
It would be really nice if someone could supply a '25-words-or-less'
description of the SCF program right here.
***
\normalsize
\label{SCF}
The SCF program is invoked in NWChem
by specifying the keyword \verb+scf+ on the compound directive,
The NWChem self-consistent field (SCF) module computes closed-shell
restricted Hartree-Fock (RHF), restricted high-spin open-shell
Hartree-Fock (ROHF) and spin-unrestricted Hatree-FOck (UHF)
wavefunctions.
\begin{verbatim}
SCF
@ -52,7 +48,7 @@ total charge on the system and the nuclear charges of the
specific atoms (which are by default their atomic numbers
adjusted for the presence of ECPs, unless specified
explicitly by input on the \verb+GEOMETRY+ directive -- see Section
\ref{sec:geometry}). The total charge on the system is zero by default,
\ref{sec:geom}). The total charge on the system is zero by default,
unless specified at
some value by input on the \verb+CHARGE+ directive -- see Section
\ref{sec:toplevel}).
@ -1170,6 +1166,7 @@ Section \ref{sec:nrswitch} above.)
\subsection{Printing Information from the SCF Module}
\label{sec:scfprint}
All output from the SCF module is controlled using the \verb+PRINT+
directive described in Section \ref{sec:printcontrol}. The following

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,8 @@
\newcommand{\nwchemversion}{2.0}
\newcommand{\nwchemyear}{1996}
\input{psfig}
\begin{document}
\title{\bf\Large NWChem User Documentation, Alpha Release \nwchemversion}
@ -24,6 +26,9 @@
\section{Introduction}
\input{intro.tex}
\subsection{Functionality}
\input{functionality.tex}
\section{Top-level directives}
\input{top-level}

527
doc/user/zmat1.eps Normal file
View file

@ -0,0 +1,527 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: zmat1.fig
%%Creator: fig2dev Version 3.1 Patchlevel 1
%%CreationDate: Mon Jan 27 12:33:28 1997
%%For: d3g681@fermi (Robert J Harrison)
%%Orientation: Landscape
%%BoundingBox: 0 0 201 509
%%Pages: 0
%%BeginSetup
%%IncludeFeature: *PageSize Letter
%%EndSetup
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-9.0 -18.0 translate
90 rotate
1 -1 scale
.9 .9 scale % to make patterns same scale as in xfig
% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { % cx cy cchar rx ry string
% Loop over each character in the string
{ % cx cy cchar rx ry char
% Show the character
dup % cx cy cchar rx ry char char
PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char)
false charpath % cx cy cchar rx ry char
/clip load PATdraw
% Move past the character (charpath modified the
% current point)
currentpoint % cx cy cchar rx ry char x y
newpath
moveto % cx cy cchar rx ry char
% Reposition by cx,cy if the character in the string is cchar
3 index eq { % cx cy cchar rx ry
4 index 4 index rmoveto
} if
% Reposition all characters by rx ry
2 copy rmoveto % cx cy cchar rx ry
} forall
pop pop pop pop pop % -
currentpoint
newpath
moveto
} bind def
/PATcg {
7 dict dup begin
/lw currentlinewidth def
/lc currentlinecap def
/lj currentlinejoin def
/ml currentmiterlimit def
/ds [ currentdash ] def
/cc [ currentrgbcolor ] def
/cm matrix currentmatrix def
end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw { % proc
save exch
PATpcalc % proc nw nh px py
5 -1 roll exec % nw nh px py
newpath
PATfill % -
restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
PATDict /CurrentPattern get dup begin
setfont
% Set the coordinate system to Pattern Space
PatternGState PATsg
% Set the color for uncolored pattezns
PaintType 2 eq { PATDict /PColor get PATsc } if
% Create the string for showing
3 index string % nw nh px py str
% Loop for each of the pattern sources
0 1 Multi 1 sub { % nw nh px py str source
% Move to the starting location
3 index 3 index % nw nh px py str source px py
moveto % nw nh px py str source
% For multiple sources, set the appropriate color
Multi 1 ne { dup PC exch get PATsc } if
% Set the appropriate string for the source
0 1 7 index 1 sub { 2 index exch 2 index put } for pop
% Loop over the number of vertical cells
3 index % nw nh px py str nh
{ % nw nh px py str
currentpoint % nw nh px py str cx cy
2 index show % nw nh px py str cx cy
YStep add moveto % nw nh px py str
} repeat % nw nh px py str
} for
5 { pop } repeat
end
} bind def
% PATkshow - kshow with the current pattezn
/PATkshow { % proc string
exch bind % string proc
1 index 0 get % string proc char
% Loop over all but the last character in the string
0 1 4 index length 2 sub {
% string proc char idx
% Find the n+1th character in the string
3 index exch 1 add get % string proe char char+1
exch 2 copy % strinq proc char+1 char char+1 char
% Now show the nth character
PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr)
false charpath % string proc char+1 char char+1
/clip load PATdraw
% Move past the character (charpath modified the current point)
currentpoint newpath moveto
% Execute the user proc (should consume char and char+1)
mark 3 1 roll % string proc char+1 mark char char+1
4 index exec % string proc char+1 mark...
cleartomark % string proc char+1
} for
% Now display the last character
PATsstr dup 0 4 -1 roll put % string proc (char+1)
false charpath % string proc
/clip load PATdraw
neewath
pop pop % -
} bind def
% PATmp - the makepattern equivalent
/PATmp { % patdict patmtx PATmp patinstance
exch dup length 7 add % We will add 6 new entries plus 1 FID
dict copy % Create a new dictionary
begin
% Matrix to install when painting the pattern
TilingType PATtcalc
/PatternGState PATcg def
PatternGState /cm 3 -1 roll put
% Check for multi pattern sources (Level 1 fast color patterns)
currentdict /Multi known not { /Multi 1 def } if
% Font dictionary definitions
/FontType 3 def
% Create a dummy encoding vector
/Encoding 256 array def
3 string 0 1 255 {
Encoding exch dup 3 index cvs cvn put } for pop
/FontMatrix matrix def
/FontBBox BBox def
/BuildChar {
mark 3 1 roll % mark dict char
exch begin
Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata]
PaintType 2 eq Multi 1 ne or
{ XStep 0 FontBBox aload pop setcachedevice }
{ XStep 0 setcharwidth } ifelse
currentdict % mark [paintdata] dict
/PaintProc load % mark [paintdata] dict paintproc
end
gsave
false PATredef exec true PATredef
grestore
cleartomark % -
} bind def
currentdict
end % newdict
/foo exch % /foo newlict
definefont % newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc { % - PATpcalc nw nh px py
PATDict /CurrentPattern get begin
gsave
% Set up the coordinate system to Pattern Space
% and lock down pattern
PatternGState /cm get setmatrix
BBox aload pop pop pop translate
% Determine the bounding box of the shape
pathbbox % llx lly urx ury
grestore
% Determine (nw, nh) the # of cells to paint width and height
PatHeight div ceiling % llx lly urx qh
4 1 roll % qh llx lly urx
PatWidth div ceiling % qh llx lly qw
4 1 roll % qw qh llx lly
PatHeight div floor % qw qh llx ph
4 1 roll % ph qw qh llx
PatWidth div floor % ph qw qh pw
4 1 roll % pw ph qw qh
2 index sub cvi abs % pw ph qs qh-ph
exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph
% Determine the starting point of the pattern fill
%(px, py)
4 2 roll % nw nh pw ph
PatHeight mul % nw nh pw py
exch % nw nh py pw
PatWidth mul exch % nw nh px py
end
} bind def
% Save the original routines so that we can use them later on
/oldfill /fill load def
/oldeofill /eofill load def
/oldstroke /stroke load def
/oldshow /show load def
/oldashow /ashow load def
/oldwidthshow /widthshow load def
/oldawidthshow /awidthshow load def
/oldkshow /kshow load def
% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
/PATredef {
userdict begin
{
/fill { /clip load PATdraw newpath } bind def
/eofill { /eoclip load PATdraw newpath } bind def
/stroke { PATstroke } bind def
/show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
/ashow { 0 0 null 6 3 roll PATawidthshow }
bind def
/widthshow { 0 0 3 -1 roll PATawidthshow }
bind def
/awidthshow { PATawidthshow } bind def
/kshow { PATkshow } bind def
} {
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
} ifelse
end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if 3 1 roll
} repeat
setrgbcolor - pop
} bind def
} ifelse
/PATsc { % colorarray
aload length % c1 ... cn length
dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
} ifelse } ifelse
} bind def
/PATsg { % dict
begin
lw setlinewidth
lc setlinecap
lj setlinejoin
ml setmiterlimit
ds aload pop setdash
cc aload pop setrgbcolor
cm setmatrix
end
} bind def
/PATDict 3 dict def
/PATsp {
true PATredef
PATDict begin
/CurrentPattern exch def
% If it's an uncolored pattern, save the color
CurrentPattern /PaintType get 2 eq {
/PColor exch def
} if
/CColor [ currentrgbcolor ] def
end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
countdictstack
save
mark
{
currentpoint strokepath moveto
PATpcalc % proc nw nh px py
clip newpath PATfill
} stopped {
(*** PATstroke Warning: Path is too complex, stroking
with gray) =
cleartomark
restore
countdictstack exch sub dup 0 gt
{ { end } repeat } { pop } ifelse
gsave 0.5 setgray oldstroke grestore
} { pop restore pop } ifelse
newpath
} bind def
/PATtcalc { % modmtx tilingtype PATtcalc tilematrix
% Note: tiling types 2 and 3 are not supported
gsave
exch concat % tilingtype
matrix currentmatrix exch % cmtx tilingtype
% Tiling type 1 and 3: constant spacing
2 ne {
% Distort the pattern so that it occupies
% an integral number of device pixels
dup 4 get exch dup 5 get exch % tx ty cmtx
XStep 0 dtransform
round exch round exch % tx ty cmtx dx.x dx.y
XStep div exch XStep div exch % tx ty cmtx a b
0 YStep dtransform
round exch round exch % tx ty cmtx a b dy.x dy.y
YStep div exch YStep div exch % tx ty cmtx a b c d
7 -3 roll astore % { a b c d tx ty }
} if
grestore
} bind def
/PATusp {
false PATredef
PATDict begin
CColor PATsc
end
} bind def
% vertical sawtooth lines
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
{ clippath } bind
{ 16 32 true [ 16 0 0 -32 0 32 ]
{<400020001000080004000200010000800100020004000800
100020004000800040002000100008000400020001000080
01000200040008001000200040008000>}
imagemask } bind
] def
/PaintProc {
pop
exec fill
} def
currentdict
end
/P22 exch def
1.1111 1.1111 scale %restore scale
/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
7.500 slw
% Polyline
n 5626 2251 m 5026 1051 l 7426 451 l 8026 1651 l gs col-1 s gr
% Ellipse
n 5026 1051 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 330.07 65.07] PATmp PATsp ef gr PATusp gs col-1 s gr
% Polyline
n 5626 2251 m 6226 1051 l 8626 451 l 8026 1651 l 5626 2251 l gs col7 1.00 shd ef gr gs col-1 s gr
% Ellipse
n 452 2252 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 25.13 145.13] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 1652 1052 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 105.13 65.13] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 2852 2252 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 185.13 145.13] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 4052 1052 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 265.13 65.13] PATmp PATsp ef gr PATusp gs col-1 s gr
% Polyline
n 1652 1052 m 452 2252 l gs col-1 s gr
% Polyline
n 2852 2252 m 4052 1052 l gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
1577 902 m
gs 1 -1 sc (i) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
1577 1352 m
gs 1 -1 sc (a) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
2777 2627 m
gs 1 -1 sc (j) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
3977 902 m
gs 1 -1 sc (k) col-1 show gr
% Polyline
n 1652 1052 m 2852 2252 l gs col-1 s gr
% Arc
n 5881.00 1606.00 m 5851.00 1726.00 l 5821.00 1606.00 l 5851.50 1606.50 l 5881.00 1606.00 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 5626.00 1726.00 225.00 180.00 0.00 arc
gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
302 2627 m
gs 1 -1 sc (C) col-1 show gr
% Ellipse
n 5626 2251 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 370.07 145.07] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 8626 451 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 570.07 25.07] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 8026 1651 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 530.07 105.07] PATmp PATsp ef gr PATusp gs col-1 s gr
% Arc
n 1922.00 1472.00 m 1952.00 1352.00 l 1982.00 1472.00 l 1952.50 1472.50 l 1922.00 1472.00 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 1652.00 1352.00 300.00 180.00 0.00 arcn
gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
827 1577 m
gs 1 -1 sc (R) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
5626 1951 m
gs 1 -1 sc (b) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
4726 1051 m
gs 1 -1 sc (C) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
5476 2626 m
gs 1 -1 sc (i) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
8101 1951 m
gs 1 -1 sc (j) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
8776 301 m
gs 1 -1 sc (k) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
2250 3450 m
gs 1 -1 sc (Input line: C i R j alpha k beta ) col-1 show gr
$F2psEnd
restore

43
doc/user/zmat1.fig Normal file
View file

@ -0,0 +1,43 @@
#FIG 3.1
Landscape
Center
Inches
1200 2
6 300 675 4200 2700
5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 1652.000 1352.000 1352 1352 1652 1652 1952 1352
1 1 1.00 60.00 120.00
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 452 2252 75 75 452 2252 452 2327
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 1652 1052 75 75 1652 1052 1652 1127
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 2852 2252 75 75 2852 2252 2852 2327
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 4052 1052 75 75 4052 1052 4052 1127
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
1652 1052 452 2252
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
2852 2252 4052 1052
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
1652 1052 2852 2252
4 0 -1 0 0 32 18 0.0000000 4 120 165 1577 1352 a\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 302 2627 C\001
4 0 -1 0 0 0 18 0.0000000 4 180 75 1577 902 i\001
4 0 -1 0 0 0 18 0.0000000 4 240 75 2777 2627 j\001
4 0 -1 0 0 0 18 0.0000000 4 180 135 3977 902 k\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 827 1577 R\001
-6
6 4724 74 8924 2699
5 1 0 1 -1 7 0 0 -1 0.000 0 0 1 0 5626.000 1726.000 5401 1726 5626 1501 5851 1726
1 1 1.00 60.00 120.00
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 5026 1051 75 75 5026 1051 5101 1126
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 5626 2251 75 75 5626 2251 5701 2326
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 8626 451 75 75 8626 451 8701 526
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 8026 1651 75 75 8026 1651 8101 1726
2 1 0 1 -1 7 1 0 20 0.000 0 0 7 0 0 5
5626 2251 6226 1051 8626 451 8026 1651 5626 2251
2 1 0 1 -1 0 10 0 -1 0.000 0 0 -1 0 0 4
5626 2251 5026 1051 7426 451 8026 1651
4 0 -1 0 0 32 18 0.0000000 4 240 150 5626 1951 b\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 4726 1051 C\001
4 0 -1 0 0 0 18 0.0000000 4 180 75 5476 2626 i\001
4 0 -1 0 0 0 18 0.0000000 4 240 75 8101 1951 j\001
4 0 -1 0 0 0 18 0.0000000 4 180 135 8776 301 k\001
-6
4 0 -1 0 0 0 18 0.0000000 4 240 4290 2250 3450 Input line: C i R j alpha k beta \001

533
doc/user/zmat2.eps Normal file
View file

@ -0,0 +1,533 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: zmat2.fig
%%Creator: fig2dev Version 3.1 Patchlevel 1
%%CreationDate: Mon Jan 27 12:33:12 1997
%%For: d3g681@fermi (Robert J Harrison)
%%Orientation: Landscape
%%BoundingBox: 0 0 266 485
%%Pages: 0
%%BeginSetup
%%IncludeFeature: *PageSize Letter
%%EndSetup
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-45.0 -118.0 translate
90 rotate
1 -1 scale
.9 .9 scale % to make patterns same scale as in xfig
% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { % cx cy cchar rx ry string
% Loop over each character in the string
{ % cx cy cchar rx ry char
% Show the character
dup % cx cy cchar rx ry char char
PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char)
false charpath % cx cy cchar rx ry char
/clip load PATdraw
% Move past the character (charpath modified the
% current point)
currentpoint % cx cy cchar rx ry char x y
newpath
moveto % cx cy cchar rx ry char
% Reposition by cx,cy if the character in the string is cchar
3 index eq { % cx cy cchar rx ry
4 index 4 index rmoveto
} if
% Reposition all characters by rx ry
2 copy rmoveto % cx cy cchar rx ry
} forall
pop pop pop pop pop % -
currentpoint
newpath
moveto
} bind def
/PATcg {
7 dict dup begin
/lw currentlinewidth def
/lc currentlinecap def
/lj currentlinejoin def
/ml currentmiterlimit def
/ds [ currentdash ] def
/cc [ currentrgbcolor ] def
/cm matrix currentmatrix def
end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw { % proc
save exch
PATpcalc % proc nw nh px py
5 -1 roll exec % nw nh px py
newpath
PATfill % -
restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
PATDict /CurrentPattern get dup begin
setfont
% Set the coordinate system to Pattern Space
PatternGState PATsg
% Set the color for uncolored pattezns
PaintType 2 eq { PATDict /PColor get PATsc } if
% Create the string for showing
3 index string % nw nh px py str
% Loop for each of the pattern sources
0 1 Multi 1 sub { % nw nh px py str source
% Move to the starting location
3 index 3 index % nw nh px py str source px py
moveto % nw nh px py str source
% For multiple sources, set the appropriate color
Multi 1 ne { dup PC exch get PATsc } if
% Set the appropriate string for the source
0 1 7 index 1 sub { 2 index exch 2 index put } for pop
% Loop over the number of vertical cells
3 index % nw nh px py str nh
{ % nw nh px py str
currentpoint % nw nh px py str cx cy
2 index show % nw nh px py str cx cy
YStep add moveto % nw nh px py str
} repeat % nw nh px py str
} for
5 { pop } repeat
end
} bind def
% PATkshow - kshow with the current pattezn
/PATkshow { % proc string
exch bind % string proc
1 index 0 get % string proc char
% Loop over all but the last character in the string
0 1 4 index length 2 sub {
% string proc char idx
% Find the n+1th character in the string
3 index exch 1 add get % string proe char char+1
exch 2 copy % strinq proc char+1 char char+1 char
% Now show the nth character
PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr)
false charpath % string proc char+1 char char+1
/clip load PATdraw
% Move past the character (charpath modified the current point)
currentpoint newpath moveto
% Execute the user proc (should consume char and char+1)
mark 3 1 roll % string proc char+1 mark char char+1
4 index exec % string proc char+1 mark...
cleartomark % string proc char+1
} for
% Now display the last character
PATsstr dup 0 4 -1 roll put % string proc (char+1)
false charpath % string proc
/clip load PATdraw
neewath
pop pop % -
} bind def
% PATmp - the makepattern equivalent
/PATmp { % patdict patmtx PATmp patinstance
exch dup length 7 add % We will add 6 new entries plus 1 FID
dict copy % Create a new dictionary
begin
% Matrix to install when painting the pattern
TilingType PATtcalc
/PatternGState PATcg def
PatternGState /cm 3 -1 roll put
% Check for multi pattern sources (Level 1 fast color patterns)
currentdict /Multi known not { /Multi 1 def } if
% Font dictionary definitions
/FontType 3 def
% Create a dummy encoding vector
/Encoding 256 array def
3 string 0 1 255 {
Encoding exch dup 3 index cvs cvn put } for pop
/FontMatrix matrix def
/FontBBox BBox def
/BuildChar {
mark 3 1 roll % mark dict char
exch begin
Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata]
PaintType 2 eq Multi 1 ne or
{ XStep 0 FontBBox aload pop setcachedevice }
{ XStep 0 setcharwidth } ifelse
currentdict % mark [paintdata] dict
/PaintProc load % mark [paintdata] dict paintproc
end
gsave
false PATredef exec true PATredef
grestore
cleartomark % -
} bind def
currentdict
end % newdict
/foo exch % /foo newlict
definefont % newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc { % - PATpcalc nw nh px py
PATDict /CurrentPattern get begin
gsave
% Set up the coordinate system to Pattern Space
% and lock down pattern
PatternGState /cm get setmatrix
BBox aload pop pop pop translate
% Determine the bounding box of the shape
pathbbox % llx lly urx ury
grestore
% Determine (nw, nh) the # of cells to paint width and height
PatHeight div ceiling % llx lly urx qh
4 1 roll % qh llx lly urx
PatWidth div ceiling % qh llx lly qw
4 1 roll % qw qh llx lly
PatHeight div floor % qw qh llx ph
4 1 roll % ph qw qh llx
PatWidth div floor % ph qw qh pw
4 1 roll % pw ph qw qh
2 index sub cvi abs % pw ph qs qh-ph
exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph
% Determine the starting point of the pattern fill
%(px, py)
4 2 roll % nw nh pw ph
PatHeight mul % nw nh pw py
exch % nw nh py pw
PatWidth mul exch % nw nh px py
end
} bind def
% Save the original routines so that we can use them later on
/oldfill /fill load def
/oldeofill /eofill load def
/oldstroke /stroke load def
/oldshow /show load def
/oldashow /ashow load def
/oldwidthshow /widthshow load def
/oldawidthshow /awidthshow load def
/oldkshow /kshow load def
% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
/PATredef {
userdict begin
{
/fill { /clip load PATdraw newpath } bind def
/eofill { /eoclip load PATdraw newpath } bind def
/stroke { PATstroke } bind def
/show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
/ashow { 0 0 null 6 3 roll PATawidthshow }
bind def
/widthshow { 0 0 3 -1 roll PATawidthshow }
bind def
/awidthshow { PATawidthshow } bind def
/kshow { PATkshow } bind def
} {
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
} ifelse
end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if 3 1 roll
} repeat
setrgbcolor - pop
} bind def
} ifelse
/PATsc { % colorarray
aload length % c1 ... cn length
dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
} ifelse } ifelse
} bind def
/PATsg { % dict
begin
lw setlinewidth
lc setlinecap
lj setlinejoin
ml setmiterlimit
ds aload pop setdash
cc aload pop setrgbcolor
cm setmatrix
end
} bind def
/PATDict 3 dict def
/PATsp {
true PATredef
PATDict begin
/CurrentPattern exch def
% If it's an uncolored pattern, save the color
CurrentPattern /PaintType get 2 eq {
/PColor exch def
} if
/CColor [ currentrgbcolor ] def
end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
countdictstack
save
mark
{
currentpoint strokepath moveto
PATpcalc % proc nw nh px py
clip newpath PATfill
} stopped {
(*** PATstroke Warning: Path is too complex, stroking
with gray) =
cleartomark
restore
countdictstack exch sub dup 0 gt
{ { end } repeat } { pop } ifelse
gsave 0.5 setgray oldstroke grestore
} { pop restore pop } ifelse
newpath
} bind def
/PATtcalc { % modmtx tilingtype PATtcalc tilematrix
% Note: tiling types 2 and 3 are not supported
gsave
exch concat % tilingtype
matrix currentmatrix exch % cmtx tilingtype
% Tiling type 1 and 3: constant spacing
2 ne {
% Distort the pattern so that it occupies
% an integral number of device pixels
dup 4 get exch dup 5 get exch % tx ty cmtx
XStep 0 dtransform
round exch round exch % tx ty cmtx dx.x dx.y
XStep div exch XStep div exch % tx ty cmtx a b
0 YStep dtransform
round exch round exch % tx ty cmtx a b dy.x dy.y
YStep div exch YStep div exch % tx ty cmtx a b c d
7 -3 roll astore % { a b c d tx ty }
} if
grestore
} bind def
/PATusp {
false PATredef
PATDict begin
CColor PATsc
end
} bind def
% vertical sawtooth lines
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
{ clippath } bind
{ 16 32 true [ 16 0 0 -32 0 32 ]
{<400020001000080004000200010000800100020004000800
100020004000800040002000100008000400020001000080
01000200040008001000200040008000>}
imagemask } bind
] def
/PaintProc {
pop
exec fill
} def
currentdict
end
/P22 exch def
1.1111 1.1111 scale %restore scale
/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
7.500 slw
% Ellipse
n 8946 2749 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 591.40 178.27] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 8250 2160 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 545.00 139.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 7035 2745 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 464.00 178.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 6435 1560 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 424.00 99.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Polyline
n 3603 2433 m 2115 3300 l gs col-1 s gr
% Ellipse
n 3603 2433 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 235.20 157.20] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 3600 975 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 235.00 60.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 2111 3322 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 135.73 216.47] PATmp PATsp ef gr PATusp gs col-1 s gr
% Polyline
n 4803 3633 m 4803 3633 l gs col-1 s gr
% Polyline
n 3603 2433 m 4803 3633 l gs col-1 s gr
% Polyline
n 3600 2370 m 3600 945 l gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
3750 2325 m
gs 1 -1 sc (i) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
3375 900 m
gs 1 -1 sc (k) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
3375 2400 m
gs 1 -1 sc (b) col-1 show gr
% Ellipse
n 4803 3633 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 315.20 237.20] PATmp PATsp ef gr PATusp gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
1983 3708 m
gs 1 -1 sc (C) col-1 show gr
% Arc
n 7391.98 2424.01 m 7470.00 2520.00 l 7355.99 2472.02 l 7374.49 2448.52 l 7391.98 2424.01 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 7019.66 3120.68 750.75 -101.50 -53.14 arc
gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
4728 4008 m
gs 1 -1 sc (j) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
3528 2733 m
gs 1 -1 sc (a) col-1 show gr
% Arc
n 3866.17 2878.78 m 3975.00 2820.00 l 3906.63 2923.08 l 3886.90 2901.43 l 3866.17 2878.78 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 3480.82 1781.90 m 3600.00 1815.00 l 3479.26 1841.88 l 3480.54 1812.39 l 3480.82 1781.90 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 3585.00 2393.06 578.25 -88.51 47.59 arcn
gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
2643 2823 m
gs 1 -1 sc (R) col-1 show gr
% Polyline
n 7035 2760 m 8235 2160 l 10035 2160 l 8910 2760 l 7035 2760 l gs col-1 s gr
% Polyline
n 7035 2760 m 6435 1560 l gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
8880 3075 m
gs 1 -1 sc (j) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
8250 1980 m
gs 1 -1 sc (k) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
6270 1470 m
gs 1 -1 sc (C) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
7005 3075 m
gs 1 -1 sc (i) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
7065 2625 m
gs 1 -1 sc (b) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
3195 5130 m
gs 1 -1 sc (Input line: C i R j alpha k beta +1) col-1 show gr
$F2psEnd
restore

47
doc/user/zmat2.fig Normal file
View file

@ -0,0 +1,47 @@
#FIG 3.1
Landscape
Center
Inches
1200 2
6 1983 720 4878 4068
5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 1 3585.000 2393.060 3600 1815 3195 2820 3975 2820
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 4803 3633 75 75 4803 3633 4803 3708
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 3603 2433 75 75 3603 2433 3603 2508
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 3600 975 75 75 3600 975 3600 1050
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 2111 3322 75 75 2111 3322 2111 3397
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1
4803 3633
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
3603 2433 4803 3633
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
3600 2370 3600 945
2 1 0 1 -1 7 1 0 -1 0.000 0 0 -1 0 0 2
3603 2433 2115 3300
4 0 -1 0 0 32 18 0.0000000 4 120 165 3528 2733 a\001
4 0 -1 0 0 0 18 0.0000000 4 240 75 4728 4008 j\001
4 0 -1 0 0 0 18 0.0000000 4 180 75 3750 2325 i\001
4 0 -1 0 0 0 18 0.0000000 4 180 135 3375 900 k\001
4 0 -1 0 0 32 18 0.0000000 4 240 150 3375 2400 b\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 2643 2823 R\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 1983 3708 C\001
-6
6 6270 1290 10035 3135
5 1 0 1 -1 7 0 0 -1 0.000 0 0 1 0 7019.659 3120.682 6870 2385 7230 2400 7470 2520
1 1 1.00 60.00 120.00
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 8250 2160 75 75 8250 2160 8325 2235
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 8946 2749 75 75 8946 2749 9021 2824
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 6435 1560 75 75 6435 1560 6510 1635
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 7035 2745 75 75 7035 2745 7110 2820
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
7035 2760 8235 2160 10035 2160 8910 2760 7035 2760
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
7035 2760 6435 1560
4 0 -1 0 0 0 18 0.0000000 4 240 75 8880 3075 j\001
4 0 -1 0 0 0 18 0.0000000 4 180 135 8250 1980 k\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 6270 1470 C\001
4 0 -1 0 0 0 18 0.0000000 4 180 75 7005 3075 i\001
4 0 -1 0 0 32 18 0.0000000 4 240 150 7065 2625 b\001
-6
4 0 -1 0 0 0 18 0.0000000 4 240 4575 3195 5130 Input line: C i R j alpha k beta +1\001

533
doc/user/zmat3.eps Normal file
View file

@ -0,0 +1,533 @@
%!PS-Adobe-2.0 EPSF-2.0
%%Title: zmat3.fig
%%Creator: fig2dev Version 3.1 Patchlevel 1
%%CreationDate: Mon Jan 27 12:32:13 1997
%%For: d3g681@fermi (Robert J Harrison)
%%Orientation: Landscape
%%BoundingBox: 0 0 266 482
%%Pages: 0
%%BeginSetup
%%IncludeFeature: *PageSize Letter
%%EndSetup
%%EndComments
/$F2psDict 200 dict def
$F2psDict begin
$F2psDict /mtrx matrix put
/col-1 {} def
/col0 {0.000 0.000 0.000 srgb} bind def
/col1 {0.000 0.000 1.000 srgb} bind def
/col2 {0.000 1.000 0.000 srgb} bind def
/col3 {0.000 1.000 1.000 srgb} bind def
/col4 {1.000 0.000 0.000 srgb} bind def
/col5 {1.000 0.000 1.000 srgb} bind def
/col6 {1.000 1.000 0.000 srgb} bind def
/col7 {1.000 1.000 1.000 srgb} bind def
/col8 {0.000 0.000 0.560 srgb} bind def
/col9 {0.000 0.000 0.690 srgb} bind def
/col10 {0.000 0.000 0.820 srgb} bind def
/col11 {0.530 0.810 1.000 srgb} bind def
/col12 {0.000 0.560 0.000 srgb} bind def
/col13 {0.000 0.690 0.000 srgb} bind def
/col14 {0.000 0.820 0.000 srgb} bind def
/col15 {0.000 0.560 0.560 srgb} bind def
/col16 {0.000 0.690 0.690 srgb} bind def
/col17 {0.000 0.820 0.820 srgb} bind def
/col18 {0.560 0.000 0.000 srgb} bind def
/col19 {0.690 0.000 0.000 srgb} bind def
/col20 {0.820 0.000 0.000 srgb} bind def
/col21 {0.560 0.000 0.560 srgb} bind def
/col22 {0.690 0.000 0.690 srgb} bind def
/col23 {0.820 0.000 0.820 srgb} bind def
/col24 {0.500 0.190 0.000 srgb} bind def
/col25 {0.630 0.250 0.000 srgb} bind def
/col26 {0.750 0.380 0.000 srgb} bind def
/col27 {1.000 0.500 0.500 srgb} bind def
/col28 {1.000 0.630 0.630 srgb} bind def
/col29 {1.000 0.750 0.750 srgb} bind def
/col30 {1.000 0.880 0.880 srgb} bind def
/col31 {1.000 0.840 0.000 srgb} bind def
end
save
-45.0 -118.0 translate
90 rotate
1 -1 scale
.9 .9 scale % to make patterns same scale as in xfig
% This junk string is used by the show operators
/PATsstr 1 string def
/PATawidthshow { % cx cy cchar rx ry string
% Loop over each character in the string
{ % cx cy cchar rx ry char
% Show the character
dup % cx cy cchar rx ry char char
PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char)
false charpath % cx cy cchar rx ry char
/clip load PATdraw
% Move past the character (charpath modified the
% current point)
currentpoint % cx cy cchar rx ry char x y
newpath
moveto % cx cy cchar rx ry char
% Reposition by cx,cy if the character in the string is cchar
3 index eq { % cx cy cchar rx ry
4 index 4 index rmoveto
} if
% Reposition all characters by rx ry
2 copy rmoveto % cx cy cchar rx ry
} forall
pop pop pop pop pop % -
currentpoint
newpath
moveto
} bind def
/PATcg {
7 dict dup begin
/lw currentlinewidth def
/lc currentlinecap def
/lj currentlinejoin def
/ml currentmiterlimit def
/ds [ currentdash ] def
/cc [ currentrgbcolor ] def
/cm matrix currentmatrix def
end
} bind def
% PATdraw - calculates the boundaries of the object and
% fills it with the current pattern
/PATdraw { % proc
save exch
PATpcalc % proc nw nh px py
5 -1 roll exec % nw nh px py
newpath
PATfill % -
restore
} bind def
% PATfill - performs the tiling for the shape
/PATfill { % nw nh px py PATfill -
PATDict /CurrentPattern get dup begin
setfont
% Set the coordinate system to Pattern Space
PatternGState PATsg
% Set the color for uncolored pattezns
PaintType 2 eq { PATDict /PColor get PATsc } if
% Create the string for showing
3 index string % nw nh px py str
% Loop for each of the pattern sources
0 1 Multi 1 sub { % nw nh px py str source
% Move to the starting location
3 index 3 index % nw nh px py str source px py
moveto % nw nh px py str source
% For multiple sources, set the appropriate color
Multi 1 ne { dup PC exch get PATsc } if
% Set the appropriate string for the source
0 1 7 index 1 sub { 2 index exch 2 index put } for pop
% Loop over the number of vertical cells
3 index % nw nh px py str nh
{ % nw nh px py str
currentpoint % nw nh px py str cx cy
2 index show % nw nh px py str cx cy
YStep add moveto % nw nh px py str
} repeat % nw nh px py str
} for
5 { pop } repeat
end
} bind def
% PATkshow - kshow with the current pattezn
/PATkshow { % proc string
exch bind % string proc
1 index 0 get % string proc char
% Loop over all but the last character in the string
0 1 4 index length 2 sub {
% string proc char idx
% Find the n+1th character in the string
3 index exch 1 add get % string proe char char+1
exch 2 copy % strinq proc char+1 char char+1 char
% Now show the nth character
PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr)
false charpath % string proc char+1 char char+1
/clip load PATdraw
% Move past the character (charpath modified the current point)
currentpoint newpath moveto
% Execute the user proc (should consume char and char+1)
mark 3 1 roll % string proc char+1 mark char char+1
4 index exec % string proc char+1 mark...
cleartomark % string proc char+1
} for
% Now display the last character
PATsstr dup 0 4 -1 roll put % string proc (char+1)
false charpath % string proc
/clip load PATdraw
neewath
pop pop % -
} bind def
% PATmp - the makepattern equivalent
/PATmp { % patdict patmtx PATmp patinstance
exch dup length 7 add % We will add 6 new entries plus 1 FID
dict copy % Create a new dictionary
begin
% Matrix to install when painting the pattern
TilingType PATtcalc
/PatternGState PATcg def
PatternGState /cm 3 -1 roll put
% Check for multi pattern sources (Level 1 fast color patterns)
currentdict /Multi known not { /Multi 1 def } if
% Font dictionary definitions
/FontType 3 def
% Create a dummy encoding vector
/Encoding 256 array def
3 string 0 1 255 {
Encoding exch dup 3 index cvs cvn put } for pop
/FontMatrix matrix def
/FontBBox BBox def
/BuildChar {
mark 3 1 roll % mark dict char
exch begin
Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata]
PaintType 2 eq Multi 1 ne or
{ XStep 0 FontBBox aload pop setcachedevice }
{ XStep 0 setcharwidth } ifelse
currentdict % mark [paintdata] dict
/PaintProc load % mark [paintdata] dict paintproc
end
gsave
false PATredef exec true PATredef
grestore
cleartomark % -
} bind def
currentdict
end % newdict
/foo exch % /foo newlict
definefont % newfont
} bind def
% PATpcalc - calculates the starting point and width/height
% of the tile fill for the shape
/PATpcalc { % - PATpcalc nw nh px py
PATDict /CurrentPattern get begin
gsave
% Set up the coordinate system to Pattern Space
% and lock down pattern
PatternGState /cm get setmatrix
BBox aload pop pop pop translate
% Determine the bounding box of the shape
pathbbox % llx lly urx ury
grestore
% Determine (nw, nh) the # of cells to paint width and height
PatHeight div ceiling % llx lly urx qh
4 1 roll % qh llx lly urx
PatWidth div ceiling % qh llx lly qw
4 1 roll % qw qh llx lly
PatHeight div floor % qw qh llx ph
4 1 roll % ph qw qh llx
PatWidth div floor % ph qw qh pw
4 1 roll % pw ph qw qh
2 index sub cvi abs % pw ph qs qh-ph
exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph
% Determine the starting point of the pattern fill
%(px, py)
4 2 roll % nw nh pw ph
PatHeight mul % nw nh pw py
exch % nw nh py pw
PatWidth mul exch % nw nh px py
end
} bind def
% Save the original routines so that we can use them later on
/oldfill /fill load def
/oldeofill /eofill load def
/oldstroke /stroke load def
/oldshow /show load def
/oldashow /ashow load def
/oldwidthshow /widthshow load def
/oldawidthshow /awidthshow load def
/oldkshow /kshow load def
% These defs are necessary so that subsequent procs don't bind in
% the originals
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
/PATredef {
userdict begin
{
/fill { /clip load PATdraw newpath } bind def
/eofill { /eoclip load PATdraw newpath } bind def
/stroke { PATstroke } bind def
/show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
/ashow { 0 0 null 6 3 roll PATawidthshow }
bind def
/widthshow { 0 0 3 -1 roll PATawidthshow }
bind def
/awidthshow { PATawidthshow } bind def
/kshow { PATkshow } bind def
} {
/fill { oldfill } bind def
/eofill { oldeofill } bind def
/stroke { oldstroke } bind def
/show { oldshow } bind def
/ashow { oldashow } bind def
/widthshow { oldwidthshow } bind def
/awidthshow { oldawidthshow } bind def
/kshow { oldkshow } bind def
} ifelse
end
} bind def
false PATredef
% Conditionally define setcmykcolor if not available
/setcmykcolor where { pop } {
/setcmykcolor {
1 sub 4 1 roll
3 {
3 index add neg dup 0 lt { pop 0 } if 3 1 roll
} repeat
setrgbcolor - pop
} bind def
} ifelse
/PATsc { % colorarray
aload length % c1 ... cn length
dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
} ifelse } ifelse
} bind def
/PATsg { % dict
begin
lw setlinewidth
lc setlinecap
lj setlinejoin
ml setmiterlimit
ds aload pop setdash
cc aload pop setrgbcolor
cm setmatrix
end
} bind def
/PATDict 3 dict def
/PATsp {
true PATredef
PATDict begin
/CurrentPattern exch def
% If it's an uncolored pattern, save the color
CurrentPattern /PaintType get 2 eq {
/PColor exch def
} if
/CColor [ currentrgbcolor ] def
end
} bind def
% PATstroke - stroke with the current pattern
/PATstroke {
countdictstack
save
mark
{
currentpoint strokepath moveto
PATpcalc % proc nw nh px py
clip newpath PATfill
} stopped {
(*** PATstroke Warning: Path is too complex, stroking
with gray) =
cleartomark
restore
countdictstack exch sub dup 0 gt
{ { end } repeat } { pop } ifelse
gsave 0.5 setgray oldstroke grestore
} { pop restore pop } ifelse
newpath
} bind def
/PATtcalc { % modmtx tilingtype PATtcalc tilematrix
% Note: tiling types 2 and 3 are not supported
gsave
exch concat % tilingtype
matrix currentmatrix exch % cmtx tilingtype
% Tiling type 1 and 3: constant spacing
2 ne {
% Distort the pattern so that it occupies
% an integral number of device pixels
dup 4 get exch dup 5 get exch % tx ty cmtx
XStep 0 dtransform
round exch round exch % tx ty cmtx dx.x dx.y
XStep div exch XStep div exch % tx ty cmtx a b
0 YStep dtransform
round exch round exch % tx ty cmtx a b dy.x dy.y
YStep div exch YStep div exch % tx ty cmtx a b c d
7 -3 roll astore % { a b c d tx ty }
} if
grestore
} bind def
/PATusp {
false PATredef
PATDict begin
CColor PATsc
end
} bind def
% vertical sawtooth lines
11 dict begin
/PaintType 1 def
/PatternType 1 def
/TilingType 1 def
/BBox [0 0 1 1] def
/XStep 1 def
/YStep 1 def
/PatWidth 1 def
/PatHeight 1 def
/Multi 2 def
/PaintData [
{ clippath } bind
{ 16 32 true [ 16 0 0 -32 0 32 ]
{<400020001000080004000200010000800100020004000800
100020004000800040002000100008000400020001000080
01000200040008001000200040008000>}
imagemask } bind
] def
/PaintProc {
pop
exec fill
} def
currentdict
end
/P22 exch def
1.1111 1.1111 scale %restore scale
/clp {closepath} bind def
/ef {eofill} bind def
/gr {grestore} bind def
/gs {gsave} bind def
/l {lineto} bind def
/m {moveto} bind def
/n {newpath} bind def
/s {stroke} bind def
/slc {setlinecap} bind def
/slj {setlinejoin} bind def
/slw {setlinewidth} bind def
/srgb {setrgbcolor} bind def
/rot {rotate} bind def
/sc {scale} bind def
/tr {translate} bind def
/tnt {dup dup currentrgbcolor
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add
4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
bind def
/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
4 -2 roll mul srgb} bind def
/DrawEllipse {
/endangle exch def
/startangle exch def
/yrad exch def
/xrad exch def
/y exch def
/x exch def
/savematrix mtrx currentmatrix def
x y tr xrad yrad sc 0 0 1 startangle endangle arc
closepath
savematrix setmatrix
} def
/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
/$F2psEnd {$F2psEnteredState restore end} def
%%EndProlog
$F2psBegin
10 setmiterlimit
0.06000 0.06000 sc
7.500 slw
% Ellipse
n 8886 2104 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 587.40 135.27] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 8190 1515 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 541.00 96.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 6135 3345 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 404.00 218.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 6975 2100 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 460.00 135.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Polyline
n 3603 2433 m 2115 3300 l gs col-1 s gr
% Ellipse
n 3603 2433 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 235.20 157.20] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 3600 975 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 235.00 60.00] PATmp PATsp ef gr PATusp gs col-1 s gr
% Ellipse
n 2111 3322 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 135.73 216.47] PATmp PATsp ef gr PATusp gs col-1 s gr
% Polyline
n 4803 3633 m 4803 3633 l gs col-1 s gr
% Polyline
n 3603 2433 m 4803 3633 l gs col-1 s gr
% Polyline
n 3600 2370 m 3600 945 l gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
3750 2325 m
gs 1 -1 sc (i) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
3375 900 m
gs 1 -1 sc (k) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
3375 2400 m
gs 1 -1 sc (b) col-1 show gr
% Ellipse
n 4803 3633 75 75 0 360 DrawEllipse gs /PC [[0.00 0.00 0.00] [0.00 0.00 0.00]] def
15.00 15.00 sc P22 [8 0 0 -16 315.20 237.20] PATmp PATsp ef gr PATusp gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
1983 3708 m
gs 1 -1 sc (C) col-1 show gr
% Arc
n 7428.80 1995.89 m 7455.00 1875.00 l 7488.77 1993.99 l 7459.29 1995.44 l 7428.80 1995.89 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 6863.09 1893.70 592.20 101.01 -1.81 arcn
gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
4728 4008 m
gs 1 -1 sc (j) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
3528 2733 m
gs 1 -1 sc (a) col-1 show gr
% Arc
n 3866.17 2878.78 m 3975.00 2820.00 l 3906.63 2923.08 l 3886.90 2901.43 l 3866.17 2878.78 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 3480.82 1781.90 m 3600.00 1815.00 l 3479.26 1841.88 l 3480.54 1812.39 l 3480.82 1781.90 l clp gs 0.00 setgray ef gr gs col-1 s gr
n 3585.00 2393.06 578.25 -88.51 47.59 arcn
gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
2643 2823 m
gs 1 -1 sc (R) col-1 show gr
% Polyline
n 6975 2115 m 8175 1515 l 9975 1515 l 8850 2115 l 6975 2115 l gs col-1 s gr
% Polyline
n 6975 2115 m 6135 3330 l gs col-1 s gr
/Times-Roman findfont 270.00 scalefont setfont
8820 2430 m
gs 1 -1 sc (j) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
8190 1335 m
gs 1 -1 sc (k) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
6795 1950 m
gs 1 -1 sc (i) col-1 show gr
/Symbol findfont 270.00 scalefont setfont
7035 2400 m
gs 1 -1 sc (b) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
5910 3225 m
gs 1 -1 sc (C) col-1 show gr
/Times-Roman findfont 270.00 scalefont setfont
3195 5130 m
gs 1 -1 sc (Input line: C i R j alpha k beta -1) col-1 show gr
$F2psEnd
restore

47
doc/user/zmat3.fig Normal file
View file

@ -0,0 +1,47 @@
#FIG 3.1
Landscape
Center
Inches
1200 2
6 1983 720 4878 4068
5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 1 3585.000 2393.060 3600 1815 3195 2820 3975 2820
1 1 1.00 60.00 120.00
1 1 1.00 60.00 120.00
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 4803 3633 75 75 4803 3633 4803 3708
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 3603 2433 75 75 3603 2433 3603 2508
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 3600 975 75 75 3600 975 3600 1050
1 3 0 1 -1 0 0 0 62 0.0000000 1 0.000 2111 3322 75 75 2111 3322 2111 3397
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 1
4803 3633
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
3603 2433 4803 3633
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
3600 2370 3600 945
2 1 0 1 -1 7 1 0 -1 0.000 0 0 -1 0 0 2
3603 2433 2115 3300
4 0 -1 0 0 32 18 0.0000000 4 120 165 3528 2733 a\001
4 0 -1 0 0 0 18 0.0000000 4 240 75 4728 4008 j\001
4 0 -1 0 0 0 18 0.0000000 4 180 75 3750 2325 i\001
4 0 -1 0 0 0 18 0.0000000 4 180 135 3375 900 k\001
4 0 -1 0 0 32 18 0.0000000 4 240 150 3375 2400 b\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 2643 2823 R\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 1983 3708 C\001
-6
6 5910 1155 9975 3420
5 1 0 1 -1 7 0 0 -1 0.000 0 1 1 0 6863.093 1893.697 6750 2475 7215 2370 7455 1875
1 1 1.00 60.00 120.00
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 8190 1515 75 75 8190 1515 8265 1590
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 8886 2104 75 75 8886 2104 8961 2179
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 6975 2100 75 75 6975 2100 7050 2175
1 3 0 1 -1 0 2 0 62 0.0000000 1 0.000 6135 3345 75 75 6135 3345 6210 3420
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 5
6975 2115 8175 1515 9975 1515 8850 2115 6975 2115
2 1 0 1 -1 7 0 0 -1 0.000 0 0 -1 0 0 2
6975 2115 6135 3330
4 0 -1 0 0 0 18 0.0000000 4 240 75 8820 2430 j\001
4 0 -1 0 0 0 18 0.0000000 4 180 135 8190 1335 k\001
4 0 -1 0 0 0 18 0.0000000 4 180 75 6795 1950 i\001
4 0 -1 0 0 32 18 0.0000000 4 240 150 7035 2400 b\001
4 0 -1 0 0 0 18 0.0000000 4 180 180 5910 3225 C\001
-6
4 0 -1 0 0 0 18 0.0000000 4 240 4575 3195 5130 Input line: C i R j alpha k beta -1\001