Most subroutines in MOLSCAT are extensively commented; see the code for details. The following descriptions list where the various subroutines are called from, and in most cases give a brief description of their function.

** AIRPRP** -
Subroutine called by

`AXSCAT`

.
Airy propagator routine.
** AIRYMP** -
Subroutine called by

`SPROPN`

.
Modulus and phase of Airy functions and derivatives.
** ASROT** -
Subroutine called by

`SET6C`

.
Calculates asymmetric rotor energies and wavefunctions.
** ASYME** -
Entry point in subroutine

`SET6`

, called by `COUPLE`

.
** ASYMF** -
Entry point in subroutine

`SET6`

, called by `COUPLE`

.
** ASYMG** -
Entry point in subroutine

`SET6`

, called by `MCGCPL`

.
** AXSCAT** -
Subroutine called by

`STORAG`

.
Controlling routine for the log-derivative/Airy hybrid propagator.
** BASE** -
Subroutine called by

`DRIVER`

.
Handles generation of basis set.
** BASE9, BAS9IN, SET9, CPL9, DEGEN9** -
Subroutine / entry points called from

`BASE`

etc.
User-supplied routines to specify a special coupling scheme.
** BASIN** -
Entry point in subroutine

`BASE`

, called by `DRIVER`

.
Initialisation entry for `BASE`

- reads `&BASIS`

data.
** CHCK6I** -
Subroutine called by

`SET6I`

.
Check asymmetric rotor functions for orthogonality.
** CHECK6** -
Subroutine called by

`SET6`

.
Check asymmetric rotor functions for orthogonality.
** CHKSTR** -
Subroutine called by

`DRIVER`

, etc.
Checks that there is enough storage left in the X array.
** COLIM** -
Subroutine called by

`RMTPRP`

.
** CONVRG** -
Subroutine called by

`DRIVER`

.
Performs convergence checking if `&INPUT ICONV=1`

.
** CORR** -
Subroutine called by

`AIRPRP`

.
Correction terms for Airy propagator.
** COUPLE** -
Subroutine called by

`BASE`

.
Handles angular momentum coupling elements.
** CPLOUT** -
Subroutine called by

`BASE`

.
Output routine for angular momentum coupling elements.
** CPL3** -
Subroutine called by

`COUPLE`

.
Coupling matrices for `ITYPE=3`

.
** CPL4** -
Subroutine called by

`COUPLE`

; entry `CPL24`

called from `MCGCPL`

..
Coupling matrices for `ITYPE=4, 24`

.
** CPL21** -
Subroutine called by

`MCGCPL`

.
Coupling matrices for `ITYPE=21`

.
** CPL22** -
Subroutine called by

`MCGCPL`

.
Coupling matrices for `ITYPE=22`

.
** CPL23** -
Subroutine called by

`MCGCPL`

.
Coupling matrices for `ITYPE=23`

.
** CPL25** -
Subroutine called by

`MCGCPL`

.
Coupling matrices for `ITYPE=25`

.
** CPL26** -
Subroutine called by

`MCGCPL`

.
Coupling matrices for `ITYPE=26`

.
** DAPROP** -
Subroutine called by

`AXSCAT (INTFLG=8), DASCAT (INTFLG=6)`

.
Propagation routine for the diabatic modified log-derivative method.
** DASCAT** -
Subroutine called by

`STORAG`

.
Controls the diabatic modified log-derivative propagator.
** DASIZE, DAOPEN, DACLOS, DAWR1, DAWR2, DARD1, DARD2** -
Subroutine (and entry points)
called by

`PRBR`

for in-core simulation of direct access files.
** DEGENF** -
Entry point in subroutine

`BASE`

, called by `OUTPUT`

.
Returns degeneracy factor for denominator of cross-section expressions.
** DELRD** -
Subroutine called by

`VIVAS`

.
Calculates length of next step.
** DERMAT** -
Subroutine called by

`VIVAS, WKB`

.
Calculates first or second radial derivative of potential matrix.
** DGEMUL** -
Subroutine called from

`AIRPRP, QAPROP, RMTPRP, STABIL, TRNSFM, VIVAS`

