Random Vibration Theory Parameters
Definition of the custom type RandomVibrationParameters to represent the model components/approaches used for the random vibration theory calculations. In particular, the type stores symbols to define the:
pf_methodthe peak factor model/method to use.dur_exspecifies the excitation duration model to use,dur_rmsspecifies the model to use for converting excitation to RMS duration, anddur_region: the region or tectonic setting for excitation duration predictions, i.e.:ACRor:SCRfor active and stable crustal regions
StochasticGroundMotionSimulation.RandomVibrationParameters — TypeRandomVibrationParametersStruct holding parameters/methods for Random Vibration Theory.
pf_methodis the method used for peak factor computation
- `:DK80` (default) is Der Kiureghian (1980), building on Vanmarcke (1975)
- `:CL56` is Cartwright Longuet-Higgins (1956)dur_exis the model for excitation duration
- `:BT14` (default) is the Boore & Thompson (2014) model for ACRs - note that this is adpated to work with `r_ps`
- `:BT15` is the Boore & Thompson (2015) model for SCRs
- `:BE23` is an excitation duration model from Ben Edwards (2023), suggested for a South African NPP projectdur_rmsis the model for rms duration
- `:BT12` is the Boore & Thompson (2012) model
- `:BT15` (default) is the Boore & Thompson (2015) model
- `:LP99` is the Liu & Pezeshk (1999) model linking rms, excitation and oscillator durationsdur_regionis the region specified for the duration model
- `:ACR` (default) is active crustal regions (like western North America)
- `:SCR` is stable crustal regions (like eastern North America)Note that only certain combinations are meaningful:
:CL56peak factor method should be paired with:BT12or:LP99rms duration:DK80peak factor method should be paired with:BT15rms duration
Constructors that take only the peak factor as input, or the peak factor and duration region automatically assign the appropriate rms duration method.
Note that the default specification is:
RandomVibrationParameters() = RandomVibrationParameters(:DK80, :BT14, :BT15, :ACR)RandomVibrationParameters (generic function with 1 method)However, an alternative constructor exists that takes a pf_method as a single argument, or that take a pf_method and dur_region specification. For these constructors, the dur_rms model is linked to the pf_method peak factor method:
DK80is paired with:BT15, and is the defaultCL56is paired with:BT12
As these are currently the only two dur_rms models implemented, the constructor is specified as:
RandomVibrationParameters(pf) = RandomVibrationParameters(pf, :BT14, ((pf == :DK80) ? :BT15 : :BT12), :ACR)RandomVibrationParameters (generic function with 1 method)In all cases, the Boore & Thompson (2014, 2015) excitation duration model is employed as that is the only model currently implemented. This model uses a standard source duration definition, related to the source corner frequencies, and then applies a path duration model that is purely a function of the equivalent point-source distance. The path duration model depends upon the region, as in active crustal regions or stable crustal regions.
## Functionality
The overall goal of these random vibration methods is to compute:
\[S_a = \psi \sqrt{ \frac{m_0}{D_{rms}}}\]
where $\psi$ is the peak factor computed from peak_factor, $m_0$ is the zeroth order spectral moment computed from spectral_moment, and $D_{rms}$ is the root-mean-square duration computed from dur_rms.
The main methods used to interact with RandomVibrationParameters are:
StochasticGroundMotionSimulation.SpectralMoments — Type@kwdef struct SpectralMoments{T<:Real}Struct holding spectral moments m0 to m4
StochasticGroundMotionSimulation.create_spectral_moments — Functioncreate_spectral_moments(order::Vector{Int}, value::Vector{T}) where {T<:Real}Create a SpectralMoments instance from vectors of order integers and moment values. Allows for encapsulation of named moments within the returned instance.
StochasticGroundMotionSimulation.spectral_moment — Functionspectral_moment(order::Int, m::S, r_ps::T, fas::FourierParameters, sdof::Oscillator; nodes::Int=31, control_freqs::Vector{Float64}=[1e-3, 1e-1, 1.0, 10.0, 100.0, 300.0] ) where {S<:Real,T<:Real}Compute spectral moment of a specified order.
Evaluates the expression:
\[ m_k = 2\int_{0}^{\infty} \left(2\pi f\right)^k |H(f;f_n,\zeta_n)|^2 |A(f)|^2 df\]
where $k$ is the order of the moment.
Integration is performed using Gauss-Legendre integration using nodes nodes and weights. The integration domain is partitioned over the control_freqs as well as two inserted frequencies at f_n/1.5 and f_n*1.5 in order to ensure good approximation of the integral around the sdof resonant frequency.
See also: spectral_moments
StochasticGroundMotionSimulation.spectral_moments — Functionspectral_moments(order::Vector{Int}, m::S, r_ps::T, fas::FourierParameters, sdof::Oscillator; glxi::Vector{Float64}=xn31i, glwi::Vector{Float64}=wn31i, nodes::Int=length(glxi), control_freqs::Vector{Float64}=[1e-3, 1e-1, 1.0, 10.0, 100.0, 300.0] ) where {S<:Real,T<:Real}Compute a vector of spectral moments for the specified order.
Evaluates the expression:
\[ m_k = 2\int_{0}^{\infty} \left(2\pi f\right)^k |H(f;f_n,\zeta_n)|^2 |A(f)|^2 df\]
for each order, where $k$ is the order of the moment.
Integration is performed using Gauss-Legendre integration using nodes nodes and weights. The integration domain is partitioned over the control_freqs as well as two inserted frequencies at f_n/1.5 and f_n*1.5 in order to ensure good approximation of the integral around the sdof resonant frequency.
See also: spectral_moment, spectral_moments_gk
StochasticGroundMotionSimulation.spectral_moments_gk — Functionspectral_moments_gk(order::Vector{Int}, m::S, r_ps::T, fas::FourierParameters, sdof::Oscillator) where {S<:Real,T<:Real}Compute a vector of spectral moments for the specified order using Gauss-Kronrod integration from the QuadGK.jl package.
Evaluates the expression:
\[ m_k = 2\int_{0}^{\infty} \left(2\pi f\right)^k |H(f;f_n,\zeta_n)|^2 |A(f)|^2 df\]
for each order, where $k$ is the order of the moment.
Integration is performed using adaptive Gauss-Kronrod integration with the domain split over two intervals from $[0,f_n]$ and $[f_n,\infty]$ to ensure that the resonant peak is not missed.
Note that due to the default tolerances, the moments computed by this method are more accurate than those from spectral_moments using the Gauss-Legendre approximation. However, this method is also significantly slower, and cannot be used within an automatic differentiation environment.
See also: spectral_moment, spectral_moments
StochasticGroundMotionSimulation.excitation_duration — Functionexcitationduration(m, rps::U, src::SourceParameters{S,T}, rvt::RandomVibrationParameters) where {S<:Float64,T<:Real,U<:Real}
Generic function implementing excitation duration models.
Currently, only the general Boore & Thompson (2014, 2015) models are implemented along with some project-specific models from Edwards (2023) (for South Africa), and two UK duration models. The first two are both represented within the Boore & Thompson (2015) paper, so just switch path duration based upon rvt.dur_region To activate the Edwards model, use rvt.dur_ex == :BE23 For the UK models use rvt.dur_ex == :UKfree or rvt.dur_ex == :UKfixed
StochasticGroundMotionSimulation.rms_duration — Functionrms_duration(m::S, r_ps::T, src::SourceParameters, sdof::Oscillator, rvt::RandomVibrationParameters) where {T<:Real}Returns a 3-tuple of (Drms, Dex, Dratio), using a switch on rvt.dur_rms. Default rvt makes use of the :BT14 model for excitation duration, Dex.
mis magnituder_psis an equivalent point source distance
StochasticGroundMotionSimulation.peak_factor — Functionpeak_factor(m::S, r_ps::T, fas::FourierParameters, sdof::Oscillator, rvt::RandomVibrationParameters; glxi::Vector{Float64}=xn31i, glwi::Vector{Float64}=wn31i, nodes::Int=length(glxi)) where {S<:Real,T<:Real}Peak factor $u_{max} / u_{rms}$ with a switch of pf_method to determine the approach adopted. rvt.pf_method can currently be one of: - :CL56 for Cartright Longuet-Higgins (1956) - :DK80 for Der Kiureghian (1980), building on Vanmarcke (1975)
Defaults to :DK80.
peak_factor(Dex::U, m0::V, rvt::RandomVibrationParameters; glxi::Vector{Float64}=xn31i, glwi::Vector{Float64}=wn31i, nodes::Int=length(glxi)) where {U<:Real}Peak factor umax / urms with a switch of pf_method to determine the approach adopted. pf_method can currently be one of: - :CL56 for Cartright Longuet-Higgins (1956) - :DK80 for Der Kiureghian (1980), building on Vanmarcke (1975)
Defaults to :DK80.
StochasticGroundMotionSimulation.rvt_response_spectral_ordinate — Functionrvt_response_spectral_ordinate(m::S, r_ps::T, fas::FourierParameters, sdof::Oscillator, rvt::RandomVibrationParameters; glxi::Vector{Float64}=xn31i, glwi::Vector{Float64}=wn31i) where {S<:Real,T<:Real}Response spectral ordinate (units of $g$) for the specified scenario.
The spectral ordinate is computed using the expression:
\[S_a = \psi \sqrt{\frac{m_0}{D_{rms}}}\]
where $\psi$ is the peak factor computed from peak_factor, $m_0$ is the zeroth order spectral moment from spectral_moment, and $D_{rms}$ is the RMS duration computed from rms_duration.
See also: rvt_response_spectral_ordinate, rvt_response_spectrum, rvt_response_spectrum!
rvt_response_spectral_ordinate(period::U, m::S, r_ps::T, fas::FourierParameters, rvt::RandomVibrationParameters; glxi::Vector{Float64}=xn31i, glwi::Vector{Float64}=wn31i) where {S<:Real,T<:Real,U<:Float64}Response spectral ordinate (units of $g$) for the specified scenario.
The spectral ordinate is computed using the expression:
\[S_a = \psi \sqrt{\frac{m_0}{D_{rms}}}\]
where $\psi$ is the peak factor computed from peak_factor, $m_0$ is the zeroth order spectral moment from spectral_moment, and $D_{rms}$ is the RMS duration computed from rms_duration.
See also: rvt_response_spectral_ordinate, rvt_response_spectrum, rvt_response_spectrum!
StochasticGroundMotionSimulation.rvt_response_spectrum — Functionrvt_response_spectrum(period::Vector{U}, m::S, r_ps::T, fas::FourierParameters, rvt::RandomVibrationParameters; glxi::Vector{Float64}=xn31i, glwi::Vector{Float64}=wn31i) where {S<:Real,T<:Real,U<:Float64}Response spectrum (units of $g$) for the vector of periods period and the specified scenario.
Each spectral ordinate is computed using the expression:
\[S_a = \psi \sqrt{\frac{m_0}{D_{rms}}}\]
where $\psi$ is the peak factor computed from peak_factor, $m_0$ is the zeroth order spectral moment from spectral_moment, and $D_{rms}$ is the RMS duration computed from rms_duration. The various terms are all functions of the oscillator period.
See also: rvt_response_spectral_ordinate, rvt_response_spectrum!
StochasticGroundMotionSimulation.rvt_response_spectrum! — Functionrvt_response_spectrum!(Sa::Vector{U}, period::Vector{V}, m::S, r_ps::T, fas::FourierParameters, rvt::RandomVibrationParameters) where {S<:Real,T<:Real,U<:Real,V<:Float64}In-place response spectrum (units of $g$) for the vector of periods period and the specified scenario.
Each spectral ordinate is computed using the expression:
\[S_a = \psi \sqrt{\frac{m_0}{D_{rms}}}\]
where $\psi$ is the peak factor computed from peak_factor, $m_0$ is the zeroth order spectral moment from spectral_moment, and $D_{rms}$ is the RMS duration computed from rms_duration. The various terms are all functions of the oscillator period.
See also: rvt_response_spectral_ordinate, rvt_response_spectrum!