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() {
[]= ( val(slide.n,0,0)<1.e-10 ? 0. : slide[]);
hif (val(slide.n,0,0)<1.e-10) {
};
[] = zb[] + h[];
eta}
} while (p.iterate && p.iterate());
}
int main()
{
#if QUADTREE
// 32^2 grid points to start with
(1 << MINLEVEL);
init_grid#else // Cartesian
// 1024^2 grid points
(1 << MAXLEVEL);
init_grid#endif
// the domain is
(30000.);
size (662000,191000);
origin
run();
}
int adapt() {
#if QUADTREE
scalar eta[];
foreach()
[] = h[] > dry ? h[] + zb[] : 0;
etaboundary ({eta});
astats s = adapt_wavelet ({eta}, (double[]){ETAE},
, MINLEVEL);
MAXLEVELfprintf (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() {
[] = 0.;
zb[]=0.;
eta}
Init_Layers( iterate = adapt );
boundary ({h,zb,eta});
}
Adaptivity
We apply our adapt()
function at every timestep.