.
Matrix multiplication (`ESSL`

routine).
** DGESV** -
Subroutine called from

`DVSCAT, STABIL, VIVAS, YTOK`

.
Solves linear equations (`LAPACK`

routine).
** DMSYM** -
Subroutine called by

`ASROT`

.
Symmetrizes spherical top wavefunctions.
** DRIVER** -
Subroutine called by MOLSCAT main program.
Driver reads

`&INPUT`

data and handles the calls to the major routines.
** DSYFIL** -
Subroutine called by

`AIRPRP, LDVIVS, RMTPRP, TRNSFM, WAVVEC, YTOK`

.
Fills in upper or lower triangle of symmetric matrix.
** DVFREE** -
Subroutine called by

`DVSCAT`

.
Asymptotic matching for DeVogelaere algorithm.
** DVSCAT** -
Subroutine called by

`STORAG`

.
Main routine for DeVogelaere algorithm.
** DVSTRT** -
Subroutine called by

`DVSCAT`

.
Starts DeVogelaere propagation.
** EAVG** -
Subroutine called by

`DRIVER`

.
Provides energy values suitable for Boltzmann averaging.
** ECNV** -
Subroutine called by

`BASE, DRIVER`

.
Handles different possible energy units and returns conversion factor.
** ECNVX** -
Subroutine called by

`ECNV`

.
Handles character string data values in `EUNITS`

.
** EPSUM** -
Subroutine called by

`OUTPUT`

.
Calculates S-matrix eigenphase sum from K-matrix.
** ESYMTP** -
Subroutine called by

`COUPLE, SET6`

.
** F02AAF** -
NAG Subroutine called by

`WAVEIG`

.
Eigenvalues of a real symmetric matrix.
** F02ABF** -
NAG Subroutine called by

```
ASROT, DMSYM, EPSUM, POTENT, QAPROP,
RMTPRP, SHRINK, VIVAS
```

.
Eigenvalues and eigenvectors of a real symmetric matrix.
** FIND** -
Subroutine called by

`SURBAS`

.
Finds potential term coupling two G-vectors in surface scattering.
** FINDRM** -
Subroutine called by

`DRIVER`

.
For `IRMSET .gt. 0`

option, finds suitable starting point for integration.
** FINDRX** -
Subroutine called by

`DRIVER`

.
Checks that `RMAX`

is beyond centrifugal barrier and increments it if
necessary.
** FSYMTP** -
Subroutine called by

`COUPLE, SET6`

.
** GASLEG** -
Subroutine called by

`GAUSSP`

.
Returns points and weights for Gauss-Legendre quadrature.
** GAUSHP** -
Subroutine called by

`POTENL`

(VRTP case).
Returns points and weights for Gauss-Hermite quadrature.
** GAUSSP** -
Subroutine called by

`IOSBGP`

.
Interface to `GASLEG`

for Gauss-Legendre points and weights.
** GCLOCK** -
Subroutine called by

`DRIVER, IOSDRV, IOSCLC`

.
Timing routine.
** GDATE** -
Subroutine called by

`DRIVER`

.
Returns character string with current date.
** GET102** -
Subroutine called by

`IOSBIN`

.
Special `ITYPE=102`

input; dummy version supplied with MOLSCAT.
** GSYMTP** -
Subroutine called by

`MCGCPL, SET6`

.
** GTIME** -
Subroutine called by

`DRIVER`

.
Returns character string with current time of day.
** headER** -
Subroutine called by

`DRIVER`

.
Writes or checks a header on the `ISCRU`

scratch file to ensure that it
is compatible with the current run.
** HERM** -
Called by

`POTENL`

(VRTP case).
Generates Hermite polynomials.
** HRECUR** -
Called by

`GAUSHP`

.
** IDPART** -
Subroutine called by

`BASE`

.
Handles identical particle symmetry for `ITYP=3`

.
** IOSBGP** -
Entry point in subroutine

`IOSBIN`

, called by `IOSDRV`

.
** IOSBIN** -
Subroutine called by

`BASIN`

.
Processes `&BASIS`

data for IOS cases.
** IOS1** -
Entry point in

`IOSBIN`

, called by `IOSDRV`

