1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
// cat.fe
// Evolver data for catenoid.
PARAMETER RMAX = 1.5088795 // minimum radius for height
PARAMETER ZMAX = 1.0
boundary 1 parameters 1 // upper ring
x1: RMAX * cos(p1)
x2: RMAX * sin(p1)
x3: ZMAX
boundary 2 parameters 1 // lower ring
x1: RMAX * cos(p1)
x2: RMAX * sin(p1)
x3: -ZMAX
vertices // given in terms of boundary parameter
1 0.00 boundary 1 fixed
2 pi/3 boundary 1 fixed
3 2*pi/3 boundary 1 fixed
4 pi boundary 1 fixed
5 4*pi/3 boundary 1 fixed
6 5*pi/3 boundary 1 fixed
7 0.00 boundary 2 fixed
8 pi/3 boundary 2 fixed
9 2*pi/3 boundary 2 fixed
10 pi boundary 2 fixed
11 4*pi/3 boundary 2 fixed
12 5*pi/3 boundary 2 fixed
edges
1 1 2 boundary 1 fixed
2 2 3 boundary 1 fixed
3 3 4 boundary 1 fixed
4 4 5 boundary 1 fixed
5 5 6 boundary 1 fixed
6 6 1 boundary 1 fixed
7 7 8 boundary 2 fixed
8 8 9 boundary 2 fixed
9 9 10 boundary 2 fixed
10 10 11 boundary 2 fixed
11 11 12 boundary 2 fixed
12 12 7 boundary 2 fixed
13 1 7
14 2 8
15 3 9
16 4 10
17 5 11
18 6 12
faces
1 1 14 -7 -13
2 2 15 -8 -14
3 3 16 -9 -15
4 4 17 -10 -16
5 5 18 -11 -17
6 6 13 -12 -18
read
// Evolution to collapse and pop neck, as in Manual tutorial
gogo := { r; u; g 120; t .05; o; g 5; }
// Demonstrating saddle point due to triangulation arrangement.
// First setting parameters to stable values.
gogo2 := { rmax := 1; zmax := 0.55; recalc;
g; u; r; g 50; // at this point have nearly a saddle point
g 200; // triangulation twists around to lower energy
}
// Faster version of the above using conjugate gradient
gogo3 := { rmax := 1; zmax := 0.55; recalc;
g; u; r; U; g 25; // at this point have nearly a saddle point
g 35;
}
// High accuracy evolution, using higher-order Lagrange elements.
gogo4 := { u; zmax := 0.55; rmax := cosh(zmax); recalc;
r; g 5; hessian;
r; g 5; hessian;
lagrange 2; g 5; hessian;
lagrange 4; g 5; hessian;
lagrange 6; g 5; hessian;
lagrange 8; g 5; hessian;
true_area := 2*pi*(zmax + 0.5*sinh(2*zmax));
printf"Difference from true area: %g\n",total_area - true_area;
}
|