import numpy as np
from dataclasses import dataclass
from ...raw.ch3.seismic_action import spectra as spec_raw
[docs]@dataclass
class SpectraEc8:
"""Eurocode 8 response spectra
If αgR values are given in g, displacements and velocities should be multiplied with 9.81
Attributes:
αgR (float): reference peak ground acceleration on type A ground
γI (float): importance factor
ground_type (str): Ground type (A, B, C, D or E)
spectrum_type (int): Spectrum type 1 or 2
η (float): value of the damping correction factor
q (float): behaviour factor
β (float): lower bound factor for the horizontal design spectrum. Recommended value for β is 0.2
"""
αgR: float
γI: float
ground_type: str
spectrum_type: int
η: float = 1.0
q: float = 1.0
β: float = 0.2
def __post_init__(self):
self.αg = self.γI * self.αgR
self.S = spec_raw.S(ground_type=self.ground_type, spectrum_type=self.spectrum_type)
self.TB = spec_raw.TB(ground_type=self.ground_type, spectrum_type=self.spectrum_type)
self.TC = spec_raw.TC(ground_type=self.ground_type, spectrum_type=self.spectrum_type)
self.TD = spec_raw.TD(ground_type=self.ground_type, spectrum_type=self.spectrum_type)
[docs] def Se(self, T)-> float:
"""float: The elastic acceleration response spectrum"""
return spec_raw.Se(T, self.αg, self.S, self.TB, self.TC, self.TD, self.η)
[docs] def SDe(self, T)-> float:
"""float: The elastic displacement response spectrum"""
return spec_raw.SDe(T, self.Se(T))
[docs] def dg(self)-> float:
"""float: Design ground displacement"""
return spec_raw.dg(self.αg, self.S, self.TC, self.TD)
[docs] def Sd(self, T)-> float:
"""float: Design spectrum for elastic analysis"""
return spec_raw.Sd(T, self.αg, self.S, self.TB, self.TC, self.TD, self.q, self.β)
@property
def getAllSpectra0to4(self):
_T_range = np.linspace(0.01, 4, 400)
_Se = self.Se(_T_range)
_SDe = self.SDe(_T_range)
_Sv = _Se / (2 * np.pi / _T_range)
_Sd = self.Sd(_T_range)
_T_range = np.append(0., _T_range)
_Se = np.append(self.αg * self.S, _Se)
_SDe = np.append(0., _SDe)
_Sv = np.append(0., _Sv)
_Sd = np.append(self.αg * self.S * 2.0 / 3.0, _Sd)
_data = {'T':_T_range,
'Se':_Se,
'Sv':_Sv,
'SDe':_SDe,
'Sd': _Sd}
return _data