Introduction to Riemann Surfaces

A Riemann surface object is defined by an affine plane equation f(x, y) = 0 in the following way. The Riemann surface X associated to the equation f(x, y) = 0, denoted X : f = 0 is the set of complex points of the non-singular model of the projective closure C of the affine curve defined by f(x, y) = 0, i.e., X = C(C).

There are two different types of Riemann surface in Magma for which two different sets of algorithms are used, depending on the defining equation f = 0.

(i)
The general Riemann surface type is defined by a geometrically irreducible function f ∈K[x, y] over a number field K and an embedding σ : K -> C;

(ii)
The superelliptic Riemann surface type defined by an affine equation ym = p(x) where p ∈K[x] is separable, K ⊆C and m > 1.

Note that, in practice, increasing the precision heavily impacts the running time of the algorithms. The algorithms for a general Riemann surface work reasonably well for up to a precision of several hundred digits, say up to D ~500, while the superelliptic case is considerably more efficient so that working to a precision of several thousand digits is possible, say up to D ~2000. Higher precisions are possible, but the computation may take considerable time.

The main application of this Riemann surface package is to numerically approximate a period matrix Ω that describes the analytic Jacobian J(C) = Cg / Ω Z2g of the curve C and associated Abel--Jacobi map A : X -> J up to some prescribed precision D, where the number of decimal digits D can be specified by the user. The aim is that numerical computations should be correct up to an absolute error of 10 - D + 1 using heuristic error estimates.

The Riemann surface type is called RieSrf.

The algorithms for general Riemann surfaces are described in [Neu18, Chapter 4]. The algorithms for the superelliptic case are based on a paper by Molin and Neurohr [MN17]; more details can be found in [Neu18, Chapter 5]. Finally, the algorithms used for numerical integration are described in more detail in [Neu18, Chapter 3].

Example RieSrf_rie-srf-verbose (H124E1)

For those who are interested in seeing what is happening behind the scenes, there is a verbose flag called RieSrf which has verbose levels in the range [0..3].
V2.28, 13 July 2023