Generalize hazard curve calculator to accept both poissonian and non-poissonian sources

Bug #1247040 reported by Damiano Monelli
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenQuake Hazard Library
Fix Released
High
Damiano Monelli

Bug Description

The current hazard curve calculator assumes sources to be associated to a Poissonian temporal occurrence model (see open quake.hazardlib.calc.hazard_curve.hazard_curve_poissonian). We need to relax this assumption and allow calculation also for non-poissonian and non-parametric sources (see for instance: https://bugs.launchpad.net/oq-hazardlib/+bug/1247029).

This means that the current equation used for calculating the probability of ground motion exceedance:

P(X≥x|T) = 1 - ∏ ∏ (1 - Prup_ij(1_or_more|T)) ** P(X≥x|rup_ij)

must be replace by:

P(X≥x|T) = 1 - ∏ ∏ Prup_ij(X<x|T)

where:

Prup_ij(X<x|T) = ∑Prup_ij(k|T) * P(X<x|rup_ij) ** k for non parametric sources

Prup_ij(X<x|T) = (1 - Prup_ij(1_or_more)) ** P(X≥x|rup_ij) for Poissonian sources

and other formula may be available for other temporal occurrence models.

NOTE:

P(X≥x|T): probability of a ground motion parameter X (e.g. PGA, SA, ..) to exceed ground motion level x, in a time span T.
Prup_ij(1_or_more): probability that the j-th rupture in the i-th source is occurring one or more times in time span T.
P(X≥x|rup_ij): probability that an occurrence of the j-th rupture in the i-th source cause ground motion parameter X to exceed level x
Prup_ij(X<x|T): probability that the j-th rupture in the i-th source does not cause any ground motion exceedance in time span T.
Prup_ij(k|T): probability that the j-th rupture in the i-th source occurs k times in time span T.

To support such case (i.e. source model consisting of poissonian (and/or other parametric temporal occurrence models) and non-parametric sources) we need to rethink the way ruptures are extracted from a source.

In the current set up, the ``iter_ruptures`` method (which allow to access ruptures as generated by a source) requires a temporal occurrence model (openquake.hazardlib.tom). However, in case of a non-parametric source, a temporal occurrence model is not available, because for each rupture probabilities of occurrence are explicitly defined.

A possible solution would be to define a new base class for a seismic source which simply defines an ``iter_ruptures()`` method which does not accept any temporal occurrence model. We can then create two subclasses ('NonParametricSeismicSource' and 'ParametricSeismicSource').

The 'NonParametricSeismicSource' would implement bug: https://bugs.launchpad.net/oq-hazardlib/+bug/1247029

The 'ParametricSeismicSource' would serve as base class for all the existing seismic sources (Point, Area, SimpleFault, ComplexFault, Characteristic). Such class would define the temporal occurrence model as parameter of the constructor (which is then accessed by the ``iter_ruptures`` method for creating the ruptures).

The 'iter_ruptures' method for the 'NonParametricSeismicSource' would return a 'NonParametricProbabilisticRupture' which contains the probability mass function defining rupture occurrence probabilities.

The 'iter_ruptures' method for the 'ParametricSeismicSource' would return a 'ParametricProbabilisticRupture' which is defined, as it is now, by an occurrence rate and a temporal occurrence model.

Both the 'NonParametricProbabilisticRupture' and 'ParametricProbabilisticRupture' would extend a base class which defines a method that we can call 'get_probability_no_exceedance' which is basically responsible for calculating Prup_ij(X<x|T). The way such quantity is then calculated depends on the subclass.

Revision history for this message
Damiano Monelli (monelli) wrote :
Changed in oq-hazardlib:
importance: Undecided → High
assignee: nobody → Damiano Monelli (monelli)
status: New → Fix Committed
Changed in oq-hazardlib:
milestone: none → 0.12
Changed in oq-hazardlib:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.