通过python对2010年抗震规范下的抗震设计谱进行绘制,根据当地设计场地条件输入场地条件、抗震设防烈度以及地震频遇生成当地的抗震设计普,并将数据值保存至同一目录下名称为反应谱的excel表格中。
# ----------utf-8-------------- #
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
"""
特征周期值(s)Tg
场地类别 Ⅰ0 Ⅰ1 Ⅱ Ⅲ Ⅳ
第一组 0.2 0.25 0.35 0.45 0.65
第二组 0.25 0.30 0.40 0.55 0.75
第三组 0.30 0.35 0.45 0.65 0.90
--------------------------------------------
水平地震影响系数最大值
地震影响 6度 7度 8度 9度
多遇地震 0.04 0.08(0.12) 0.16(0.24) 0.32
罕遇地震 0.28 0.50(0.72) 0.90(1.20) 1.40
--------------------------------------------
"""
def select(field, group, earthquake_intensity, rare_degree):
filed_ = ["Ⅰ0", "Ⅰ1", "Ⅱ", "Ⅲ", "Ⅳ"]
group_ = ["第一组", "第二组", "第三组"]
earthquake_intensity_ = ["6度", "7度", "8度", "9度"]
Rare_degree_ = ["多遇地震", "罕遇地震"]
a, b = parameter(filed_.index(field),
group_.index(group),
earthquake_intensity_.index(earthquake_intensity),
Rare_degree_.index(rare_degree))
return a, b
def parameter(field, group, earthquake_intensity, earthquake_frequency): # 场地,分组,烈度,地震频遇
T = [[0.2, 0.25, 0.30], [0.25, 0.30, 0.35], [0.35, 0.40, 0.45], [0.45, 0.55, 0.65], [0.65, 0.75, 0.90]]
alpha = [[0.04, 0.28], [0.08, 0.50], [0.16, 0.90], [0.32, 4.40]]
return T[field][group], alpha[earthquake_intensity][earthquake_frequency]
def Design_spectrum(alpha_max_, tg, gama_=None, eta_1_=None, eta_2_=None):
if gama_ is None and eta_1_ is None and eta_2_ is None:
T1 = np.arange(0, 0.1, 0.001)
alpha_1 = 0.45 * alpha_max_ + 5.5 * alpha_max_ * T1
T2 = np.arange(0.1, tg, 0.001)
alpha_2 = np.array([alpha_max_] * len(T2))
T3 = np.arange(tg, 5 * tg, 0.001)
alpha_3 = (tg / T3) ** 0.9 * alpha_max_
T4 = np.arange(5 * tg, 6, 0.001)
alpha_4 = alpha_max_ * (0.2 ** 0.9 - 0.02 * (T4 - 5 * tg))
else:
if eta_1_ < 0:
eta_1_ = 0
if eta_2_ < 0.55:
eta_2_ = 0.55
T1 = np.arange(0, 0.1, 0.001)
alpha_1 = 0.45 * alpha_max_ + (eta_2_ - 0.45) / 0.1 * alpha_max_ * T1
T2 = np.arange(0.1, tg, 0.001)
alpha_2 = np.array([eta_2_ * alpha_max_] * len(T2))
T3 = np.arange(tg, 5 * tg, 0.001)
alpha_3 = (tg / T3) ** gama_ * alpha_max_ * eta_2_
T4 = np.arange(5 * tg, 6, 0.001)
alpha_4 = alpha_max_ * (eta_2_ * 0.2 ** gama_ - eta_1_ * (T4 - 5 * tg))
T = np.concatenate((T1, T2, T3, T4), axis=0)
alpha = np.concatenate((alpha_1, alpha_2, alpha_3, alpha_4), axis=0)
data = pd.DataFrame({"time/s": T,
"α_max/g": alpha})
data.to_excel("反应谱.xlsx", sheet_name="Sheet1", index=False)
plt.xlabel("time/s", fontsize=10)
plt.ylabel("α_max/g", fontsize=10)
plt.title("Response spectrum curve", fontsize=15)
plt.xlim(0, 6)
plt.plot(T, alpha)
plt.show()
filed = input("请输入场地类别:")
Seismic_grouping = input("请输入地震分组:")
Fortification_intensity = input("请输入设防烈度:")
Earthquake_frequency = input("请输入地震频遇:")
Damping_ratio = input("请输入结构阻尼比")
Tg, alpha_max = select(filed, Seismic_grouping, Fortification_intensity, Earthquake_frequency)
if Damping_ratio == "0.05":
Design_spectrum(alpha_max, Tg)
else:
Damping_ratio = float(Damping_ratio)
gama = 0.9 + (0.05 - Damping_ratio) / (0.3 + 6 * Damping_ratio)
eta_1 = 0.02 + (0.05 - Damping_ratio) / (4 + 32 * Damping_ratio)
eta_2 = 1 + (0.05 - Damping_ratio) / (0.08 + 1.6 * Damping_ratio)
Design_spectrum(alpha_max, Tg, gama, eta_1, eta_2)