source: anuga_work/publications/anuga_2007/anuga_validation.tex @ 4895

Last change on this file since 4895 was 4895, checked in by duncan, 16 years ago

working on ANUGA report.

File size: 23.8 KB
Line 
1% Use the standard \LaTeXe\ article style in 12pt Computer Modern font
2% on A4 paper by
3\documentclass[12pt,a4paper]{article}
4
5% Do \emph{not} change the width nor the height of the text from the
6% defaults set by this document class.
7%
8% The alternative which is closer to what we actually use is
9%\documentclass[11pt,a5paper]{article}
10%\usepackage[a5paper]{geometry}
11% Because it is a great size for on screen reading
12% and prints nicely on a4paper either 2up or booklet.
13
14% The preamble is to contain your own \LaTeX\ commands and to say
15% what packages to use.  Three useful packages are the following:
16\usepackage{graphicx} % avoid epsfig or earlier such packages
17\usepackage{url}      % for URLs and DOIs
18\newcommand{\doi}[1]{\url{http://dx.doi.org/#1}}
19\usepackage{amsmath}  % many want amsmath extensions
20\usepackage{amsfonts}
21\usepackage{underscore}
22% Avoid loading unused packages (as done by some \LaTeX\ editors).
23
24% Create title and authors using \verb|\maketitle|.  Separate authors by
25% \verb|\and| and put addresses in \verb|\thanks| command with
26% \verb|\url| command \verb|\protect|ed.
27\title{On The Validation of A Hydrodynamic Model}
28
29\author{
30D.~S.~Gray\thanks{Natural Hazard Impacts Project, Geospatial and
31Earth Monitoring Division, Geoscience Australia, Symonston,
32\textsc{Australia}. \protect\url{mailto:Duncan.Gray@ga.gov.au}}\footnotemark[1]
33\and
34T.~Baldock\thanks{University of Queensland, Brisbane, \textsc{Australia}.
35\protect\url{mailto:tom.baldock@uq.edu.au}}\footnotemark[2]
36\and
37O.~M.~Nielsen\footnotemark[1]
38\and 
39M.~J.~Sexton\footnotemark[1]
40\and
41N.~Bartzis\footnotemark[1]
42\and
43S.~G.~Roberts\thanks{Department of Mathematics, Australian National University,
44Canberra, \textsc{Australia}. \protect\url{mailto:stephen.roberts@anu.edu.au}}}
45
46\date{30 May 2008}
47
48\newcommand{\ANUGA}{\textsc{ANUGA}}
49\newcommand{\Python}{\textsc{Python}}
50\newcommand{\VPython}{\textsc{VPython}}
51\newcommand{\pypar}{\textsc{mpi}}
52\newcommand{\Metis}{\textsc{Metis}}
53\newcommand{\mpi}{\textsc{mpi}}
54
55\newcommand{\UU}{\mathbf{U}}
56\newcommand{\VV}{\mathbf{V}}
57\newcommand{\EE}{\mathbf{E}}
58\newcommand{\GG}{\mathbf{G}}
59\newcommand{\FF}{\mathbf{F}}
60\newcommand{\HH}{\mathbf{H}}
61\newcommand{\SSS}{\mathbf{S}}
62\newcommand{\nn}{\mathbf{n}}
63
64\newcommand{\code}[1]{\texttt{#1}}
65
66
67
68\begin{document}
69
70% Use default \verb|\maketitle|.
71\maketitle
72
73% Use the \verb|abstract| environment.
74\begin{abstract}
75Modelling the effects on the built environment of natural hazards such
76as riverine flooding, storm surges and tsunami is critical for
77understanding their economic and social impact on our urban
78communities.  Geoscience Australia and the Australian National
79University have developed a hydrodynamic inundation modelling tool
80called \ANUGA{} to help simulate the impact of these hazards.
81The core of \ANUGA{} is a \Python{} implementation of a finite-volume method
82for solving the conservative form of the Shallow Water Wave equation.
83In this paper we describe the model, the architecture and a range of
84validations that have been carried out to establish confidence in the model.
85
86
87\ANUGA{} is available as Open Source to enable
88free access to the software and allow the scientific community to
89use, validate and contribute to the software in the future.
90
91%This method allows the study area to be represented by an unstructured
92%mesh with variable resolution to suit the particular problem.  The
93%conserved quantities are water level (stage) and horizontal momentum.
94%An important capability of ANUGA is that it can robustly model the
95%process of wetting and drying as water enters and leaves an area. This
96%means that it is suitable for simulating water flow onto a beach or
97%dry land and around structures such as buildings.
98
99
100\end{abstract}
101
102% By default we include a table of contents in each paper.
103%\tableofcontents
104
105% Use \verb|\section|, \verb|\subsection|, \verb|\subsubsection| and
106% possibly \verb|\paragraph| to structure your document.  Make sure
107% you \verb|\label| them for cross-referencing with \verb|\ref|\,.
108
109%\clearpage
110\section{Introduction}
111\label{sec:intro}
112
113The Indian Ocean tsunami on 26 December 2004 demonstrated the
114potentially catastrophic consequences of natural hazards.  While the
115scale of the impact from such events is not common, smaller-scale
116tsunami regularly threaten coastal communities
117around the world. Earthquakes which occur in the Java Trench near
118Indonesia (e.g.~\cite{TsuMIS1995} or \cite{Baldwin-2006}) and along
119the Puysegur Ridge to the south of New Zealand (e.g.~\cite{LebKC1998})
120have potential to generate tsunami that may threaten Australia's
121northwestern and southeastern coastlines. In addition, the
122preferential development of Australian coastal corridors means that
123inundation from hydrological disasters such as tsunami or storm-surge
124of even a few hundred metres beyond the shoreline has increased
125potential to cause significant disruption and loss. The extent of
126inundation is critically linked to the event, tidal conditions,
127bathymetry and topography and it not feasible to make impact
128predictions using heuristics alone.
129
130Hydrodynamic modelling allows impacts from flooding, storm-surge and
131tsunami to be better understood, their impacts to be anticipated and,
132with appropriate planning, their effects to be mitigated.  Geoscience
133Australia in collaboration with the Mathematical Sciences Institute,
134Australian National University, is developing a software application
135called \ANUGA{} to model the hydrodynamics of floods, storm surges and
136tsunami. These hazards are modelled using the conservative shallow
137water equations which are described in section~\ref{sec:model}. In
138\ANUGA{} these equations are solved using a finite volume method as
139described in section~\ref{sec:fvm}.  A more complete discussion of the
140method can be found in \cite{modsim2005} where the model and solution
141technique is validated on a standard tsunami benchmark data set.
142Section~\ref{sec:software} describes the software implementation and
143the API while section~\ref{sec:validation} presents some
144validation results.
145
146
147\section{Model}
148\label{sec:model}
149
150The shallow water wave equations are a system of differential
151conservation equations which describe the flow of a thin layer of
152fluid over terrain. The form of the equations are:
153\[
154\frac{\partial \UU}{\partial t}+\frac{\partial \EE}{\partial
155x}+\frac{\partial \GG}{\partial y}=\SSS
156\]
157where $\UU=\left[ {{\begin{array}{*{20}c}
158 h & {uh} & {vh} \\
159\end{array} }} \right]^T$ is the vector of conserved quantities; water depth
160$h$, $x$-momentum $uh$ and $y$-momentum $vh$. Other quantities
161entering the system are bed elevation $z$ and stage (absolute water
162level) $w$, where the relation $w = z + h$ holds true at all times.
163The fluxes in the $x$ and $y$ directions, $\EE$ and $\GG$ are given
164by
165\[
166\EE=\left[ {{\begin{array}{*{20}c}
167 {uh} \hfill \\
168 {u^2h+gh^2/2} \hfill \\
169 {uvh} \hfill \\
170\end{array} }} \right]\mbox{ and }\GG=\left[ {{\begin{array}{*{20}c}
171 {vh} \hfill \\
172 {vuh} \hfill \\
173 {v^2h+gh^2/2} \hfill \\
174\end{array} }} \right]
175\]
176and the source term (which includes gravity and friction) is given
177by
178\[
179\SSS=\left[ {{\begin{array}{*{20}c}
180 0 \hfill \\
181 -{gh(z_{x} + S_{fx} )} \hfill \\
182 -{gh(z_{y} + S_{fy} )} \hfill \\
183\end{array} }} \right]
184\]
185where $S_f$ is the bed friction. The friction term is modelled using
186Manning's resistance law
187\[
188S_{fx} =\frac{u\eta ^2\sqrt {u^2+v^2} }{h^{4/3}}\mbox{ and }S_{fy}
189=\frac{v\eta ^2\sqrt {u^2+v^2} }{h^{4/3}}
190\]
191in which $\eta$ is the Manning resistance coefficient.
192
193As demonstrated in our papers, \cite{modsim2005,Rob99l} these
194equations provide an excellent model of flows associated with
195inundation such as dam breaks and tsunamis.
196
197\section{Finite Volume Method}
198\label{sec:fvm}
199
200We use a finite-volume method for solving the shallow water wave
201equations \cite{Rob99l}. The study area is represented by a mesh of
202triangular cells as in Figure~\ref{fig:mesh} in which the conserved
203quantities of  water depth $h$, and horizontal momentum $(uh, vh)$,
204in each volume are to be determined. The size of the triangles may
205be varied within the mesh to allow greater resolution in regions of
206particular interest.
207
208\begin{figure}
209\begin{center}
210\includegraphics[width=5.0cm,keepaspectratio=true]{step-five}
211\caption{Triangular mesh used in our finite volume method. Conserved
212quantities $h$, $uh$ and $vh$ are associated with the centroid of
213each triangular cell.} \label{fig:mesh}
214\end{center}
215\end{figure}
216
217The equations constituting the finite-volume method are obtained by
218integrating the differential conservation equations over each
219triangular cell of the mesh. Introducing some notation we use $i$ to
220refer to the $i$th triangular cell $T_i$, and ${\cal N}(i)$ to the
221set of indices referring to the cells neighbouring the $i$th cell.
222Then $A_i$ is the area of the $i$th triangular cell and $l_{ij}$ is
223the length of the edge between the $i$th and $j$th cells.
224
225By applying the divergence theorem we obtain for each volume an
226equation which describes the rate of change of the average of the
227conserved quantities within each cell, in terms of the fluxes across
228the edges of the cells and the effect of the source terms. In
229particular, rate equations associated with each cell have the form
230$$
231 \frac{d\UU_i }{dt}+ \frac1{A_i}\sum\limits_{j\in{\cal N}(i)} \HH_{ij} l_{ij} = \SSS_i
232$$
233where
234\begin{itemize}
235\item $\UU_i$ the vector of conserved quantities averaged over the $i$th cell,
236\item $\SSS_i$ is the source term associated with the $i$th cell,
237and
238\item $\HH_{ij}$ is the outward normal flux of
239material across the \textit{ij}th edge.
240\end{itemize}
241
242
243%\item $l_{ij}$ is the length of the edge between the $i$th and $j$th
244%cells
245%\item $m_{ij}$ is the midpoint of
246%the \textit{ij}th edge,
247%\item
248%$\mathbf{n}_{ij} = (n_{ij,1} , n_{ij,2})$is the outward pointing
249%normal along the \textit{ij}th edge, and The
250
251The flux $\HH_{ij}$ is evaluated using a numerical flux function
252$\HH(\cdot, \cdot ; \ \cdot)$ which is consistent with the shallow
253water flux in the sense that for all conservation vectors $\UU$ and normal vectors $\nn$
254$$
255H(\UU,\UU;\ \nn) = \EE(\UU) n_1 + \GG(\UU) n_2 .
256$$
257
258Then
259$$
260\HH_{ij}  = \HH(\UU_i(m_{ij}),
261\UU_j(m_{ij}); \mathbf{n}_{ij})
262$$
263where $m_{ij}$ is the midpoint of the \textit{ij}th edge and
264$\mathbf{n}_{ij}$ is the outward pointing normal, with respect to the $i$th cell, on the
265\textit{ij}th edge. The function $\UU_i(x)$ for $x \in
266T_i$ is obtained from the vector $\UU_k$ of conserved average values for the $i$th and
267neighbouring  cells.
268
269We use a second order reconstruction to produce a piece-wise linear
270function construction of the conserved quantities for  all $x \in
271T_i$ for each cell (see Figure~\ref{fig:mesh:reconstruct}. This
272function is allowed to be discontinuous across the edges of the
273cells, but the slope of this function is limited to avoid
274artificially introduced oscillations.
275
276Godunov's method (see \cite{Toro-92}) involves calculating the
277numerical flux function $\HH(\cdot, \cdot ; \ \cdot)$ by exactly
278solving the corresponding one dimensional Riemann problem normal to
279the edge. We use the central-upwind scheme of \cite{KurNP2001} to
280calculate an approximation of the flux across each edge.
281
282\begin{figure}
283\begin{center}
284\includegraphics[width=5.0cm,keepaspectratio=true]{step-reconstruct}
285\caption{From the values of the conserved quantities at the centroid
286of the cell and its neighbouring cells, a discontinuous piecewise
287linear reconstruction of the conserved quantities is obtained.}
288\label{fig:mesh:reconstruct}
289\end{center}
290\end{figure}
291
292In the computations presented in this paper we use an explicit Euler
293time stepping method with variable timestepping adapted to the
294observed CFL condition.
295
296
297\section{Software Implementation}
298\label{sec:software}
299
300\ANUGA{} is mostly written in the object-oriented programming
301language \Python{} with computationally intensive parts implemented
302as highly optimised shared objects written in C.
303
304\Python{} is known for its clarity, elegance, efficiency and
305reliability. Complex software can be built in \Python{} without undue
306distractions arising from idiosyncrasies of the underlying software
307language syntax. In addition, \Python{}'s automatic memory management,
308dynamic typing, object model and vast number of libraries means that
309software can be produced quickly and can be readily adapted to
310changing requirements throughout its lifetime.
311
312The fundamental object in \ANUGA{} is the \code{Domain} which
313inherits functionality from a hierarchy of increasingly specialised
314classes starting with a basic structural Mesh to classes implementing
315the finite-volume scheme described in section \ref{sec:fvm}. Other classes
316are \code{Quantity} which represents values of one variable across the mesh
317along with their associated operations, \code{Geospatial_data} which
318represents georeferenced elevation data and a collection of \code{Boundary}
319classes which allows for a 'pluggable' way of driving the model.
320The conserved quantities updated automatically by the numerical scheme
321are stage (water level) $w$, $x$-momentum $uh$ and $y$-momentum
322$vh$. The quanitites elevation $z$ and friction $\eta$ are
323quantities that are not updated automatically but can be changed explicitly
324during run-time if the user wishes to do so.
325
326To set up a scenario the user specifies the study area along with any internal
327regions where increased mesh resolution is required. External edges may
328be labelled using symbolic tags which are subsequently used to bind
329boundary condition objects to tagged segments of the mesh boundary.
330The mesh is then generated using \ANUGA{}'s built-in mesh generator and
331converted into the \code{Domain} object which provides all methods used to
332setup and run the flow simulation. Figure \ref{fig:anuga mesh} shows an example of a mesh generated by \ANUGA{}.
333\begin{figure}
334\begin{center}
335\includegraphics[width=4in,keepaspectratio=true]{triangular-mesh}
336\caption{Triangular mesh used in our finite volume method. Conserved
337quantities $h$, $uh$ and $vh$ are associated with each triangular cell.}
338\label{fig:anuga mesh}
339\end{center}
340\end{figure}
341
342
343
344Next step is to setup initial conditions for each \code{Quantity} object. For
345the elevation $z$ this is typically obtained from bathymetric and
346topographic data sets. Setting initial values for quantities is done
347through the method \code{domain.set_quantity(name, X, location,
348region)} where name is the name of the quantity (e.g.\ 'stage',
349'xmomentum', 'ymomentum', 'elevation' or 'friction').  The variable X
350represents the source data for populating the quantity and may take
351one of the following forms:
352
353\begin{itemize}
354\item A constant value as in \code{domain.set_quantity('stage', 1)} which
355will set the initial water level to 1 m everywhere.
356\item Another quantity or a linear combination of quantities.  If \code{q1}
357and \code{q2} are two arbitrary quantities defined within the same domain,
358the expression \code{domain.set_quantity('stage', q1*(3*q2 + 5))} will set the stage
359quantity accordingly.  One common application of this would be to
360assign the stage as a constant depth above the bed elevation.
361\item An arbitrary function (or a callable object), \code{f(x, y)}, where \code{x}
362and \code{y} are assumed to be vectors. The quantity will be assigned values by
363evaluating \code{f} at each location within the mesh.
364\item An arbitrary set of points and associated values (wrapped into a
365Geospatial_data object). The points need not coincide with triangle
366vertices or centroids and a penalised least squares technique is
367employed to populate the quantity in a smooth and stable way.
368Since the least squares technique can be time consuming for large
369problems, \code{set_quantity} employs a caching technique which automatically
370decides whether to perform the computations or retrieve them from a
371cache.  This will typically speed up the build by several orders of
372magnitude after each computation has been performed once.
373\item A filename containing points and attributes.
374\item A Numerical Python array (or a list of numbers) ordered
375according to the internal data structure.
376\end{itemize}
377The parameter \code{location} determines whether the values should be
378assigned to triangle edge, midpoints or vertices and \code{region} allows the
379operation to be restricted to a region specified by a symbolic tag or
380a set of indices.
381
382Boundary conditions are bound to symbolic tags through the method
383\code{domain.set_boundary} which takes as input a lookup table (implemented
384as a Python dictionary) of the form \code{\{tag:~boundary_object\}}.
385The boundary objects are all assumed to be callable functions of vectors x
386and y.  Several predefined standard boundary objects are available and
387it is relatively straightforward to define problem-specific custom
388boundaries if needed.  The predefined boundary conditions include
389Dirichlet, Reflective, Transmissive, Temporal, and Spatio-Temporal
390boundaries.
391
392Forcing terms can be written according to a fixed protocol and added
393to the model using the idiom \code{domain.forcing_terms.append(F)} where \code{F} is
394assumed to be a user-defined callable object.
395
396When the simulation is running, the length of each time step is
397determined from the maximal speeds encountered and the sizes of
398triangles in order not to violate the CFL condition which specifies
399that no information should skip any triangles in one time step.  With
400large speeds and small triangles, time steps can become very small.
401In order to access the state of the simulation at regular time
402intervals, \ANUGA{} uses the method evolve:
403\begin{verbatim}
404For t in domain.evolve(yieldstep, duration):
405    <model interrogation and modification>
406\end{verbatim}
407The parameter \code{duration} specifies the time period over which
408evolve operates, and control is passed to the body of the for-loop at
409each fixed time step called \code{yieldstep}.  The internal workings
410of the numerical scheme and its variable time stepping are thus
411decoupled from the fixed time stepping of the evolve loop.  This means
412that the user of the API may access the model at fixed timesteps to
413e.g.\ store model outputs, interrogate quantities or change the model
414itself at runtime. The evolve method has been implemented using a
415Python generator hence the reference to 'yield' in the parameter name.
416
417Figure \ref{fig:beach runup} shows a simulation of water flowing onto a
418hypothetical beach with obstacles.
419A number of complex patterns are captured in this example including a shock where water reflected off the wall far (at the right hand side) meets the main flow. Other physical features are the standing waves and interference patterns.
420See the \ANUGA{} User Manual at \url{http://sourceforge.net/projects/anuga} for more details and examples.
421\begin{figure}
422\begin{center}
423\includegraphics[width=4in,keepaspectratio=true]{runup}
424\caption{A hypothetical runup scenario.}
425\label{fig:beach runup}
426\end{center}
427\end{figure}
428
429
430
431\section{Validation}
432\label{sec:validation} The process of validating the \ANUGA{}
433application is in its early stages, however initial indications are
434encouraging.
435
436As part of the Third International Workshop on Long-wave Runup
437Models in 2004 (\url{http://www.cee.cornell.edu/longwave}), four
438benchmark problems were specified to allow the comparison of
439numerical, analytical and physical models with laboratory and field
440data. One of these problems describes a wave tank simulation of the
4411993 Okushiri Island tsunami off Hokkaido, Japan \cite{MatH2001}. A
442significant feature of this tsunami was a maximum run-up of 32~m
443observed at the head of the Monai Valley. This run-up was not
444uniform along the coast and is thought to have resulted from a
445particular topographic effect. Among other features, simulations of
446the Hokkaido tsunami should capture this run-up phenomenon.
447
448\begin{figure}[htbp]
449\centerline{\includegraphics[width=4in]{okushiri-gauge-5.eps}}
450\caption{Comparison of wave tank and \ANUGA{} water stages at gauge
4515.}\label{fig:val}
452\end{figure}
453
454
455\begin{figure}[htbp]
456\centerline{\includegraphics[width=4in]{okushiri-model.eps}}
457\caption{Complex reflection patterns and run-up into Monai Valley
458simulated by \ANUGA{} and visualised using our netcdf OSG
459viewer.}\label{fig:run}
460\end{figure}
461
462
463The wave tank simulation of the Hokkaido tsunami was used as the
464first scenario for validating \ANUGA{}. The dataset provided
465bathymetry and topography along with initial water depth and the
466wave specifications. The dataset also contained water depth time
467series from three wave gauges situated offshore from the simulated
468inundation area.
469
470Figure~\ref{fig:val} compares the observed wave tank and modelled
471\ANUGA{} water depth (stage height) at one of the gauges. The plots
472show good agreement between the two time series, with \ANUGA{}
473closely modelling the initial draw down, the wave shoulder and the
474subsequent reflections. The discrepancy between modelled and
475simulated data in the first 10 seconds is due to the initial
476condition in the physical tank not being uniformly zero. Similarly
477good comparisons are evident with data from the other two gauges.
478Additionally, \ANUGA{} replicates exceptionally well the 32~m Monai
479Valley run-up, and demonstrates its occurrence to be due to the
480interaction of the tsunami wave with two juxtaposed valleys above
481the coastline. The run-up is depicted in Figure~\ref{fig:run}.
482
483This successful replication of the tsunami wave tank simulation on a
484complex 3D beach is a positive first step in validating the \ANUGA{}
485modelling capability.
486
487
488% Validation UQ flume
489% at X:\anuga_validation\uq_flume_2007
490% run run_dam.py to create sww file and .csv files
491% run plot.py to create graphs, and move them here
492\begin{figure}[htbp]
493\centerline{\includegraphics[width=4in]{uq-flume-depth.eps}}
494\caption{Comparison of wave tank and \ANUGA{} water height at .4 m
495  from the gate}\label{fig:uq-flume-depth}
496\end{figure}
497
498\begin{figure}[htbp]
499\centerline{\includegraphics[width=4in]{uq-flume-velocity.eps}}
500\caption{Comparison of wave tank and \ANUGA{} water velocity at .45 m
501  from the gate}\label{fig:uq-flume-depth}
502\end{figure}
503
504Flume data from the University of Queensland has also been used for
505validating \ANUGA{}.  The experiments were carried out at the Gordon
506McKay Hydraulics Laboratory at St Lucia.  The Flume was set up for
507Dam-break experiments, having a water reservior at one end.  The flume
508was glass-sided, 3m long, 0.4m in wide, and 0.4m deep (check
509depth), with a PVC bottom. The reservoir in the flume was 0.75m long.
510For this experiment the reservoir water was 0.2m deep. At time zero
511the reservoir gate is opened and the water flows into the other side
512of the flume.
513
514
515% Validation UQ friction
516% at X:\anuga_validation\uq_friction_2007
517% run run_dam.py to create sww file and .csv files
518% run plot.py to create graphs, and move them here
519\begin{figure}[htbp]
520\centerline{\includegraphics[width=4in]{uq-friction-depth.eps}}
521\caption{Comparison of wave tank and \ANUGA{} water height at .4 m
522  from the gate, simulated using a Mannings friction of 0.0 and 0.1.}\label{fig:uq-friction-depth}
523\end{figure}
524
525\section{Conclusions}
526\label{sec:6}
527\ANUGA{} is a flexible and robust modelling system
528that simulates hydrodynamics by solving the shallow water wave
529equation in a triangular mesh. It can model the process of wetting
530and drying as water enters and leaves an area and is capable of
531capturing hydraulic shocks due to the ability of the finite-volume
532method to accommodate discontinuities in the solution.
533\ANUGA{} can take as input bathymetric and topographic datasets and
534simulate the behaviour of riverine flooding, storm surge,
535tsunami or even dam breaks.
536Initial validation using wave tank data supports \ANUGA{}'s
537ability to model complex scenarios. Further validation will be
538pursued as additional datasets become available.
539\ANUGA{} is already being used to model the behaviour of
540hydrodynamic natural hazards. This modelling capability is part of
541Geoscience Australia's ongoing research effort to model and
542understand the potential impact from natural hazards in order to
543reduce their impact on Australian communities (see \cite{Nielsen2006}).
544The \ANUGA{} source code is available
545at \url{http://sourceforge.net/projects/anuga}.
546
547\bibliographystyle{plain}
548\bibliography{anuga-bibliography}
549
550
551
552
553\end{document}
Note: See TracBrowser for help on using the repository browser.