The goal of probabilistic tsunami hazard assessment (PTHA) is often to create a hazard map that shows what regions of a community are most at risk and that indicates in some manner the annual probability that inundation will occur above some level in these regions. The notebook Tsunami Hazard Maps shows some hazard maps from a recent study of Crescent City, CA.
A key ingredient in making any such map is the hazard curve computed at many geographical locations (typically at each point on some grid of points covering the community of interest). The focus in this notebook is understanding how one such hazard curve is constructed. So we are considering a fixed geographic location and looking at the probability that the maximum inundation depth exceeds some value as varies.
Note that this probability will be a non-increasing function of , i.e., if then since any event that inundates above depth also inundates above depth .
Also note that is the annual probability that there is inundation deeper than , i.e., the probability that there is any flooding at all. If then for all and this is a point that has 0 probability of ever getting wet, i.e., it is completely out of any possible inundation zone.
If at this location then the annual probability is greater than 0.01 that this point will get wet. Such a point is sometimes said to be in the 100-year flood zone.
Set up some things needed for this notebook:¶
%matplotlib inlinefrom pylab import *
from ipywidgets import widgets
from IPython.display import Image, display, Markdown
import sys,os
import hazard_maps_functions as HM
import hazard_curve_functions as HCFor interactive widgets to work, adjust the next cell:¶
Uncomment the second line.
from snapshot_widgets import interact # for static figures
#from ipywidgets import interact # for interactive widgetsWill create static figures with single value of parameters
Poisson process rates and probabilities¶
We assume that we are considering a discrete set of possible events, each of which is a hypothetical earthquake with some specified sea floor motion. Associated with each event we have a rate and we assume that occurance of this event is a Poisson process with this rate. If is in units of average number of occurances per year (typically much less than 1), then the probability of this event happening at least once in a given time period years is:
If we want to compute the annual probability of getting flooding to some level, then we can restrict our attention to year and so .
Note that if is small then Taylor series expansion shows that
So for very small we can view as the annual probability of the event, but this would break down for larger . For example suppose , meaning on average the event happens twice per year. Then the annual probability is obviously not 2. In this case , the annual probability of the event happening at least once, would be in this case.
Return period¶
The return period is defined as (mathematically this is the expected value of the time between events for a Poisson process). For this would be year (6 months), while for the return period would be 100 years (and the annual probability of at least one such event would be , slightly less than ).
For modeling critical infrastructure such as tsunami evacuation towers, some engineering guidelines require considering an event that has “a 2% chance of occurring over a 50-year period”. If the underlying probabilities are assumed to be governed by a Poisson process, then this corresponds to , chosen so that . This event has a return time of 2475 years, but is sometimes informally called the “2500-year event”.
Combining events¶
Now suppose there are two possible events (hypothetical earthquakes) with rates and . Then the combined rate is and the probability that at least one of them occurs (at least once) in time year is given by
Note that we could also compute these using the probabilities and . The probability that neither event occurs is the product of and and so the probaiblity that at least one event occurs is
From this we can also compute that . So if and are both very small then , but for larger probabilities (or when combining many more events) it is necessary to use the formulas above. For events the combined rate is simply .
Hazard curve for a single event¶
First we consider the simplest case where only one possible event might occur. We assume that the occurance of this event is a Poisson process with some rate events per year (i.e., with a 1000-year return time), in which case .
Recall that we are considering some particular fixed location in the community of interest, and suppose our tsunami simulation shows that the maximum depth of inundation at this point will be if this event occurs (measured in meters of water depth). Then we can plot the annual probability that flooding will exceed the value as a function of (the exceedance value). This is a simple piecewise constant function since for any and for any . This plot is shown below.
Note that since we are dealing with very small probabilities and it is important to distinguish between values like 0.01 (100-year flood) and 0.001 (1000-year flood), it is best to plot this using a logarithmic scale in . We do this in the plots on the left below. Note that for all in the plot below, the function value does not show up since .
The plots on the right show the same data plotted with a linear scale in p, since this is somewhat easier to read and understand for these simple examples.
lambda1 = 0.001
h1 = 1.5
E1 = [lambda1,h1]
event_list = [E1] # only one event in this example
h_ev,p_ev = HC.hazard_curve(event_list, 3)
fig = HC.plot_hazard_curve(h_ev,p_ev)
Combining two events¶
The plot above is the hazard curve if we assume only one possible event might happen. What if there are two possible earthquakes that could happen, each of which would cause flooding to different maximum depths, call them and . The events might also have different annual rates, call these and . We will assume that they are independent, meaning that if one happens or not has no effect on whether the other occurs. This is a good assumption if one event is a potential earthquake on the Cascadia subduction zone and the other is a potential earthquake on a different subduction zone. It is perhaps less justified if the two events are two different possible earthquakes in the same place. The occurrance of one Magnitude 9 earthquake on CSZ might eliminate the possibility of another M9 event, or it might increase the occurance of an M8 event as an aftershock. But we will not consider this more complicated case and assume that they are independent events.
The plots below show the new hazard curve if we assume the first event is as above, and we add a new event with and .
E2 = [0.003, 1.0] # the second event
event_list = [E1, E2] # assumes E1 already defined in previous cell
h_ev,p_ev = HC.hazard_curve(event_list, 3)
fig = HC.plot_hazard_curve(h_ev,p_ev)
Note that the probability of exceeding , for example, is still 0.001 since this happens only if Event 1 occurs. The probability of exceeding 0.3 meters (or any below ) has now increased to 0.003992 since this level is exceeded if either Event 1 or Event 2 occurs. Since Event 1 has annual rate 0.001 and Event 2 has annual rate 0.003, the probability that at least one of them occurs in a year is approximately equal to the combined rate, which is .
Interactive plot¶
The plot below allows you to vary the rate and/or the maximum flooding for a second event and see how this affects the hazard curve. In each case the first event is fixed with and .
interact(HC.makefig, h2=widgets.FloatSlider(min=0.5,max=2.5,step=0.5,value=0.5,
description="inundation depth h2"),
lambda2=widgets.FloatSlider(min=5e-4,max=5e-3,step=0.0005,value=0.0005,
readout_format='.4f',description="rate lambda2"));You must run the notebook in order to use the interactive widgets
Using initial widget values: {'h2': 0.5, 'lambda2': 0.0005}

