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
| #include "utils.h"
#include "fractions.h"
#include "tag.h"
#define LEVEL 10
double geom (double x, double y) {
double C1 = sq(x - 0.2) + sq(y) - sq(0.1);
double C2 = sq(x - 0.8) + sq(y) - sq(0.01);
double C1C2 = min(C1, C2);
return - C1C2;
}
int main()
{
init_grid (1<<9);
scalar f[];
f.refine = f.prolongation = fraction_refine;
double iteration = 0;
do {
iteration++;
fraction (f, geom(x,y));
} while (adapt_wavelet({f}, (double []){0.005}, maxlevel = LEVEL, 5).nf != 0
&& iteration <= 10);
scalar m[];
foreach()
m[] = f[] > 1.e-3;
int n = tag(m);
output_ppm (m, file = "tag.ppm", min = 0, max = n);
if (n != 2) {
dump ("error");
exit (1); // error
}
}
|