2軸曲げを受けるRC部材の終局強度 (2022.02.02)
軸力およびモーメントの計算
軸力 、x軸回りの曲げモーメント 、y軸回りの曲げモーメント を受けるRC部材を考える。 座標軸は、下図に示すように、断面の図心を原点とし、強軸をx軸、弱軸をy軸と定義する。
上図を参照して、積荷点の座標 は以下の通り計算できる。
ここで、軸力・モーメントと部材寸法の単位はあわせる必要があることに注意する。例えば、軸力の単位が、kN、モーメントの単位がkN-m、部材寸法の単位が mm であれば、上式で計算した および は1000倍する必要がある。
耐荷力計算においては、モーメントを計算する軸が載荷点上を通るよう回転させ、この回転させた軸に対し、モーメントの計算を行う。軸の回転角 は、以下により計算できる。
ここで、コンクリート断面を、もとの座標上で予め小さな領域に分割し、すべての鉄筋についても、その位置と断面積を元の x-y 座標上で指定し、それら一つ一つを とする。 もとの x-y 座標系においての座標 は、 回転させたあとの x' 軸からの距離 によりモーメントを計算することになり、 の値は、以下により計算できる。
以上より、新しいx' 軸回りの軸力およびモーメントは、以下のように求めることができる。
ここに、 は、座標 に代表される微小領域の面積を示す。
材料の応力-ひずみ曲線
コンクリートの応力-ひずみ曲線は、コンクリート圧縮ひずみが0.002までの範囲で、以下の式で表す。
コンクリート圧縮ひずみが0.002を超えてからは一定強度 を保ち、終局ひずみは とする。
鉄筋の応力-ひずみ曲線は、圧縮降伏点から引張降伏点までは弾性係数 をもつ直線とし、降伏後は降伏点強度 を保つものとする。 鉄筋の伸びはコンクリートの終局ひずみ 0.0035 に比べ十分に大きいため、伸びの最大・最小は規定しない。
なお、プログラムでの計算上、ひずみ、コンクリート応力・鉄筋応力共に、圧縮を正とする。
計算例
以下の諸元の断面・荷重に対するM-N線図を作成する。
Item | Symbol | Value |
---|---|---|
Concrete strength | fc | 21 MPa |
Yield strength of rebar | fy | 390 MPa |
Axial force | N | 5000 kN |
Moment around x-axis | Mx | 4000 kN-m |
Moment around y-axis | My | 3000 kN-m |
Width of section | b | 1000 mm |
Height of section | h | 2000 mm |
Number of division of width | mb | 100 |
Number of division of height | mh | 200 |
Number of reinforcements | ms | 20 nos |
プログラムの中で値を指定している変数は以下の通り。
k1=0.85 # reducing coefficient of concrete strength ecu=0.0035 # ultimate strain of concrete Es=2.0e5 # (MPa) Elastic modulus of steel bar
入力データ・フォーマットは以下の通り。
fc fy N Mx My b h mb mh ms xs[i] ys[i] area[i] xs : x-coordinate of rebar ys : y-coordinate of rebar area : section area of rebar ..... i = 1 ~ ms .....
以下に入力データ事例を示す。
21 390 5000 4000 3000 1000 2000 100 200 20 -400 900 794 -200 900 794 0 900 794 200 900 794 400 900 794 -400 -900 794 -200 -900 794 0 -900 794 200 -900 794 400 -900 794 -400 700 794 -200 700 794 0 700 794 200 700 794 400 700 794 -400 -700 794 -200 -700 794 0 -700 794 200 -700 794 400 -700 794
以下に計算結果図を示す。
計算プログラム
import numpy as np import matplotlib.pyplot as plt import matplotlib.ticker as tick def inpdata(fnameR): f=open(fnameR,'r') text=f.readline() text=text.strip() text=text.split() fc =float(text[0]) # concrete strength fy =float(text[1]) # concrete strength FN =float(text[2]) # axial force MX =float(text[3]) # bending moment around x-axis MY =float(text[4]) # bending moment around y-axis bb =float(text[5]) # width of rectangle section hh =float(text[6]) # height of rectangle section mb =int(text[7]) # number of division of width mh =int(text[8]) # number of division of height ms =int(text[9]) # number of reinforcement bar xs =np.zeros(ms,dtype=np.float64) # x-coordinate of rebar ys =np.zeros(ms,dtype=np.float64) # y-coordinate of rebar area=np.zeros(ms,dtype=np.float64) # section area of rebar for i in range(0,ms): text=f.readline() text=text.strip() text=text.split() xs[i]=float(text[0]) ys[i]=float(text[1]) area[i]=float(text[2]) f.close() return fc,fy,FN,MX,MY,bb,hh,mb,mh,ms,xs,ys,area def drawfig(theta0,an_0,mo_0,theta1,an_1,mo_1,theta2,an_2,mo_2,fax,mox): fsz=10 xmin=0 ; xmax=5; dx=1 ymin=-10; ymax=30; dy=5 iw,ih=4,4 plt.figure(figsize=(iw,ih),facecolor='w') plt.rcParams['font.size']=fsz plt.rcParams['font.family']='monospace' tstr='M-N diagram' plt.xlim([xmin,xmax]) plt.ylim([ymin,ymax]) plt.xlabel('Moment M/b/h**2 (MPa)') plt.ylabel('Axial force N/b/h (MPa)') plt.xticks(np.arange(xmin,xmax+dx,dx)) plt.yticks(np.arange(ymin,ymax+dy,dy)) plt.grid(color='#999999',linestyle='solid') plt.title(tstr,loc='left',fontsize=fsz) s0=r'$\theta$={0:4.0f} deg'.format(np.degrees(theta0)) s1=r'$\theta$={0:4.0f} deg'.format(np.degrees(theta1)) s2=r'$\theta$={0:4.0f} deg'.format(np.degrees(theta2)) sp=r'Loaded point' plt.plot(mo_0,an_0,'-',color='#000080',lw=1,label=s0) plt.plot(mo_1,an_1,'-.',color='#333333',lw=1,label=s1) plt.plot(mo_2,an_2,'--',color='#333333',lw=1,label=s2) plt.plot([mox],[fax],'o',ms=4,color='#000080',label=sp) plt.legend(loc='upper right') plt.tight_layout() fnameF='fig_2mn.jpg' plt.savefig(fnameF, dpi=200, bbox_inches="tight", pad_inches=0.1) #plt.show() def calc(xc,yc,da,xs,ys,area,theta,mb,mh,ms,k1,fc,ecu,Es,fy): def sig_con(k1,fc,ec,ecu): # concrete stress sigc=k1*fc*ec/0.002*(2-ec/0.002) if 0.002<=ec: sigc=k1*fc if ec<0: sigc=0.0 if ecu*1.0001<ec: sigc=0.0 return sigc def sig_bar(Es,fy,eb): # steel bar stress sigs=Es*eb if fy<sigs: sigs=fy if sigs<-fy: sigs=-fy return sigs def cal_mn(e1,e2,k1,fc,ecu,rc,da,Es,fy,rs,area,l_an,l_mo): # calculation of axial force and moment rmin=np.min(rc) rmax=np.max(rc) a=(e2-e1)/(rmax-rmin) b=(rmax*e1-rmin*e2)/(rmax-rmin) e_con=a*rc+b e_bar=a*rs+b sig_c=np.zeros(len(e_con),dtype=np.float64) sig_b=np.zeros(len(e_bar),dtype=np.float64) sig_r=np.zeros(len(e_bar),dtype=np.float64) for i,ec in enumerate(e_con): sig_c[i]=sig_con(k1,fc,ec,ecu) for i,eb in enumerate(e_bar): sig_b[i]=sig_bar(Es,fy,eb) sig_r[i]=sig_con(k1,fc,eb,ecu) an=np.sum(sig_c*da)+np.sum(sig_b*area)-np.sum(sig_r*area) mo=np.sum(sig_c*da*rc)+np.sum(sig_b*area*rs)-np.sum(sig_r*area*rs) l_an=l_an+[an] l_mo=l_mo+[mo] return l_an, l_mo def mo_nega(a_an,a_mo): # treatment of negative moment if 0<=a_mo[0]: a_an=np.append(a_an[0]-1e-6,a_an) a_mo=np.append(0,a_mo) else: for i in range(0,len(a_mo)-1): if a_mo[i]<=0 and 0<a_mo[i+1]: x1,y1=a_mo[i],a_an[i] x2,y2=a_mo[i+1],a_an[i+1] b=(x2*y1-x1*y2)/(x2-x1) break a_an=np.append(b,a_an) a_mo=np.append(0,a_mo) if 0<=a_mo[-1]: a_an=np.append(a_an[-1]+1e-6,a_an) a_mo=np.append(0,a_mo) else: for i in reversed(range(1,len(a_mo))): if a_mo[i]<=0 and 0<a_mo[i-1]: x1,y1=a_mo[i],a_an[i] x2,y2=a_mo[i-1],a_an[i-1] b=(x2*y1-x1*y2)/(x2-x1) break a_an=np.append(a_an,b) a_mo=np.append(a_mo,0) ii=np.argsort(a_an) _a_an=a_an[ii] _a_mo=a_mo[ii] jj=np.where(-1e-6<=_a_mo) a_an=_a_an[jj] a_mo=_a_mo[jj] return a_an, a_mo # main calculation rc=yc*np.cos(theta)+xc*np.sin(theta) rs=ys*np.cos(theta)+xs*np.sin(theta) esy=fy/Es nn=20 num=3 l_an=[] # axial force l_mo=[] # bending moment eps=np.linspace(-num*esy,ecu,nn) e1=-num*esy for e2 in eps: l_an,l_mo=cal_mn(e1,e2,k1,fc,ecu,rc,da,Es,fy,rs,area,l_an,l_mo) e2=ecu for e1 in eps: l_an,l_mo=cal_mn(e1,e2,k1,fc,ecu,rc,da,Es,fy,rs,area,l_an,l_mo) a_an=np.array(l_an) a_mo=np.array(l_mo) a_an,a_mo=mo_nega(a_an,a_mo) # treatment of negative moment return a_an, a_mo def main(): fnameR='inp_rebar.txt' fc,fy,FN,MX,MY,bb,hh,mb,mh,ms,xs,ys,area=inpdata(fnameR) xc=np.zeros(mb*mh,dtype=np.float64) yc=np.zeros(mb*mh,dtype=np.float64) k1=0.85 # reducing coefficient of concrete strength ecu=0.0035 # ultimate strain of concrete Es=2.0e5 # (MPa) Elastic modulus of steel bar #eccentricity and angle of rotation if 1e-6 < np.abs(FN): ecy=MX/FN ecx=MY/FN theta0=np.arctan2(ecx,ecy) else: if np.abs(MX)<1e-6: theta0=np.pi/2 if np.abs(MY)<1e-6: theta0=0.0 # coordinates of concrete element and rebars dx=bb/float(mb) dy=hh/float(mh) da=dx*dy k=-1 for i in range(0,mh): y=0.5*hh-0.5*dy-dy*float(i) for j in range(0,mb): x=-0.5*bb+0.5*dx+dx*float(j) k=k+1 xc[k]=x yc[k]=y nmin=np.sum(fy*area)/bb/hh nmax=np.sum(fy*area)/bb/hh+k1*fc print('Max.tension, Max.conmresion') print('{0:10.3f}{1:10.3f}'.format(nmin,nmax)) theta1, theta2 = 0, np.pi/2 for kkk,theta in enumerate([theta0, theta1, theta2]): a_an,a_mo=calc(xc,yc,da,xs,ys,area,theta,mb,mh,ms,k1,fc,ecu,Es,fy) a_an=a_an/bb/hh a_mo=a_mo/bb/hh**2 print('****',np.degrees(theta)) for i in range(len(a_an)): print('{0:10.3f}{1:10.3f}'.format(a_an[i],a_mo[i])) if kkk==0: an_0=a_an mo_0=a_mo if kkk==1: an_1=a_an mo_1=a_mo if kkk==2: an_2=a_an mo_2=a_mo fax=FN*1e3/bb/hh mox=np.sqrt(MX**2+MY**2)*1e6/bb/hh**2 drawfig(theta0,an_0,mo_0,theta1,an_1,mo_1,theta2,an_2,mo_2,fax,mox) #--------------- # Execute #--------------- if __name__ == '__main__': main()
以上