projection is used to project out some degrees of freedom of the PES (by multiplying the PES with a projector function and integrating over the DOF) to yield a PES of lower dimensionality. This "projected potential" must then be cast into natural potential form in a subsequent potfit run to be usable in mctdh. This feature can be used e.g. to create a multipole expansion of the angular part of a PES, or to create an effective potential by averaging over some DOFs.
Generally, you will use the following procedure:
projection accepts the following options:
h : print this helptext. ? : print this helptext. ver : Version information. rd : Reading of the dvrfile is enforced. gv : force generation of fullgrid vpot file. w : overwrite enabled. mnd : create name directory if it does not exist. D : 'name' denotes the directory where files are written to, (name in ~.inp file ignored).
The input file for projection follows the same division into sections as the potfit input file. There are only slight differences.
The various sections are listed below. Those with a STATUS of C are compulsory, O marks optional sections.
XXX  Status  Description 

RUN 

What files are to be opened, etc. 
PROJECTION 

Definition of projectors for projection runs. 
OPERATOR 

Which surface to be used, coordinate systems, energy cutoffs, etc. 
PRIMITIVEBASIS 

Definition of primitive basis. 
Below, tables of keywords are given for some input section.
A first table describes the keywords. The number and type of
arguments is specified. The type is S for a character string, R
for a real number, and I for an integer. For instance,
'keyword = S,R'
indicates that the keyword takes two
arguments, the first is a string, the second a real number. The
status column indicates whether the keyword is compulsory, C, or
optional, O.
A second table defines the default values for optional keywords and arguments.
Keyword  Status  Description 

name = S 

The output files will be written to the directory S.
Note: If the D name option is used (see
command line options), the namestring
given in the input file is ignored. 
title = S 

The string S is taken as the title of the run and printed to the log and output files. Note: everything that follows the equal sign '=' till the end of the line is taken as title! 
readdvr (= S) 

The DVR information will be taken from the DVR file in directory S. Note that the primitivebasissection of the input file is completely ignored if this keyword is given. A DVR file residing in directory S will NEVER be overwritten or deleted, even if the keywords `deldvr' and/or `gendvr' have been specified. If S is not given, namedirectory/dvr is assumed. 
gendvr 

The DVR file will be generated unconditionally. (This is the default) 
deldvr 

The DVR file will be deleted at the end of the calculation. 
readvpot (= S) 

The vpot file S will be read. S will never be overwritten or deleted irrespective of all other keywords. "readvpot" differs from "readdvr": First, S is a FILE, not a directory. Second, the potential parameters written at the head of file S do NOT overwrite the parameters found in the .inp file. Instead, both sets are compared to each other. If they are not identical, the program stops with an error message. The same happens if the vpot cannot be read. If S is not given, namedirectory/vpot is assumed.. 
genvpot 

The vpot file will be generated unconditionally. A vpot file specified via the "readvpot" keyword, however, will never be overwritten. 
delvpot 

The vpot file will be deleted at the end of the calculation unless it has not been specified via the "readvpot" keyword. 
overwrite 

Any files already in name directory may be overwritten. (It is safer not to use overwrite but the option w). 
output = S 

The output will be written to the file
name/output . If this keyword is omitted, output
will be to the screen. The string S may take the values
short or long. When long is specified,
additional information might be printed. short is
default, i.e. output is equivalent to
output=short .Note: output is default. 
screen 

The output will be directed to the screen, no outputfile is opened. Alternatively to screen one may give the keywords nooutput or nooutput. 
timing 

Program timing information will be written to the file
name/timing (default). 
notiming 

The timing file is not opened. 
lowmem 

A lowmemory mode is used. This avoids allocating space for the original potential on the full grid. The vpot file can neither be read nor written  its data is instead computed as needed. In this mode, all projectors must project onto exactly the same DOFs. 
usempi 

