# Breakup of a rectangular perturbation into a train of solitons

We reproduce the study of Madsen et al, 2008. An initial rectangular perturbation of width $2b$ and height $a$ is superposed on an ocean of constant depth ${h}_{0}$.

We solve the one-dimensional problem with an adaptive “bitree”. We compute both the Saint-Venant solution and the Green-Naghdi solutions.

``````#include "grid/bitree.h"
#if SAINT_VENANT
# include "saint-venant.h"
#else
# include "green-naghdi.h"
#endif``````

We need a very high level of refinement to accurately reproduce the results of Madsen et al. The depth ${h}_{0}$ and gravity are both set to unity (Madsen et al use these non-dimensional units). The amplitude is set to 0.1 and half-width to 12.2 as done in section 3.2.1 of Madsen et al, 2008.

``````#define MAXLEVEL 15
double a = 0.1, b = 12.2;

int main() {
N = 1 << MAXLEVEL;
L0 = 4000.;
G = 1.;
#if !SAINT_VENANT
#endif
run();
}``````

The initial conditions are a (half)rectangle sitting on the axis of symmetry at $x=0$.

``````event init (i = 0) {
foreach() {
h[] = 1. + a*(x < b);
zb[] = -1.;
}
}``````

We save the free-surface elevation at times $t\sqrt{g/{h}_{0}}=$ 35, 90, 700 and 2000 as in Figure 1 of Madsen et al, 2008. We use a frame of reference travelling with the wave i.e. we use $\left(x-b\right)/{h}_{0}-t\sqrt{g/{h}_{0}}$ as coordinate.

``````event plot (t = {35, 90, 700, 2000}) {
char name[80];
sprintf (name, "t-%g", t);
FILE * fp = fopen (name, "w");
foreach()
fprintf (fp, "%g %g\n", x - b - t, η[]);
fclose (fp);
}``````

We need a low error threshold for adaptation on $\eta$.

``````#if TREE