Note the following:¶
Use the slider bar to vary or and observe how the plots change.
Adding the new event causes a new discontinuity in the hazard curve at the value (or adds to the discontinuity at the point in the case ).
The vertical jump in at the point introduced by this event is approximately equal to (Exactly if .)
Try changing when and also when and see how it affects the hazard curve in each case.
Multiple events¶
Now suppose there are additional events , where Event has annual probability of occurring and would cause flooding to depth . Adding each event will cause a new jump in the hazard curve at with the vertical magnitude approximately equal to . The actual probability of at least one event through occuring is computed by generalizing what we did above. The probability that none of the independent events occurs is
and so
For any excedance value , we can compute the probability that we get flooding at this point by combining the probabilities for all the events for which . For example, if only events , and exceed , then
The next hazard curve shows an example with 10 events, each with the same annual rate but with different maximum flooding depths (chosen as random numbers in the interval from 0.5 to 2.5 meters).
An example with many events¶
The next example shows a hazard curve computed from 10 events. All events have the same rate, for , but the values vary between and . They are chosen as random numbers from a uniform distribution over this interval.
This might be viewed as a hazard curve arising from a single event with rate but that has a range of different flooding levels (e.g. tsunamis from a single fault zone what has an earthquake every 50 years on average but for which the magnitude can vary considerably).
from numpy import random
# rand(n) returns array of n random number in interval [0,1]
random.seed(12345) # seed the random number generator
event_list = [] # initialize to empty list
n_events = 10
random_h = 0.5 + 2*rand(n_events)
print("Flooding depths h_k = ",random_h)
for k in range(n_events):
lambda_k = 0.002
hk = random_h[k]
Ek = [lambda_k,hk]
event_list.append(Ek) # add this event to the list
h_ev,p_ev = HC.hazard_curve(event_list, 3)
fig = HC.plot_hazard_curve(h_ev,p_ev)Flooding depths h_k = [2.35923219 1.13275111 0.86783762 0.90912056 1.63545006 1.69108941
2.42902904 1.80635419 1.99781328 1.80713974]

Note:¶
On the linear scale plot, each event has nearly the same jump in . Not quite because of the discussion about combining multiple events, but nearly so. Note the jump around appears twice as big because there happen to be two events with very close together.
On the log scale the jumps look different because of the logarithmic scaling.
The value (the constant value up to ) is not quite equal to , again because of the rule discussed above for combining probabilities. Instead it is equal to .
If we had chosen then we would get , but when dealing with such small probabilities this makes little difference in practice.
Hazard curves for Crescent City¶
The notebook Tsunami Hazard Maps shows some hazard curves from a recent study of Crescent City, CA. The figure below shows a different variant of some of these plots. Hazard curves computed for several different locations in and around Crescent City, indicated by the red dot in the inset map. Use the slider to view different locations.
In each plot, the top green curve is the hazard curve computed when all events are taken into account. The horizontal axis shows an “exceedance value”, in this a depth of flooding, and the vertical axis shows the annual probability that this level will be exceeded. Recall that zeta represents the maximum depth of flooding onshore, or the maximum surface elevation during the tsunami at offshore points.
These figures show three curves. The green hazard curve is obtained when all the events are included and is the full hazard curve that should be used to estimate annual probabilities.
The red hazard curve is the hazard curve that would result if we ignored the Cascadia Subduction Zone (CSZ) and only considered the far field sources (i.e. AASZ, KmSZ, KrSZ, SChSZ, and TOH).
The blue hazard curve shows the annual probabilities when considering CSZ alone, ignoring the far field sources.
At any given exceedance level, the total probability (green curve) is obtained by combining the far field probability and the Cascadia probability via the formula since all these probabilities are quite small. Note that these curves are shown on a logarithmic scale.
def show_hc(k):
display(Image(HM.hc_split_plots[k],width=500))
interact(show_hc,k=widgets.IntSlider(min=0,max=len(HM.hc_split_plots)-1,
value=16));You must run the notebook in order to use the interactive widgets
Using initial widget values: {'k': 16}

Note the following on the plots above:¶
The deepest inundation is associated with CSZ events (the red curve drops to zero probability at a smaller value of zeta, and beyond this the green line lies on top of the blue line for large values of zeta).
For small exceedance values zeta, the green curve lies nearly on top of the red curve. This is because far field sources are much more likely than a CSZ event, and so the probability of low levels of flooding is dominated by the probability of far field events.
Next steps¶
Next you should read the notebook Tsunami Hazard Maps if you haven’t already, to how these curves are combined into maps.
Then the notebook Make Hazard Curves and Maps gives more detail about how to actually implement this, using a sample data set for Crescent City.
- Grezio, A., Babeyko, A., Baptista, M. A., Behrens, J., Costa, A., Davies, G., Geist, E. L., Glimsdal, S., González, F. I., Griffin, J., Harbitz, C. B., LeVeque, R. J., Lorito, S., Løvholt, F., Omira, R., Mueller, C., Paris, R., Parsons, T., Polet, J., … Thio, H. K. (2017). Probabilistic Tsunami Hazard Analysis: Multiple Sources and Global Applications. Reviews of Geophysics, 55(4), 1158–1198. 10.1002/2017rg000579