The program runs in a distributed memory parallelised modus using MPI if started with the mpirun command. Implies lowmem. 
For more details on the format of the various data files see the Potfit Output Documentation.
A projection run allocates a single double precision vector v of full grid size which holds the original potential on the original grid, and which is written to a file "vpot". Additionally, a double precision vector vproj is allocated for the projected potentials. Its size is that of the largest remaining grid (i.e. the grid where all the projected DOFs are omitted). If the projection option error is specified, as many vproj vectors need to be stored as projectors were defined. Note that projection runs cannot make use of "singleprecision". In lowmem mode, no vector of full grid size is allocated, but as many vproj vectors are needed as there are projectors (plus one if the error option is used). If usempi is specified, and the job is run with N processes, the memory requirement per process is one Nth of the memory requirements for lowmem mode; additionally, the controlling process needs to store one full vproj vector.
For the PROJECTIONSECTION, these are the keywords which control the calculation and output of additional files besides the vpot_LABEL files:
Keyword  Status  Description 

error [ = S ] 

An error measure will be calculated and written to the
file S (the default is "projerr.vpot"). This measure is
calculated as follows: Let p be the index of the projector, x be the remaining DOFs, y be the projected DOFs, f_{p} be the projector function, and g_{p} be the complementary projector function (i.e. such that ∫dy f_{p}(y) g_{p}(y) = 1 ). In this notation, the projected potentials are V_{p}(x) = ∫dy V(x,y) f_{p}(y) . The error measure then is ΔV(x) = { ∫dy  V(x,y) − ∑_{p} V_{p}(x) g_{p}(y) ^{2} / ∫dy }^{1/2} . Of course, this only works if all projectors project onto the same set of DOFs (which is not necessary otherwise). ΔV(x) will be stored as a vpot file and can then be plotted with the showpot utility. 
ascii 

The projected potentials will also be written to ASCII files, named "srf_LABEL.asc". The files contain one energy per line, simply looping over the remaining grid (first remaining DOF runs fastest). This format is usable as input to MCTDH's readsrf statement. 
The definition of the projectors themselves is done with the following syntax:
PROJECTOR LABEL MODELABEL function parameters ... option = value ... endprojector
where:
You can project onto several degrees of freedom at once, by giving multiple "MODELABEL function parameters" lines in the PROJECTOR statement.
List of possible options:
Option  Description 

scale = R  multiplies the resulting projected potential with the overall scale factor R (a real number). 
In the following table, x denotes the coordinate of the projected DOF. The integration is carried out by a simple quadrature, using the grid points that are specified by the DOF definition in the PRIMITIVEBASISSECTION. This method will yield best results if you use the "recommended DVR" which is also specified in the table. The normalization factors are chosen such that you don't normally need any further factors in the operator file.
Function  Parameters  Description  recomm. DVR  Remarks 

leg  l m  P_{lm}(cos x) Normalization factor: (2l+1)/2 * (lm)!/(l+m)! associated Legendre polynomial of cos(x) 
Leg  in .op file, use aslegth:l_m 
cos  m  cos(mx) Normalization factor: 1/2π 
exp  in .op file, use cos[m,0] 
sin  m  sin(mx) Normalization factor: 1/2π Note: m=0 is not allowed. 
exp  in .op file, use sin[m,0] 
gauss  a d 
exp(−((x−a)/2d)^{2}) Normalization factor: 1/(sqrt(2π)d) Gaussian with center a and width d. 
in .op file, use gauss[1/4d^{2},a]  
read  filename  Read function from the ASCII file filename. The file must contain one function value per line (and nothing else) and have exactly as many lines as number of grid points for this DOF. It is assumed that the function itself is normalized. 

How to add new projector functions 
After the necessary function parameters, it is possible to specify additional options which modify the projection behaviour:
Option  Description 

