--- title: "Full pipeline overview" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Full pipeline overview} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include=FALSE} knitr::opts_chunk$set(collapse = TRUE, comment = "#>", eval = FALSE) ``` ## Scope `newmark` is an R package: every workflow in this overview reads its inputs from R objects in memory and returns R objects in memory (`data.table`s plus, for `getCylinderRoots()`, a numeric scalar). No function writes to disk. Project-scale orchestration on a hazard grid — looping over scenarios, persisting intermediate tables, aggregating across models or sites — is the consumer's responsibility; one example consumer is the `oqt` command-line tool, but `newmark` itself does not depend on it and works identically when called from any R session. ## The four workflows ``` [Workflow 1] Dynamic site response soil profile + USCS ─► getSiteProperties() ─► Ts, mo, Go, VSo rock UHS + target Vs30 ─► fitSaF() ─► site-amplified UHS [Workflow 2] Hazard import OpenQuake classical/disagg ─► buildGMDP() ─► AEPTable, UHSTable, RMwTable [Workflow 3] Displacement curves ◄─── Ts from W1 site UHS ─► getDnKy() ─► ky grid ◄─── UHS from W1+W2 site UHS + ky + Ts + Mw ─► fitDnCurve() ─► list(curve, draws) [Workflow 4] Seismic coefficient draws + Da ─► invertDnDraws() ─► kmax(d*) ``` Workflows 1 and 2 are independent. Workflow 3 consumes Ts from Workflow 1 and the site-amplified UHS from Workflows 1+2. Workflow 4 consumes the per-realisation draws from Workflow 3. ## Workflow 1 — Dynamic site response Two sub-steps. The first builds the soil profile and the fundamental period; the second amplifies the rock UHS to the target Vs30. ```r library(newmark) library(data.table) # 1.1 — synthetic soil profile and dynamic properties SiteProps <- getSiteProperties( Hs = 30, # total height to hard ground (m) USCS = c("GC", "CL", "ML"), # USCS codes, top to bottom h = 1.00, # discretisation step (m) NR = 100, # Monte Carlo realisations levels = c(0.16, "mean", 0.84) ) # returns a data.table with Hs, level, Go, mo, Ts, VSo, VS30, ... Ts <- SiteProps[level == "mean", Ts] mo <- SiteProps[level == "mean", mo] VSo <- SiteProps[level == "mean", VSo] # 1.2 — site amplification to a target Vs30 saf <- fitSaF( uhs = uhs_rock, # rock UHS data.table (Tn, p, Sa) vs30 = 350, # target site Vs30 (m/s) vref = 760, # reference rock Vs30 ns = 1000, # Monte Carlo size Rrup = 100 # rupture distance (km) ) # returns a data.table with Tn, p, Sa, SaF, AF ``` Two reference vignettes deepen this workflow: `vignette("dynamic-site-response", package = "newmark")` covers the methodology side (Ishihara, Gazetas–Dakoulas, ST17); function-level docs are at `?getSiteProperties`, `?getCylinderRoots`, `?fitModel.Ts`, `?Vs30toSID`, `?SIDtoVs30`, `?fitSaF`. ## Workflow 2 — Hazard import Convert OpenQuake classical-PSHA and disaggregation output into the table shapes consumed downstream. ```r gmdp <- buildGMDP( path = "/path/to/openquake/output", IDo = "GMM", engine = "openquake", vref = 760, TRo = c(100, 200, 500, 1000, 2000, 2500, 5000, 10000) ) # returns a list with $AEPTable, $UHSTable, $RMwTable ``` `buildGMDP()` accepts both `engine = "openquake"` (zipped XML output) and `engine = "user"` (Excel files supplied by the analyst). See `?buildGMDP` for the full signature. ## Workflow 3 — Displacement curves Build the *k*_y grid and run the coherent Monte Carlo over the six-model ensemble. ```r ky <- getDnKy(saf, Ts = Ts) # default 30 log-spaced points result <- fitDnCurve( uhs = saf, # site-amplified UHS ky = ky, Ts = Ts, Mw = 6.8, # representative magnitude NS = 200, # Monte Carlo size Rrup = 100, weights = c(AM88 = 1, JB07 = 0, BT07 = 1, SR08 = 1, BM17 = 0, BM19 = 1), NFC = "D100" # near-fault component selector for BM19 ) # result$curve data.table(ky, p, Dn, IDn, w) with quantiles + ensemble per ky # result$draws data.table(ky, s, Dn, IDn) all NS realisations per model ``` The single-scenario sampling in `fitDnCurve()` (one PGA, Sa(1.3 *T*_s), Sa(1.5*T*_s) tuple drawn per realisation, correlated by the full Baker-Jayaram inter-period matrix) and the shared *z*^(*n*) across models (ρ = 1) are explained in `vignette("ensemble-formulation", package = "newmark")`. ## Workflow 4 — Seismic coefficient Invert the per-realisation draws to the design *k*_max at the chosen displacement targets. ```r kmax <- invertDnDraws( result$draws, Da = c(0.5, 2.5, 5.0, 25.0), # target displacements (cm) weights = c(AM88 = 1, JB07 = 0, BT07 = 1, SR08 = 1, BM17 = 0, BM19 = 1), p = c(0.16, 0.84) # report quantiles alongside the mean ) # returns a data.table(Da, p, kmax) — kmax in g ``` The normalised pseudostatic coefficient is *K*_h = *k*_max / mean rock-level PGA, expressed as a percentage. ## See also - `vignette("newmark-quickstart", package = "newmark")` — minimal Workflows 3 + 4 example with the bundled NBCC UHS. - `vignette("dynamic-site-response", package = "newmark")` — the dsra-side methodology for Ts and the site-amplification model. - `vignette("ensemble-formulation", package = "newmark")` — mathematical derivation of the probabilistic propagation, monotone projection, and inversion.