Example 5: Simulated nonlinear propertyΒΆ
Generate simulated nonlinear properties. This example just shows an example of generating the simulated profiles.
[1]:
import matplotlib.pyplot as plt
import numpy as np
import pystrata
%matplotlib inline
[2]:
# Increased figure sizes
plt.rcParams["figure.dpi"] = 120
Create a soil layer, which defines the median value.
[3]:
soil_type = pystrata.site.DarendeliSoilType(18.0, plas_index=0, ocr=1, stress_mean=50)
Create the simulated nonlinear curves
[4]:
n = 10
correlation = 0
simulated = []
for name, model in zip(
["Darendeli (2001)", "EPRI SPID (2014)"],
[
pystrata.variation.DarendeliVariation(correlation),
pystrata.variation.SpidVariation(correlation),
],
):
simulated.append((name, [model(soil_type) for _ in range(n)]))
Compare the uncertainty models.
[5]:
fig, axes = plt.subplots(2, 2, sharex=True, sharey="row", subplot_kw={"xscale": "log"})
for i, (name, sims) in enumerate(simulated):
for j, prop in enumerate(["mod_reduc", "damping"]):
axes[j, i].plot(
getattr(soil_type, prop).strains,
np.transpose([getattr(s, prop).values for s in sims]),
linewidth=0.5,
color="C0",
alpha=0.8,
)
if j == 0:
axes[j, i].set_title(name)
axes[0, 0].set_ylabel("$G/G_{max}$")
axes[1, 0].set_ylabel("$D$ (%)")
plt.setp(axes[1, :], xlabel=r"Strain, $\gamma$ (%)")
fig.tight_layout();
Sample deterministic percentile curves (5th, 50th, and 95th) using the fixed-percentiles mode.
[6]:
percentiles = [0.05, 0.50, 0.95]
model = pystrata.variation.SpidVariation(
correlation=0,
sample_mode="fixed_percentiles",
percentiles=percentiles,
)
samples = [model(soil_type, sample_index=i) for i in range(len(percentiles))]
fig, axes = plt.subplots(
1, 2, sharex=True, subplot_kw={"xscale": "log"}, figsize=(9, 3.5)
)
for ax, prop, ylabel in zip(
axes,
["mod_reduc", "damping"],
["$G/G_{max}$", "$D$ (%)"],
):
strains = getattr(soil_type, prop).strains
median = getattr(soil_type, prop).values
ax.plot(strains, median, color="k", linewidth=2, label="Median")
for p, sample in zip(percentiles, samples):
ax.plot(
strains,
getattr(sample, prop).values,
linewidth=1.6,
label=f"{int(100 * p)}th percentile",
)
ax.set_ylabel(ylabel)
ax.legend()
for ax in axes:
ax.set_xlabel(r"Strain, $\gamma$ (%)")
fig.suptitle("SPID fixed-percentile samples")
fig.tight_layout();