In this case p is the geometric normalised Weierstrass p-function, which is defined on a squared torus (see H. Karcher: Construction of Minimal Surfaces, Vorlesungsreihe Nr. 12, Bonn, 1989) and k = 1. Of course, you only have to compute the fundamental domain of the surface you want to visualisize, so you have to find out what part of the Riemann surface (in our case an eights of the squared torus) is to be mapped into the three dimensional euclidian space.
The Weierstrass data of Gackstatter's surface are:
G = sqrt (2p * 0.72948 / (1+2p-p*p)),
dh = dp.
For surface computing the function f (defined as f = k/g) is used to avoid problems with the zeros of G. In this example G is called gack1_g and f is called gack1_f.
Therefore the file arg_weier.c which contains the Weierstrass data and the parametrisation looks like that:
#include
extern COMPLEX (*INTEGRATE)
ANSI_PARM((COMPLEX (*)(COMPLEX), COMPLEX, COMPLEX));
static double konst;
COMPLEX my_get_arg(AMANDUS *amandus, int part, double u, double v)
if(amandus->class != Amandus)
surf = amandus->time_parm;
if (!strcmp(amandus->name, "gack1")) {
if (part == 1)
EXPLICIT *explicit_set_compute_arg(void)
explicit = (EXPLICIT *)START_METHOD(G_INSTANCE);
explicit->compute_arg = my_get_arg;
END_METHOD(explicit);
static COMPLEX gack1_g(COMPLEX z)
static COMPLEX gack1_f(COMPLEX z)
AMANDUS *amandus_set_weier_f(void)
ASSURE(amandus = (AMANDUS *)START_METHOD(G_INSTANCE),
if(!strcmp(amandus->name, "gack1")) {
END_METHOD(amandus);
#include "complex.h"
#include "arg_weier.h"
{
TIME_PARM *surf;
COMPLEX z;
return cmplx(u, v);
konst = surf->double_parm[0];
INTEGRATE = &integrate;
u = exp(u-1.);
z = cmplx(u * cos(v), u * sin(v));
if((z.y < .0001)&&(fabs(z.x-1.) < .0001)) {
INTEGRATE = &integrate2;
printf("p-Verzweigungspunkt z = (z.x| z.y)\n", z.x, z.y);
}
return z;
}
ASSURE(0, "my_get_arg: unknown surface", return(CZERO));
}
{
EXPLICIT *explicit;
ASSURE(explicit, "", END_METHOD(NULL));
}
{
COMPLEX w;
w = crmul(z, konst);
w = cdiv(w, cradd(cneg(csquare(z)), 1.));
w = csqrt(w);
return w;
}
{
COMPLEX w;
w = crmul(z, konst);
w = cdiv(cradd(cneg(csquare(z)), 1.), w);
w = csqrt(w);
return w;
}
{
AMANDUS *amandus;
"",
END_METHOD(NULL));
amandus->weier_f.g = gack1_g;
amandus->weier_f.dh = gack1_f;
}
}
Return to the introduction.
Return to the project list.
Go back to the main menu.
grape@iam.uni-bonn.de