def test_steel_fb_aij2005(): from src.xs_section import make_all_section_db db = make_all_section_db() assert steel_fb_aij2005('H-200x100x5.5x8', db) == 235 / 1.5 assert steel_fb_aij2005('H-200x100x5.5x8', db, lb=1000, M3=1) == pytest.approx(144.9, abs=0.1) assert steel_fb_aij2005('H-200x100x5.5x8', db, lb=2000, M3=1) == pytest.approx(114.0, abs=0.1) assert steel_fb_aij2005('H-200x100x5.5x8', db, lb=4000, M3=1) == pytest.approx(71.8, abs=0.1) assert steel_fb_aij2005('H-200x100x5.5x8', db, lb=6000, M3=1) == pytest.approx(45.4, abs=0.1) assert steel_fb_aij2005('H-500x200x10x16', db, lb=5000, M3=1) == pytest.approx(96.0, abs=0.1) assert steel_fb_aij2005('H-500x200x10x16', db, lb=7000, M3=1) == pytest.approx(72.5, abs=0.1) # TODO:チャート出力と比較 2021-1230 assert steel_fb_aij2005('[-100x50x5x7.5', db, lb=0, M3=1) == pytest.approx(235 / 1.5, abs=0.1) assert steel_fb_aij2005('[-100x50x5x7.5', db, lb=3000, M3=1) == pytest.approx(90.53, abs=0.1) # TODO:チャート出力と比較 assert steel_fb_aij2005('C-100x50x20x2.3', db, lb=0, M3=1) == pytest.approx(235 / 1.5, abs=0.1) assert steel_fb_aij2005('C-100x50x20x2.3', db, lb=3000, M3=1) == pytest.approx(67.09, abs=0.1)
def data_plot2(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) x = [] y = [] db = make_all_section_db() shape = 'H-200x100x5.5x8' shape = 'H-300x150x6.5x9' # shape = 'H-400x200x8x13' # shape = 'H-600x200x11x17' # shape = 'H-488x300x11x18' L = 6 * 1000 # mm pitch = 5 m1 = 4 m2 = 2 m3 = 5 x.clear() y.clear() for lb in range(1, L, pitch): x.append(lb) y.append(steel_fb_aij2005(shape, db, lb=lb, M1=m1, M2=m2, M3=m3)) ax.plot(x, y, label='aij 2005') x.clear() y.clear() for lb in range(1, L, pitch): x.append(lb) y.append(steel_fb_aij2002(shape, db, lb=lb, M1=m1, M2=m2, M3=m3)) ax.plot(x, y, ls='--', label='aij 1973') ax.grid(ls='--') ax.set_ylim(0, 160) ax.set_xlim(0, L) ib = db[shape][0]['ib'] info = '{}\nib={}(cm), C={:.2f}\n lambda=0~{:.0f}'.format( shape, ib, calc_C(m1, m2, m3), L / (ib * 10)) # ax.annotate(info, xy=(0.015, 0.02), xycoords='axes fraction') plt.ylabel('fb (N/mm2)') plt.xlabel('Lb (mm)') # plt.legend(bbox_to_anchor=(1, 1), loc='upper right', title=info) plt.legend(bbox_to_anchor=(0, 0), loc='lower left', title=info) plt.show()
def data_plot(): fig = plt.figure() ax = fig.add_subplot(1, 1, 1) F = 235 i = 1 Af = 1 x = [] y = [] for lb in range(1, 251, 1): x.append(lb) y.append(steel_fb_bsl(F=F, lb=lb, i=i, C=1, h=10, Af=Af)) ax.plot(x, y) x.clear() y.clear() for lb in range(1, 251, 1): x.append(lb) y.append(steel_fb_bsl(F=F, lb=lb, i=i, C=2.3, h=10, Af=Af)) # ax.plot(x, y) x.clear() y.clear() for lb in range(1, 251, 1): x.append(lb) y.append(steel_fb_bsl(F=F, lb=lb, i=i, C=2.3, h=4, Af=Af)) # ax.plot(x, y) db = make_all_section_db() x.clear() y.clear() shape = 'H-200x100x5.5x8' for lb in range(1, 251, 1): x.append(lb) y.append(steel_fb_aij2005(shape, db, lb=lb, M3=1)) ax.plot(x, y) ax.grid() ax.set_ylim(0, 160) # ax.set_ylim(0, 220) ax.set_xlim(0, 250) plt.show()
def allowable_bending_moment(sec, M1=0, M2=0, M3=1, direc='X', lb=0., F=235., term='LONG'): """ 部材の許容曲げ耐力を返す。 :param sec: 断面名 :param M1: 座屈補剛区間端部の大きい方のM :param M2: 座屈補剛区間端部の小さい方のM :param M3: 座屈補剛区間内の最大のM :param direc: 断面の軸指定 強軸/弱軸まわり "X" / "Y" :param lb: 圧縮フランジの支点間距離 (mm) :param F: F値 [N/mm2] :param term: 荷重種別(短期・長期)str "LONG" / "SHORT" :return: Ma 許容曲げモーメント [kN*m] """ # TODO:断面による処理の違いを実装 from src.xs_section import make_all_section_db db = make_all_section_db() section_full_name = xs_section_name(sec) # H形鋼 if section_full_name.startswith('H-'): z, fb = 0, 0 if direc == 'X': z = xs_section_property(sec, 'Zx', db) fb = alws.steel_fb_aij2005(sec, db, lb=lb, M1=M1, M2=M2, M3=M3, F=F) if direc == 'Y': z = xs_section_property(sec, 'Zy', db) # 弱軸曲げ 横座屈なし fb=ft fb = alws.steel_ft() term_factor = 1.0 if term == 'LONG' else 1.5 return term_factor * z * (fb / 10.) / 100. # 角形鋼菅 if section_full_name.startswith('□P-'): z, fb = 0, 0 if direc == 'X': z = xs_section_property(sec, 'Zx', db) if direc == 'Y': z = xs_section_property(sec, 'Zy', db) # 横座屈なし fb=ft fb = alws.steel_ft() term_factor = 1.0 if term == 'LONG' else 1.5 return term_factor * z * (fb / 10.) / 100. # 鋼菅 if section_full_name.startswith('P-'): z, fb = 0, 0 z = xs_section_property(sec, 'Zx', db) # 横座屈なし fb=ft fb = alws.steel_ft() term_factor = 1.0 if term == 'LONG' else 1.5 return term_factor * z * (fb / 10.) / 100. # 溝形鋼 if section_full_name.startswith('[-'): z, fb = 0, 0 if direc == 'X': z = xs_section_property(sec, 'Zx', db) fb = alws.steel_fb_aij2005(section_full_name, db, lb=lb, M1=M1, M2=M2, M3=M3, F=F) if direc == 'Y': z = xs_section_property(sec, 'Zy', db) # 横座屈なし fb=ft fb = alws.steel_ft() term_factor = 1.0 if term == 'LONG' else 1.5 return term_factor * z * (fb / 10.) / 100. # TODO:C形鋼 fbの計算を確認 WIP fb=ftとする場合も用意するか? # C形鋼 if section_full_name.startswith('C-'): z, fb = 0, 0 if direc == 'X': z = xs_section_property(sec, 'Zx', db) fb = alws.steel_fb_aij2005(section_full_name, db, lb=lb, M1=M1, M2=M2, M3=M3, F=F) if direc == 'Y': z = xs_section_property(sec, 'Zy', db) # 横座屈なし fb=ft fb = alws.steel_ft() term_factor = 1.0 if term == 'LONG' else 1.5 return term_factor * z * (fb / 10.) / 100. # 山形鋼 if section_full_name.startswith('L-'): # TODO 主軸が傾いているため、u,v方向への分解が必要 u,v方向のそれぞれのMaを返す? z, fb = 0, 0 if direc == 'X': z = xs_section_property(sec, 'Zx', db) if direc == 'Y': z = xs_section_property(sec, 'Zy', db) if direc == 'U': z, _ = get_Zu_Zv_of_angle(sec, db) if direc == 'V': _, z = get_Zu_Zv_of_angle(sec, db) # 横座屈なし fb=ft fb = alws.steel_ft() term_factor = 1.0 if term == 'LONG' else 1.5 return term_factor * z * (fb / 10.) / 100.
def test_steel_fb(): assert steel_fb2_aij(F=235, lb=0) == 235 / 1.5 assert steel_fb2_aij(F=235, lb=1000, h=200, Af=800) == 235 / 1.5 assert steel_fb2_aij(F=235, lb=2000, h=200, Af=800) == pytest.approx(235 / 1.5) assert steel_fb2_aij(F=235, lb=3000, h=200, Af=800) == pytest.approx(118.6666) assert steel_fb2_aij(F=235, lb=4000, h=200, Af=800) == pytest.approx(89.0) assert steel_fb2_aij(F=235, lb=5000, h=200, Af=800) == pytest.approx(71.2) assert steel_fb2_aij(F=235, lb=6000, h=200, Af=800) == pytest.approx(59.3333) assert steel_fb2_aij(F=235, lb=7000, h=200, Af=800) == pytest.approx(50.8571) assert steel_fb2_aij(F=235, lb=8000, h=200, Af=100 * 8) == pytest.approx(44.5) assert steel_fb2_aij(F=235, lb=1000, h=500, Af=3200) == 235 / 1.5 assert steel_fb2_aij(F=235, lb=5000, h=500, Af=200 * 16) == pytest.approx(113.92) assert steel_fb1_aij(F=235, lb=1000, i=26.3, C=1) == pytest.approx(150.3529) assert steel_fb1_aij(F=235, lb=2000, i=26.3, C=1) == pytest.approx(131.4115) assert steel_fb1_aij(F=235, lb=3000, i=26.3, C=1) == pytest.approx(99.8425) assert steel_fb1_aij(F=235, lb=4000, i=26.3, C=1) == pytest.approx(55.6459) assert steel_fb1_aij(F=235, lb=5000, i=26.3, C=1) == pytest.approx(-1.1783, abs=0.001) assert steel_fb1_aij(F=235, lb=6000, i=26.3, C=1) == pytest.approx(-70.63, abs=0.001) assert steel_fb1_aij(F=235, lb=6000, i=26.3, C=1.75) == pytest.approx(26.7828, abs=0.001) assert steel_fb1_aij(F=235, lb=6000, i=26.3, C=2.3) == pytest.approx(57.8420, abs=0.001) assert steel_fb1_aij(F=235, lb=6000, i=52, C=2.3) == pytest.approx(131.3871, abs=0.001) assert steel_fb1_aij(F=235, lb=6000, i=52, C=1.75) == pytest.approx(123.4421, abs=0.001) assert steel_fb1_aij(F=235, lb=6000, i=52, C=1) == pytest.approx(98.5236, abs=0.001) assert steel_fb1_aij(F=325, lb=6000, i=52, C=1) == pytest.approx(105.4605, abs=0.001) assert steel_fb_aij(F=235, lb=2000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(235 / 1.5) assert steel_fb_aij(F=235, lb=3000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(118.6667) assert steel_fb_aij(F=235, lb=4000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(89.0) assert steel_fb_bsl(F=235, lb=4000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(89.0) assert steel_fb_aij(F=235, lb=5000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(71.2) assert steel_fb_aij(F=235, lb=6000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(59.3333) assert steel_fb_aij(F=235, lb=7000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(50.8571) assert steel_fb_aij(F=235, lb=8000, i=26.3, C=1, h=200, Af=100 * 8) == pytest.approx(44.5) assert steel_fb_aij(F=235, lb=5000, i=52, C=1, h=500, Af=200 * 16) == pytest.approx(116.2895) assert steel_fb_aij(F=235, lb=7000, i=52, C=1, h=500, Af=200 * 16) == pytest.approx(81.3714) from src.xs_section import make_all_section_db db = make_all_section_db() assert steel_fb_aij2002('H-500x200x10x16', db, lb=5000, M3=1) == pytest.approx(116.2895) assert steel_fb_aij2002('H-500x200x10x16', db, lb=7000, M3=1) == pytest.approx(81.3714) assert steel_fb_aij2002('H-200x100x5.5x8', db, lb=7000, M3=1) == pytest.approx(50.8571)
from src.xs_section import make_all_section_db, xs_section_property db = make_all_section_db() sec_name = 'H24' a = xs_section_property(sec_name, 'An') print(a)