.
Sets up points and weights for orientation quadrature.
** IOS2** -
Entry point in

`IOSBIN`

, called by `IOSCLC`

.
Initializes values for the propagator in IOS cases.
** IOSCLC** -
Subroutine called by

`IOSDRV`

.
Main control of IOS: loops over energies and orientations and
accumulates generalized IOS cross sections.
** IOSDRV** -
Subroutine called by

`DRIVER`

.
Sets up storage for IOS cases and then calls `IOSCLC`

.
** IOSOUT** -
Subroutine called by

`IOSCLC`

.
Outputs IOS generalized and state-to-state cross sections.
** IOSPB** -
Subroutine called by

`IOSCLC`

.
Calculates pressure broadening cross sections for IOS cases.
** IPASYM** -
Subroutine called by

`SET6`

.
Checks symmetry of asymmetric rotor coefficients (`ITYPE=6`

).
** ISUTP** -
Subroutine called by

`IOSCLC`

.
** IVCHK** -
Subroutine checks compatibility of symmetries with IV() indexing.

** IXQLF** -
Entry point in subroutine

`IOSBIN`

, called by `IOSOUT, IOSPB, SIG6`

.
** J3J000** -
Subroutine called by

`COUPLE, CPL21, SET6`

.
Recursive routine for Wigner 3-j symbols with zero projections.
** J6TO4** -
Subroutine called by

`SET4`

; converts `JLEV`

from `ITYPE=6`

to `ITYPE=4`

format.
** J6J** -
Subroutine called by

`COUPLE, J9J, SET6, SIXJ`

.
Recursive routine for Wigner 6-j symbol.
** J9J** -
Subroutine called by

`XNINEJ`

.
Recursive routine for Wigner 9-j symbol.
** KSYM** -
Subroutine called by

`YTOK`

.
Forces symmetry on K matrix.
** KTOS** -
Subroutine called by

`DASCAT, DVSCAT, LDVIVS, QASCAT, RMTPRP`

.
Converts the real symmetric K matrix into the S matrix.
** LDPROP** -
Subroutine called by

`LDVIVS`

.
Log-derivative propagator.
** LDVIVS** -
Subroutine called by

`STORAG`

.
Controls the hybrid log-derivative/VIVS propagator.
** MASK** -
Called by

`DRIVER`

.
Machine-dependent code to suppress floating-point underflows.
** MAXMGV** -
Called by

`POTENT`

.
Maximum magnitude element of a vector.
** MCGCPL** -
Subroutine called by

`BASE`

.
Handles angular momentum coupling for McGuire-Kouri coupled states
approximation.
** MHAACK** -
Subroutine called by

`DRIVER`

.
Prints a citation request for the HIBRIDON propagator.
** NEXTE** -
Subroutine called by

`DRIVER`

.
Estimates next energy set in resonance search option.
** ODPROP** -
Subroutine called by

`DASCAT`

.
Single-channel implementation of diabatic modified log-derivative
propagator.
** ORDER** -
Subroutine called by

`FIND`

.
Takes account of lattice symmetry for Fourier components of
atom-surface potential.
** OUTERR** -
Entry point in subroutine

`OUTPUT`

, called by `DVSCAT`

.
** OUTINT** -
Entry point in subroutine

`OUTPUT`

, called by `DRIVER`

.
Initialisation entry for `OUTPUT`

.
** OUTMAT** -
Subroutine called by

`AIRPRP`

.
Read or write transformation matrix.
** OUTPCH** -
Entry point in subroutine

`OUTPUT`

, called by `DRIVER`

.
** OUTPUT** -
Subroutine called by

`DRIVER`

.
Outputs S-matrices etc. and calculates state-to-state cross sections.
** PARITY** -
Function called by

```
BASE, COUPLE, CSRTRT, ESYMTP, FCOEF,
FSYMTP, GSYMTP, MCGCPL,
````PRBR`

, ROTROT, SET6, THREEJ

.
Returns (-1)**argument.
** PERT1** -
Subroutine called by

`VIVAS`

.
Calculates perturbation corrections for `VIVAS`

propagator.
** PERT2** -
Subroutine called by

`VIVAS`

