3.13. RotDxx of Other Intensity Measures

imcalculator.get_rotdxx_amplitude_ims(acc2, percentile=50, highpass_hz=0.05)[source]

Computes the RotDxx PGA, PGV and PGD.

Acceleration, velocity and displacement are linear in the record, so the drift-corrected histories of each component (see get_vel_disp_history) are rotated to the 180 angles 0°, 1°, …, 179°; the peak absolute value is taken at every angle and the percentile of the 180 peaks is returned.

Parameters:
  • acc2 (array_like) – Second horizontal component, same length and unit as the first one.

  • percentile (float, optional) – Percentile across angles (50 = RotD50, 100 = RotD100).

  • highpass_hz (float or None, optional) – Corner frequency (Hz) of the drift-correcting high-pass filter, as in get_amplitude_ims.

Returns:

  • pga (float) – RotDxx peak ground acceleration (g).

  • pgv (float) – RotDxx peak ground velocity (m/s).

  • pgd (float) – RotDxx peak ground displacement (m).

imcalculator.get_rotdxx_cav(acc2, percentile=50)[source]

Computes the RotDxx Cumulative Absolute Velocity.

CAV is not linear in the record, so it is recomputed on the rotated accelerogram at each of the 180 angles and the percentile across angles is returned.

Parameters:
  • acc2 (array_like) – Second horizontal component, same length and unit as the first one.

  • percentile (float, optional) – Percentile across angles (50 = RotD50, 100 = RotD100).

Returns:

cav – RotDxx cumulative absolute velocity (m/s).

Return type:

float

imcalculator.get_rotdxx_arias_duration(acc2, percentile=50, start=0.05, end=0.95)[source]

Computes the RotDxx Arias Intensity and significant duration.

The rotated cumulative Arias Intensity is a quadratic form of the two components, so it is assembled from the cumulative sums of a1², a2² and a1·a2 at each of the 180 angles (no rotated record is built). The percentile across angles of the final Arias Intensity and of the time between the start and end fractions of it is returned.

Parameters:
  • acc2 (array_like) – Second horizontal component, same length and unit as the first one.

  • percentile (float, optional) – Percentile across angles (50 = RotD50, 100 = RotD100).

  • start (float, optional) – Fractions of the normalised Arias Intensity defining the duration. Default is 0.05 and 0.95 (D5-95).

  • end (float, optional) – Fractions of the normalised Arias Intensity defining the duration. Default is 0.05 and 0.95 (D5-95).

Returns:

  • ai (float) – RotDxx Arias Intensity (m/s).

  • duration (float) – RotDxx significant duration (s).

imcalculator.get_rotdxx_saavg(acc2, period=None, periods_list=None, percentile=50, damping_ratio=None)[source]

Computes the RotDxx average spectral acceleration.

The geometric mean of the spectral accelerations is taken at every rotation angle (not of the RotDxx spectrum), and the percentile of the 180 values is returned, i.e. RotDxx of the AvgSA definition. The oscillators are integrated at the exact periods (no interpolation on a spectrum grid).

Parameters:
  • acc2 (array_like) – Second horizontal component, same length and unit as the first one.

  • period (float, optional) – Conditioning period (s): AvgSA over 10 equally spaced periods in [0.2*period, 1.5*period], as in get_saavg.

  • periods_list (array_like, optional) – User-defined periods (s), as in get_saavg_user_defined. Takes precedence over period.

  • percentile (float, optional) – Percentile across angles (50 = RotD50, 100 = RotD100).

  • damping_ratio (float, optional) – Oscillator damping. Defaults to self.damping.

Returns:

saavg – RotDxx average spectral acceleration (g).

Return type:

float

imcalculator.get_rotdxx_FIV3(acc2, period, alpha, beta, percentile=50)[source]

Computes the RotDxx filtered incremental velocity (FIV3).

The FIV series (low-pass filter plus window integral) is linear in the record, so the series of the two components are rotated and only the peak/trough picking of get_FIV3 is repeated at each of the 180 angles.

Parameters:
  • acc2 (array_like) – Second horizontal component, same length and unit as the first one.

  • period (float) – As in get_FIV3.

  • alpha (float) – As in get_FIV3.

  • beta (float) – As in get_FIV3.

  • percentile (float, optional) – Percentile across angles (50 = RotD50, 100 = RotD100).

Returns:

FIV3 – RotDxx FIV3 (g·s).

Return type:

float

Theoretical Background

get_rotdxx gives the RotDxx response spectrum. The methods above extend the same definition (Boore, 2010) to the other intensity measures: the IM is evaluated on the rotated accelerogram

\[a_\theta(t) = a_1(t)\cos\theta + a_2(t)\sin\theta, \qquad \theta \in \{0°, 1°, \ldots, 179°\}\]

and RotDxx is the xx-th percentile of the 180 values (RotD50 is the median, RotD100 the maximum). The percentile is taken of the IM, not of an intermediate quantity, so for example the RotD50 of AvgSA is the median over angles of the AvgSA of each rotated record, which is not the AvgSA of the RotD50 spectrum.

The cost depends on how the IM depends on the record:

  • Linear quantities (PGA, PGV, PGD, the SDOF displacement histories behind SA/AvgSA, and the FIV series of FIV3) are computed once per component and rotated, \(x_\theta = x_1\cos\theta + x_2\sin\theta\). The result is identical to recomputing at each angle. For PGV and PGD the drift-corrected histories of get_vel_disp_history are rotated, so the highpass_hz argument applies as in get_amplitude_ims.

  • Arias Intensity and significant duration are quadratic in the record. The rotated cumulative energy is assembled from the cumulative sums of \(a_1^2\), \(a_2^2\) and \(a_1 a_2\):

    \[E_\theta(t) = \cos^2\theta\, E_{11}(t) + \sin^2\theta\, E_{22}(t) + 2\sin\theta\cos\theta\, E_{12}(t)\]

    so no rotated record is built; the duration is the time between the requested fractions of \(E_\theta / E_\theta(T_d)\).

  • CAV involves \(|a_\theta|\) and is recomputed at each angle.

  • FIV3 rotates the two FIV series; only the peak and trough picking is repeated at each angle.

AvgSA. The geometric mean over the periods is taken at each angle and the oscillators are integrated at the exact periods (no interpolation on a spectrum grid). Either a conditioning period (10 periods in \([0.2T, 1.5T]\), as in get_saavg) or a user-defined list of periods can be given.

Units are those of the single-component methods: PGA in g, PGV in m/s, PGD in m, CAV and Arias Intensity in m/s, duration in s, AvgSA in g and FIV3 in g·s. Both components must have the same length and unit.

Example

import numpy as np
from openquake.vmtk.imcalculator import imcalculator

acc1 = np.loadtxt("openquake/vmtk/tests/test_data/acceleration.txt")
acc2 = acc1 * 0.85   # synthetic orthogonal component
im = imcalculator(acc1, dt=0.005)

pga, pgv, pgd = im.get_rotdxx_amplitude_ims(acc2, percentile=50)
cav = im.get_rotdxx_cav(acc2)
ai, d595 = im.get_rotdxx_arias_duration(acc2)
avgsa = im.get_rotdxx_saavg(acc2, period=1.0)
fiv3 = im.get_rotdxx_FIV3(acc2, period=1.0, alpha=0.7, beta=0.85)
print(f"RotD50 PGA = {pga:.4f} g, AvgSA(1.0 s) = {avgsa:.4f} g")