2010抗规设计谱的绘制

 通过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)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值