.
Calculates perturbation corrections for `VIVAS`

propagator.
** PLM** -
Subroutine called by

`IOSBIN`

.
Calculates associated Legendre polynomials.
** POTENL** -
Subroutine called by

`DRIVER, WAVMAT, DERMAT, ODPROP`

.
Evaluates intermolecular potential at distance R. See
Section 5 for specifications.
** POTENT** -
Subroutine called by

`AIRPRP`

.
Calculates wavevector matrix and diagonalises average potential.
** POTIN9** -
Routine called by

`POTENL`

, for `ITP=9`

; if used, dummy version must be
replaced with appropriate user-supplied routine.
** PRBOUT** -
Entry point in subroutine

`PRBR`

, called by `DRIVER`

.
** PRBR** -
Subroutine called by

`DRIVER`

.
Handles calculation of pressure broadening cross sections.
** PRBR3** -
Subroutine called by

`PRBR`

.
Pressure broadening code for `ITYPE=3`

.
** PRBR3R** -
Entry point in subroutine

`PRBR3`

, called by `PRBR`

.
** PRBRIN** -
Entry point in subroutine

`PRBR`

, called by `DRIVER`

.
Initialisation entry for `PRBR`

.
** QAPROP** -
Subroutine called by

`QASCAT`

.
Propagation routine for the quasiadiabatic modified log-derivative
method (`INTFLG=7`

).
** QASCAT** -
Subroutine called by

`STORAG`

.
Controls the quasiadiabatic modified log-derivative propagator.
** QSYMTP** -
Subroutine called by

`CPL4`

; matrix elements for `ITYPE=4`

.
** RBES** -
Subroutine called by

`DASCAT, DVFREE, QASCAT, RMTPRP`

.
Generates Riccati-Bessel functions.
** RDPCH** -
Subroutine called by

`OUTPUT`

.
Outputs cross sections.
** RMSBF** -
Subroutine called by

`YTOK`

.
Ratio of derivative to function value for modified spherical Bessel
functions of the third kind.
** RMTPRP** -
Subroutine called by

`STORAG`

.
Main routine for R-matrix propagator algorithm.
** RSYM** -
Subroutine called by

`DVSCAT`

.
Forces symmetry on K-matrix in DeVogelaere algorithm.
** RSYMTP** -
Subroutine called by

`CPL4`

; matrix elements for `ITYPE=24`

.
** SCAIRY** -
Subroutine called by

`AIRYMP`

.
Scaled Airy function and derivatives.
** SET1** -
Entry point in subroutine

`SETBAS`

, called by `BASE`

.
Handles basis set and energy levels for `ITYP=1`

.
** SET2** -
Entry point in subroutine

`SETBAS`

, called by `BASE`

.
Handles basis set and energy levels for `ITYP=2, 7`

.
** SET3** -
Entry point in subroutine

`SETBAS`

, called by `BASE`

.
Handles basis set and energy levels for `ITYP=3`

.
** SET4** -
Subroutine for

`ITYP=4`

basis functions, called by `BASE`

.
** SET5** -
Entry point in subroutine

`SETBAS`

, called by `BASE`

.
Handles basis set and energy levels for `ITYP=5`

.
** SET6** -
Subroutine called by

`BASE`

.
Handles basis set and energy levels for `ITYP=6`

.
** SET6C** -
Subroutine called by

`SET6`

.
Generates asymmetric rotor basis sets from rotational constants.
** SET6I** -
Subroutine called by

`IOSBIN`

.
IOS version of `SET6`

.
** SET8** -
Entry point in subroutine

`SURBAS`

, called by `BASE`

.
Handles basis set and energy levels for `ITYP=8`

.
** SETBAS** -
Name of subroutine containing

`SET1 - SET5`

.
** SGNCHK** -
Subroutine called by

`RMTPRP`

.
Ensures consistency of eigenvector signs from one R step to the next.
** SHRINK** -
Subroutine called by

`RMTPRP`

.
Performs basis set contraction for R-matrix propagator algorithm
(`ISHRINK .gt. 0`

option).
** SIG6** -
Subroutine called by

`IOSOUT`

.
Handles `ITYP=6`

