(****************************************************************) (* *) (* 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