weights_included  (Can be abbreviated to wi.) During integration, the "raw" function values are normally multiplied by the DVR weights. This is simply to take into account the differential volume element. However, if for some reason you know that the raw function values already include the DVR weight, you must specify this option to prevent the normal inclusion of the weights during integration. Example: the veigen keyword in MCTDH can be used to write eigenfunctions of 1D operators to a file. These eigenfunctions already include the square root (!) of the DVR weights. So if you used the square of such an eigenfunction as input, you would need wi. Similarly, if you want to use a 1D reduced density, create it by running showd1d with the nw option and take the data fron the tmpplot.pl file. (Remove the coordinate data, density data only!) Then again, the wi keyword should be set after read < filename >. 
root_of_weights_included  (Can be abbreviated to rwi.) Like "weights_included", this tells the integration routine that the function values already include the square root of the DVR weights. 
no_weights_included  (Can be abbreviated to nwi.) This option is just available for completeness and tells the integration routine that the read function values are "raw", i.e. they do not include the DVR weights. This is also the default. 
Keyword  Status  Description 

pes = S {pesopts} 

S is the name of a potential energy surface which must have
been encoded in the mctdh package. The name is interpreted
in a case sensitive manner. If a surface depends on
additional parameters, one can change the encoded default
values by adding those parameters via the string
'{pesopts}'. Parameter names specified within the braces
'{}' are processed in a case sensitive manner. The selected
surface determines which parameter names are possible. For
a description of the available surfaces see Hamiltonian/Liouvillian
Documentation  Available Surfaces. If you want to fit
a vpot file that was created by a different program (e.g.
adproj, or projection itself) use the "pes = none" option.
This means that potfit uses only the vpot file and does not
look for a potential energy surface.
Example: 2D: r1=rdtfac*rv r2=rv 3D: r1=sqrt(rd**2+(tfac*rv)**2 2d0*tfac*rd*rv*ctheta) r2=rv r3=sqrt(rd**2+((1d0tfac)*rv)**2 +2d0*(1d0tfac)*rd*rv*cos(theta)) For a homonuclear diatomic molecule tfac=0.5d0, in general tfac=m1/(m1+m2). rv denotes the distance between the two atoms of the diatom, rd the distance between the third atom and the centre of mass of the diatom, and theta the angle between rd and rv. Note: tfac is not used if binding coordinates are selected for a calculation. 
order = S/I 

order defines the ordering of the variables passed
to the potential routine. If S=dof, then the ordering is as
in the PRIMITIVEBASISSECTION. Note that this is the
default, order=dof need not to be given. If S=mode (or
S=particle), then the ordering is as in the
NATPOTBASISSECTION. Finally, one may give a blank separated
list of integers, which define the ordering with respect to
the dofordering. E.g.: order = 3 1 2 passes the third dof as the first argument to the potential routine. The first dof becomes the second and the second dof the third argument. The arguments of order must be a permutation of the numbers 1...ndof. See the logfile to inspect if the order is correct. 
vcut < R 

Energy cutoff for exact potential energy surface. All potential energy values greater than R are set to R. 
vcut > R 

Energy cutoff for exact potential energy surface. All potential energy values less than R are set to R. 
cspot = R1,R2,R3 

Whether an additional centrifugal potential of the
following form is added to the potential energy surface (so
far only installed for the 3D LSTHsurface in Jacobian
coordinates): where R1 denotes jtot, R2 denotes K and R3 denotes mass_rd. 'cspot' is compulsory if option 'jtot' has been specified on the command line. 
BKMP2 PES : 3D model in Jacobian Coordinates Dissociative Coordinate : rd Vibrational Coordinate : rv Angular Coordinate : thetaA line like Dissociative Coordinate : theta would hint to a wrong ordering of the degrees of freedom in the PrimitiveBasisSection.
This example shows how to produce the "BMKPE" expansion of the BMKP surface for H_{4}, as suggested by Pogrebnya & Clary [Chem. Phys. Lett. 363 (2002) 523, Section 2.2].