# 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({\bf 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 \in {\bf K}[x,y]$ over a number field $K$ and an embedding $\sigma : K \rightarrow {\bf C}$;

**(ii)**
The superelliptic Riemann surface type defined by an affine equation $y^m = p(x)$ where $p \in {\bf K}[x]$ is separable, ${\bf K}\subseteq {\bf 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 \sim 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 \sim 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 $\Omega$ that describes the analytic Jacobian $J({\bf C}) = {\bf C}^g / \Omega {\bf Z}^{2g}$ of the curve $C$ and associated Abel–Jacobi map $A : X \rightarrow 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 [[Neurohr, 2018](../../references.md#cite-neurohr-phd), Chapter 4]. The algorithms for the superelliptic case are based on a paper by Molin and Neurohr [[Molin and Neurohr, 2017](../../references.md#cite-neurohr-molin)]; more details can be found in [[Neurohr, 2018](../../references.md#cite-neurohr-phd), Chapter 5]. Finally, the algorithms used for numerical integration are described in more detail in [[Neurohr, 2018](../../references.md#cite-neurohr-phd), Chapter 3].

## `Example: Rie Srf Verbose (ex-5b318d)`

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]$.
