.. _fgmax_5_2_0:
=====================
Fixed grid monitoring
=====================
.. warning::
This feature has been modified and this documentation describes
the version introduced in 5.2.0.
The documentation is also still incomplete.
GeoClaw has the capability to monitor certain quantities on a specified
"fixed grid" by interpolating from the AMR grids active at each time step,
or at specified time increments.
This is useful in particular to record the maximum flow depth observed at
each point over the course of a computation, or the maximum flow velocity,
momentum, or momentum flux. These quantities are often of interest in
hazard modeling.
It is also possible to record the *arrival time* of a flow or wave at each
point on the grid.
The "grids" do not have to be rectangular grids aligned with the
coordinate directions, but can consist of an arbitrary list of points
that could also be points along a one-dimensional transect or points
following a coastline, for example.
Each grid is specified by an input file in a specified form described below.
The list of file names for desired grids is specified in the `setrun`
function, see :ref:`setrun_fgmax`.
This is an improved version of the algorithms used in earlier versions of
GeoClaw, and now
correctly interpolates when a grid point lies near the junction of two
grid patches, which was not always handled properly before.
The earlier version can still be used for outputing results at intermediate
times on a fixed grid (see :ref:`fgout`), but is not recommended for the purpose
of monitoring maxima or arrival times.
.. _fgmax_input:
Input file specification
-------------------------
(changed in Clawpack 5.2.0.)
The input file describing a grid of points has the following form::
tstart_max
tend_max
dt_check
min_level_check
arrival_tol
point_style
followed by additional lines that depend on the value of `point_style`.
If `point_style == 0`, an arbitrary collection of `(x,y)` points is allowed
and all must be listed, preceeded by the number of points::
npts # number of points
x1 y1 # first point
x2 y2 # second point
... # etc.
These points need not lie on a regular grid and can be specified in any order.
If `point_style == 1`, a 1-dimensional transect of points is specified by
three lines of the form::
npts # number of points to generate
x1, y1 # first point
x2, y2 # last point
If `point_style == 2`, a 2-dimensional cartesian of points is specified by
three lines of the form::
nx, ny # number of points in x and y (nx by ny grid)
x1, y1 # lower left corner of cartesian grid
x2, y2 # upper right corner of cartesian grid
The output files will list values for the points in the same order as in the
input file. See `fgmax_processing` for some hints on processing and
plotting the results.
The other paramters in the input file are:
* `tstart_max` : float
starting time to monitor maximum
* `tend_max` : float
ending time to monitor maximum
* `dt_check` : float
time increment for monitoring maximum and arrivals.
Interpolate to fixed grid and
update values only if the time since the last updating exceeds this time
increment. Set to 0 to monitor every time step.
* `min_level_check` : integer
Minimum AMR level to check for updating the maximum value observed and
the arrival time.
Care must be taken in selecting this value since the maximum observed
when interpolating to a point from a coarse AMR level may be much larger
than the value that would be seen on a fine grid that better resolves the
topography at this point. Often AMR "regions" are used to specify that a
fine grid at some level `L` should always be used in the region of
interest over the time period from `start_max` to `tend_max`, and then
it is natural to set `min_level_check` to `L`.
* `arrival_tol` : float
The time reported as the "arrival time" is the first time the value
of the surface elevation is greater than `sea_level` + `arrival_tol`.
.. _fgmax_values:
Values to monitor
-----------------
The values to be monitored are specified by the subroutine `fgmax_values`.
The default subroutine found in the library
`$CLAW/geoclaw/src/2d/shallow/fgmax_values.f90`
is now set up to monitor the
depth `h` (rather than the value `eta_tilde` used in Version 5.1)
and optionally will also monitor the speed :math:`s = \sqrt{u^2 + v^2}`
and three other quantities (the momentum :math:`hs`,
the momentum flux :math:`hs^2`, and :math:`-h`, which is useful to monitor
the minimum depth at each point).
The values monitored by the default routine described above is determined
by the value of the `fgmax_module` variable `FG_NUM_VAL`, which can be set
to 1, 2, or 5. This value is now read in from the data file `fgmax.data`
and can be set by specifying the value of
`rundata.fgmax_data.num_fgmax_val` in `setrun.py`.
Choice of interpolation procedure
---------------------------------
The library routine `geoclaw/src/2d/shallow/fgmax_interpolate.f90` has
been improved in 5.2.0 to fix some bugs. This routine does bilinear
interpolation the finite volume grid centers to the fixed grid in
order to update the maximum of values such as depth or velocity.
An alternative version of this routine has been added in 5.2.0
that does piecewise constant interpolation instead. This simply uses the
value in the finite volume grid cell that contains the fixed grid
point (0 order extrapolation) and avoids problems sometimes seen when
doing linear interpolation near the margins of the flow.
This routine is in `fgmax_interpolate0.f90` and is now recommended.
To use this routine, modify the `Makefile` in an application directory to
replace the line ::
$(GEOLIB)/fgmax_interpolate.f90 \
by ::
$(GEOLIB)/fgmax_interpolate0.f90 \
.. _fgmax_processing:
Processing and plotting fgmax output
------------------------------------
For an example see `apps/tsunami/chile2010_fgmax` in the :ref:`apps`.
To obtain this, see :ref:`apps`.
**Describe further.**