Skip to contents

Evaluates, for every requested displacement model, yield acceleration and realization of a scenario, the Newmark displacement of that realization. One standard normal deviate per realization is shared by every model and every yield acceleration, so each realization traces one coherent displacement curve \(D_{n,s}(k_y)\) per model and the models stay paired realization by realization.

Usage

evaluateDisplacements(intensities, eps, ky, Ts, Mw, models, NFC, pulse)

Arguments

intensities

Paired realizations of one scenario with columns realization, PGA, Sa13, Sa15, PGV and AI, as sampleIntensities() returns; realization identifies each realization and must be non-missing and unique.

eps

Standard normal deviates of the displacement models, one per row of intensities, finite.

ky

Yield accelerations in g, finite and positive.

Ts

One initial fundamental period of the sliding mass in seconds, the one the intensities were sampled for.

Mw

One moment magnitude of the scenario, read by the flexible models.

models

Distinct model identifiers among AM88, JB07, SR08, BT07, BM17 and BM19.

NFC, pulse

Near-fault component and pulse declaration of the BM19 model, see evaluateFlexibleDisplacement(); read only when models includes BM19.

Value

A data.table with IDn, ky (g), realization and Dn (cm), one row per model, yield acceleration and realization, ordered by the order of models, then ky, then the rows of intensities. Each Dn is one realization, not a statistic: the population is the realizations of the scenario, identified by the caller's realization and paired across models and yield accelerations, conditional on a nonzero displacement for the flexible models; summarizeDisplacements() and summarizeEnsemble() reduce it to quantiles and means.

Mathematics

$$D_{n,s}(k_y) = \exp\left(\mu_{\ln D}(k_y, IM_s) + \sigma_{\ln D}(k_y, IM_s)\, \varepsilon_s\right)$$ in cm, where \(IM_s\) are the intensity measures of realization \(s\) (sampleIntensities()), \(\varepsilon_s\) its deviate, and \(\mu_{\ln D}\), \(\sigma_{\ln D}\) the conditional lognormal parameters of each model: evaluateRigidDisplacement() for AM88 (PGA), JB07 and SR08 (PGA, \(I_a\)), and evaluateFlexibleDisplacement() for BT07 and BM17 (\(S_a(1.5 T_s)\)) and BM19 (\(S_a(1.3 T_s)\), PGV). The calculation is deterministic; the caller supplies the deviates. For BT07, BM17 and BM19 these are the parameters of the nonzero branch of the published models (evaluateFlexibleDisplacement()): their probability of zero or negligible displacement is omitted, so every realization of those models is a positive displacement drawn conditional on a nonzero displacement.

Examples

Sigma <- c(0.2, 0.45, 0.75)
Spectrum <- data.frame(Tn = c(0, 0.4, 1), k = "oq", muLn = log(c(0.8, 0.55, 0.42)) - Sigma^2 / 2,
                       sigmaLn = Sigma, w = 1)
set.seed(46)
Intensities <- sampleIntensities(Spectrum, Ts = 0.4, NS = 5, zTrunc = NA)
evaluateDisplacements(Intensities, eps = stats::rnorm(5), ky = c(0.05, 0.1), Ts = 0.4, Mw = 7,
                      models = c("AM88", "BM19"), NFC = "D100", pulse = FALSE)
#>        IDn    ky realization         Dn
#>     <char> <num>       <int>      <num>
#>  1:   AM88  0.05           1  53.494255
#>  2:   AM88  0.05           2 187.033698
#>  3:   AM88  0.05           3 249.301880
#>  4:   AM88  0.05           4 127.878050
#>  5:   AM88  0.05           5 104.112031
#>  6:   AM88  0.10           1  19.965571
#>  7:   AM88  0.10           2  76.444315
#>  8:   AM88  0.10           3 101.172150
#>  9:   AM88  0.10           4  51.860659
#> 10:   AM88  0.10           5  36.675576
#> 11:   BM19  0.05           1   4.272949
#> 12:   BM19  0.05           2  35.564618
#> 13:   BM19  0.05           3  95.294735
#> 14:   BM19  0.05           4  58.934537
#> 15:   BM19  0.05           5   6.852124
#> 16:   BM19  0.10           1   1.330683
#> 17:   BM19  0.10           2  13.344128
#> 18:   BM19  0.10           3  39.037404
#> 19:   BM19  0.10           4  24.881919
#> 20:   BM19  0.10           5   2.006158
#>        IDn    ky realization         Dn
#>     <char> <num>       <int>      <num>