In [1]:
import matplotlib.pyplot as plt
import numpy as np
import pysra
%matplotlib inline
In [2]:
# Increased figure sizes
plt.rcParams['figure.dpi'] = 120
In [3]:
fname = 'data/NIS090.AT2'
with open(fname) as fp:
next(fp)
description = next(fp).strip()
next(fp)
parts = next(fp).split()
time_step = float(parts[1])
accels = [float(p) for l in fp for p in l.split()]
ts = pysra.motion.TimeSeriesMotion(
fname, description, time_step, accels)
In [4]:
ts.accels
Out[4]:
There are a few supported file formats. AT2 files can be loaded as follows:
In [5]:
ts = pysra.motion.TimeSeriesMotion.load_at2_file(fname)
ts.accels
Out[5]:
In [6]:
fig, ax = plt.subplots()
ax.plot(ts.times, ts.accels)
ax.set(xlabel='Time (sec)', ylabel='Accel (g)')
fig.tight_layout();
In [7]:
profile = pysra.site.Profile([
pysra.site.Layer(
pysra.site.SoilType(
'Soil', 18., None, 0.05
),
30, 400
),
pysra.site.Layer(
pysra.site.SoilType(
'Rock', 24., None, 0.01
),
0, 1200
),
])
In [8]:
calc = pysra.propagation.LinearElasticCalculator()
In [9]:
freqs = np.logspace(-1, 2, num=500)
outputs = pysra.output.OutputCollection([
pysra.output.ResponseSpectrumOutput(
# Frequency
freqs,
# Location of the output
pysra.output.OutputLocation('outcrop', index=0),
# Damping
0.05),
pysra.output.ResponseSpectrumRatioOutput(
# Frequency
freqs,
# Location in (denominator),
pysra.output.OutputLocation('outcrop', index=-1),
# Location out (numerator)
pysra.output.OutputLocation('outcrop', index=0),
# Damping
0.05),
pysra.output.FourierAmplitudeSpectrumOutput(
# Frequency
freqs,
# Location of the output
pysra.output.OutputLocation('outcrop', index=0),
# Bandwidth for Konno-Omachi smoothing window
ko_bandwidth=30)
])
Compute the response of the site, and store the state within the calculation object. Nothing is provided.
In [10]:
calc(ts, profile, profile.location('outcrop', index=-1))
Calculate all of the outputs from the calculation object.
In [11]:
outputs(calc)
In [12]:
for o in outputs:
fig, ax = plt.subplots()
ax.plot(o.refs, o.values)
ax.set(xlabel=o.xlabel, xscale='log', ylabel=o.ylabel)
fig.tight_layout();
In [ ]: