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