cross sections for IOS case.
** SIXJ** -
Function called by FCOEF, FSYMTP,

`PRBR`

, `PRBR3`

, `ROTROT`

.
Calculates Wigner 6-j symbol.
** SPROPN** - Subroutine called by

`AIRPRP`

.
Diagonal propagator for Airy method.
** STABIL** -
Subroutine called by

`DVSCAT`

.
Stabilisation routine for DeVogelaere algorithm.
** STEFF** -
Subroutine called by

`FINDRM`

.
Steffensen iteration for accelerated convergence on RMIN.
** STORAG** -
Subroutine called by

`DRIVER, IOSCLC`

.
Sets up storage for and calls a propagator; all calls to propagators
are currently done through `STORAG`

.
** STRY** -
Subroutine called by

`RMTPRP`

.
Tests whether eigenvectors of potential are changing slowly enough to
end R-matrix propagation.
** STSRCH** -
Called by

`ECNVX`

.
** SURBAS** -
Subroutine called by

`BASE`

.
Handles basis set for surface scattering (`ITYPE=8`

).
** SWRITE** -
Subroutine called by

`OUTPUT`

.
Writes unformatted S matrix to unit `ISAVEU`

.
** SYMINV** -
Subroutine called by

`DAPROP, KTOS, LDVIVS, LDPROP, QAPROP, RMTPRP`

.
Calculates the inverse of a real symmetric matrix.
** THREEJ** -
Function called by

`COUPLE, CSRTRT, FCOEF, FSYMTP, MCGCPL, ROTROT`

.
Calculates Wigner 3-j symbol with all projections zero.
** THRJ** -
Function called by

`CSRTRT, ESYMTP, FSYMTP, GSYMTP, MCGCPL, PRBR, PRBR3`

.
Calculates Wigner 3-j symbol with no restriction on projections.
** TRNSFM** -
Subroutine called by

`AIRPRP, POTENT, QAPROP, RMTPRP, SHRINK, VIVAS`

.
Performs a similarity transform.
** TRNSP** -
Subroutine called by

`AIRPRP, POTENT, QAPROP, RMTPRP, SHRINK`

.
Transposes a matrix.
** VINIT** -
Subroutine called by the general-purpose version of

`POTENL`

.
Initialises for calls to potential routines `VSTAR, VSTAR1`

, and `VSTAR2`

.
See Section 4.2.
** VIVAS** -
Subroutine called by

`LDVIVS`

.
VIVAS propagator.
** VRTP** -
Subroutine called by general-purpose version of

`POTENL`

.
User-supplied routine which may be called to evaluate an interaction
potential which is not expanded in angular functions. See
Section 4.3.
** VSTAR, VSTAR1, and VSTAR2** -
User-supplied routines which may be called by the general-purpose
version of

`POTENL`

to evaluate the interaction potential and its first
and second derivatives respectively. If used, dummy version must be
replaced by an appropriate user-supplied routine.
See Section 4.2.
** WAVEIG** -
Subroutine called by

`AIRPRP`

.
Get eigenvalues of potential matrix.
** WAVMAT** -
Subroutine called by

```
DAPROP, DERMAT, DVSCAT, DVSTRT, HEADER,
LDPROP, POTENT, QAPROP, RMSET, RMTPRP, VIVAS, WKB
```

.
Calls `POTENL`

, to obtain potential coefficients, and forms potential
matrix for scattering routines.
** WAVVEC** -
Subroutine called by

`WAVMAT, DERMAT`

.
Efficient routine to handle vector products required by `WAVMAT`

.
** WKB** -
Subroutine called by

`STORAG`

.
WKB propagator for one channel problems.
** XNINEJ** -
Function called by

`CSRTRT, ROTROT`

.
Calculates Wigner 9-j symbol.
** YRR** -
Function called by

`IOSBIN`

. Computes
bispherical harmonics for two linear rotors.
** YTOK** -
Subroutine called by

`LDVIVS, RMTPRP`

.
Calculates the K matrix from the log-derivative matrix.
** ZBES** -
Called by

`GASLEG`

.
Forward to. Section 10

Back to. Section 8

Back to the. Table of Contents