sandbox/adapt_test.c
#include "terrain.h"
#include "saint-venant.h"
#define MAXLEVEL 11
#define MINLEVEL 4
#define ETAE 5.e-3
scalar slide[];
double t_end=0;
struct Layers {
int (* iterate) (void);
};
void Init_Layers (struct Layers p) {
terrain(slide,"/data/EMILY_BASILISK/terrain/slide/gers_refined",NULL);
do {
foreach() {
h[]= ( val(slide.n,0,0)<1.e-10 ? 0. : slide[]);
if (val(slide.n,0,0)<1.e-10) {
};
eta[] = zb[] + h[];
}
} while (p.iterate && p.iterate());
}
int main()
{
#if QUADTREE
// 32^2 grid points to start with
init_grid(1 << MINLEVEL);
#else // Cartesian
// 1024^2 grid points
init_grid(1 << MAXLEVEL);
#endif
// the domain is
size (30000.);
origin(662000,191000);
run();
}
int adapt() {
#if QUADTREE
scalar eta[];
foreach()
eta[] = h[] > dry ? h[] + zb[] : 0;
boundary ({eta});
astats s = adapt_wavelet ({eta}, (double[]){ETAE},
MAXLEVEL, MINLEVEL);
fprintf (stderr, "%% refined %d cells, coarsened %d cells\n", s.nf, s.nc);
return s.nf;
#else // Cartesian
return 0;
#endif
}
event init(i=0)
{
The initial still water surface is at z=0 so that the water depth h is…
conserve_elevation();
foreach() {
zb[] = 0.;
eta[]=0.;
}
Init_Layers( iterate = adapt );
boundary ({h,zb,eta});
}
Adaptivity
We apply our adapt()
function at every timestep.
event do_adapt (i++) adapt();