In the spring of 2002 I wrote a maple program to compute integrals over the
moduli space of maps to a smooth curve. The algorithm is due to Rahul
Pandharipande and Andrei Okounkov and is based on their joint work and also
the joint work of Pandharipande and Faber. The integrand can have arbitrary
gravitational descendants (i.e. descendants of a point, a loop, or 1) or
insertions of "Hodge type". "Hodge type" insertions are of the form
chi(R·p*f*(L)) where p is the universal curve, f is the universal map and
L is a line bundle on the target curve. For example, if L is the trivial
bundle, then these insertions are the Chern characters of the dual Hodge
The program computes disconnected Gromov-Witten invariants, i.e. integrals over the moduli space of stable maps where the domain is possibly disconnected. The disconnected theory is more natural from the point of view of the algorithm and the usual (connected) invariants are determined by the disconnected invariants (and vice versa).
One of the applications of the program is to compute the local GW invariants of a curve in a Calabi-Yau 3-fold (this was the main motivation for writing the program). Here the integrand is the "top" Chern class of -R·p*f*(O+K) (see my papers with Rahul for details "BPS states...", "Curves in..."). Included in the file is a procedure that expresses the Chern class in terms of the Chern characters and computes the generating series for the local GW invariants.
The algorithm is highly recursive and can use up a lot of RAM. Rahul and I spend a good two months optimizing the algorithm and I believe that the program is basically as efficient as the algorithm allows. The program does slow down as the degree and the target genus go up, but I think the main barrier is the number of insertions. The maximum number of insertions is typically 5 or 6.
I intend to write up a complete description of the algorithm and the use of the program and eventually post it on the arXiv, in the mean time, I will post it here. Use at your own risk. The "documentation" for using the program appears at the beginning of the file. The auxiliary programs (procedures "Z" and "Y") for computing the local GW invariants of a curve in a Calabi-Yau 3-fold occur toward the end of the file and their documentation is there.
The code has been fairly well tested and seems to be pretty reliable. If you find any problems please email me. The only "bug" that I know of has to do with certain loop descendants. For each insertion which is a gravitational descendant of a loop, there must be another insertion which is a descendant of the poincare dual loop. If this is not the case, the invariant is zero, however the program gives an error. (An earlier version of the program correctly returned zero, but we changed to a much faster algorithm that assumes that the loops are inserted in poincare pairs).
The code: GWall .