(****************************************************************)
(* *)
(* Instruction Manual *)
(* RSperturb v. 1.5 & DiatomicVibRot v. 1.2 *)
(* Written by John M. Herbert *)
(* Last Modified 1/27/98 *)
(* *)
(****************************************************************)
This text file describes use of the Mathematica packages RSperturb
version 1.5 and DiatomicVibRot version 1.2. Much of this
information is contained in the text of these packages themselves
in the form of comments and "::usage" statements; however, these
instructions contain specific examples of the implementation of
these programs.
This discussion focuses primarily on how RSperturb is used in
conjunction with DiatomicVibRot to analyze the vibrational-
rotational structure of diatomic molecules. Realize, however,
that RSperturb can also be used to derive general Rayleigh-
Schroedinger perturbation formulae that are not application-
specific.
A cursory familiarity with Mathematica is assumed in these
instructions. Note Mathematica packages are highly portable from
one version of Mathematica to the next. In particular, these
programs have been implemented successfully using Mathematica
v. 2.2 for Unix, Mathematica v. 2.2 for Microsoft Windows 3.x,
and Mathematica v. 3.0 for Microsoft Windows 95. All files have
been prepared in a Microsoft Windows/MS-DOS environment, so
please correct line-delimiting characters accordingly.
At the beginning of each Mathematica session, two global
variables must be assigned values. The variable "HighestOrder"
defines the highest order to which perturbation theory will be
applied, while the variable "HighestState" defines the numerical
value of the highest quantum state for which energy formulae will
be derived. (For instance, when DiatomicVibRot is used with
RSperturb, then HighestState corresponds to the largest value of
the quantum number v for which formulae will be derived.)
Specifying larger values for HighestOrder and HighestState than
are actually required will not adversely affect the program's
output but may increase derivation times. The values of
HighestOrder and HighestState may be changed at any time during
a Mathematica session.
To load the packages RSperturb and DiatomicVibRot, simply copy
the text of the two programs into the Mathematica environment
and evaluate this input.
To derive the nth-order energy correction formula for quantum
state v, use the function Energy[n,v], where n and v are
nonnegative integers. Since the energy correction formula is
recursive, the nth-order energy depends on all lower-order
energies. If lower-order energy formulae have not been derived,
then these energies are preserved symbolically in the form
Egy[i,v], where i < n. To reduce an energy formula into a linear
combination of small symbolic terms, use the command
Expand[Simplify[Energy[n,v]]].
When DiatomicVibRot is used with RSperturb, the output from
Energy[n,v] contains several universal and molecular constants in
symbolic form. These are:
h, Planck's constant;
ve, the classical (harmonic) frequency of oscillation;
J, the rotational quantum number;
Re, the equilibrium internuclear separation;
Be, the equilibrium rotational constant. DiatomicVibRot
does not automatically simplify the rotational
constant, which is equal to h^2/(8 Pi^2 mu Re^2),
where mu is the molecular reduced mass (including
electrons).
ke, the equilibrium molecular force constant (i.e., the
harmonic force constant);
k[i], the ith-order molecular force constant (i > 2),
which is equal to the ith partial derivative of
potential energy with respect to the normal
coordinate; and
a, a constant arising from the harmonic oscillator
wavefunctions. This constant is also not evaluated by
DiatomicVibRot, but is equal to (4 Pi^2 mu ve)/h.
Note that all constants have been left in SI units (that is, they
have not been converted to wavenumbers). In particular, this
means that both ve and Be have units of hertz.
Finally, if Rayleigh-Schroedinger expansion coefficients are
desired (in order to obtain the wavefunction in explicit form),
use the function GenerateCoefficients[n,v] to produce a one-
dimensional array called "coefficients" containing the complete
set of nth-order coefficients for state v. Note that the lowest
vibrational quantum state is v = 0; however, Mathematica does not
allow a zero index to an array. Hence, coefficients[[1]] is the
expansion coefficient associated with quantum state v = 0, etc.
In the case of diatomic vibrational-rotational analysis problems,
the wavefunction is simply a linear combination (with Rayleigh-
Schroedinger coefficients) of one-dimensional harmonic oscillator
wavefunctions. As such, it is easy to build the diatomic
vibrational-rotational wavefunctions in Mathematica using the
intrinsic Mathematica function HermiteH[k,x] to generate the kth
Hermite polynomial as a function of x.
A few words concerning the normalization of these wavefunction
are in order. In general, perturbed wave functions are not
normalized; that is, is not necessarily equal
to unity. This is acceptable since the perturbed wavefunctions
lack a ready physical (i.e., probabilistic) interpretation. The
full wavefunction, however, should be normalized. The
wavefunction for quantum state v can easily be normalized by
adjusting the linear combination coefficient for the zeroth order
wavefunction associated with state v. It is left to the user to
perform this normalization. All other functions contained in
RSperturb and DiatomicVibRot are intended to be used by
Energy[n,v] and GenerateCoefficients[n,v] and not by the user;
however, some insight into the purpose of these functions can be
gained from their "::usage" statements.
Questions, comments, or problems concerning implementation of
these programs should be addressed to
John M. Herbert
Department of Chemistry
Kansas State University
111 Willard Hall
Manhattan, KS 66506
or sent by e-mail to herbert@ksu.edu