# Title: Small amplitude solitary wave interacting with a parabolic hump # # Description: # # This test case was proposed by LeVeque (JCP, 1998) as a check for # the accuracy of hydrostatic balance for the Saint-Venant equations # with variable topography. A solitary wave of small amplitude is # generated by an initial discontinuity on the left-hand-side of the # domain and moves past a parabolic hump creating complex focusing and # diffraction (Figure \ref{hump}). Any inaccuracy in hydrostatic # balance will clearly affect the solution given the small amplitude # of the initial perturbation. # # \begin{figure}[htbp] # \caption{\label{hump}Animation of the topography (coloured) and free # surface (white). The vertical scale is exagerated.} # \begin{center} # \htmladdnormallinkfoot{\includegraphics[width=0.6\hsize]{hump.eps}}{hump.mpg} # \end{center} # \end{figure} # # Figure \ref{evolution} illustrates the free surface and # corresponding adaptive mesh evolution. This figure agrees well with # the results reported by # \htmladdnormallinkfoot{LeVeque}{http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.57.5450} # using a non-adaptive high-resolution Godunov method (Figure 7, right # column, note that the resolution of the results by LeVeque is # slightly larger: $600\times 300$ compared to $512\times 256$ here). # # \begin{figure}[htbp] # \caption{\label{evolution}Evolution of the free surface and adaptive mesh.} # \begin{center} # \begin{tabular}{cc} # \includegraphics[width=0.5\hsize]{iso-0.6.eps} & # \includegraphics[width=0.5\hsize]{cells-0.6.eps} \\ # \multicolumn{2}{c}{$t = 0.6$} \\ # \includegraphics[width=0.5\hsize]{iso-0.9.eps} & # \includegraphics[width=0.5\hsize]{cells-0.9.eps} \\ # \multicolumn{2}{c}{$t = 0.9$} \\ # \includegraphics[width=0.5\hsize]{iso-1.2.eps} & # \includegraphics[width=0.5\hsize]{cells-1.2.eps} \\ # \multicolumn{2}{c}{$t = 1.2$} \\ # \includegraphics[width=0.5\hsize]{iso-1.5.eps} & # \includegraphics[width=0.5\hsize]{cells-1.5.eps} \\ # \multicolumn{2}{c}{$t = 1.5$} \\ # \includegraphics[width=0.5\hsize]{iso-1.8.eps} & # \includegraphics[width=0.5\hsize]{cells-1.8.eps} \\ # \multicolumn{2}{c}{$t = 1.8$} # \end{tabular} # \end{center} # \end{figure} # # Author: St\'ephane Popinet # Command: gerris2D hump.gfs | gfsview2D hump.gfv | ppm2mpeg > hump.mpg # Version: 1.3.1 # Required files: hump.gfv isolines.gfv cells.gfv # Running time: 7 minutes # Generated files: cells-0.6.eps cells-1.2.eps cells-1.8.eps iso-0.9.eps iso-1.5.eps cells-0.9.eps cells-1.5.eps iso-0.6.eps iso-1.2.eps iso-1.8.eps hump.eps hump.mpg # # Recenter the reference box on (0.5,0.5) (rather than the default (0,0)) 2 1 GfsRiver GfsBox GfsGEdge { x = 0.5 y = 0.5 } { Refine 8 Init {} { # Parabolic hump Zb = 0.8*exp(-5.*(x - 0.9)*(x - 0.9) - 50.*(y - 0.5)*(y - 0.5)) # Initial free surface and perturbation P = (0.05 < x && x < 0.15 ? 1.01 : 1) - Zb } PhysicalParams { g = 1 } AdvectionParams { cfl = 0.5 } AdaptGradient { istep = 1 } { cmax = 1e-4 cfactor = 2 maxlevel = 8 minlevel = 6 } (P + Zb) Time { end = 1.8 } OutputTime { istep = 10 } stderr OutputSimulation { istep = 10 } stdout EventScript { istep = 10 } { echo "Save stdout { width = 640 height = 480 }" } OutputSimulation { start = 0.6 step = 0.3 } sim-%g.gfs EventScript { start = end } { for i in 0.6 0.9 1.2 1.5 1.8; do echo "Save stdout { format = EPS line_width = 0.2 }" | \ gfsview-batch2D sim-$i.gfs isolines.gfv > iso-$i.eps echo "Save stdout { format = EPS line_width = 0.2 }" | \ gfsview-batch2D sim-$i.gfs cells.gfv > cells-$i.eps done echo "Save stdout { width = 1280 height = 960 }" | \ gfsview-batch2D sim-0.9.gfs hump.gfv | convert ppm:- hump.eps } } # "open" boundary conditions on all boundaries GfsBox { left = Boundary { BcNeumann U 0 } top = Boundary { BcNeumann V 0 } bottom = Boundary { BcNeumann V 0 } } GfsBox { right = Boundary { BcNeumann U 0 } top = Boundary { BcNeumann V 0 } bottom = Boundary { BcNeumann V 0 } } 1 2 right