/*---------------------------------------------------------------------------*/ /* 水鉄基準による座屈圧力計算 */ /*---------------------------------------------------------------------------*/ #include #include double func(double k0,double rm,double SigN,double Ess,double t,double SigF,double Phi,double Psi); /*---------------------------------------------------------------------------*/ int main() { /* 座屈荷重計算(補剛材無し) */ /* D0:鉄管内径 */ /* t0:設計板厚 */ /* eps:鋼材の余裕厚 *? /* Sigy:鋼材の降伏点 */ /* Siga:鋼材の許容応力 */ /* pos:鋼材のポアソン比 */ /* Temp:鉄管の温度降下量 */ /* Jc:継手効率 */ /* Pk:座屈圧力 */ /* Bg:岩盤の塑性変形係数 */ FILE *fp; int nnn,iii; double Es,eps,pos,As,Bg; double D0,t0,Sigy,Siga,Jc,Temp; double Ess,ny,SigF,t,rm,r0d,k0,SigN,Pk; double fn1,fn2,fnm,x1,x2,xm; double Phi,Psi,Omega; double pkr[5]; Es=206000; eps=1.5; pos=0.3; As=1.2e-5; Jc=1.00; Bg=1.0; t0=30.0; Temp=20.0; /* Temp;温度降下量 */ /* D0 ;鉄管内径 */ /* t0 ;鉄管板厚 */ /* Sigy;降伏点 */ /* Siga;許容応力 */ fp=fopen("inp_PS_JAPAN.prn","w"); printf("#D0 t0 rm/t0 Pk1 Pk2 Pk3 Pk4 Pk5\n"); fprintf(fp,"#D0 t0 rm/t0 Pk1 Pk2 Pk3 Pk4 Pk5\n"); /******************************/ for(nnn=35;nnn<=140;nnn++){ /******************************/ D0=2.0*(double)nnn*t0; for(iii=0;iii<=4;iii++){ switch(iii){ case 0:Sigy=885.0;Siga=400.0;break; /*HT100*/ case 1:Sigy=685.0;Siga=330.0;break; /*SHY685*/ case 2:Sigy=450.0;Siga=240.0;break; /*SM570*/ case 3:Sigy=315.0;Siga=175.0;break; /*SM490*/ case 4:Sigy=235.0;Siga=130.0;break; /*SM400*/ } Ess=Es/(1.0-pos*pos); ny=1.5-0.5*1.0/(1.0+0.002*Es/Sigy)/(1.0+0.002*Es/Sigy); SigF=ny*Sigy/sqrt(1.0-pos+pos*pos); t=t0-eps; rm=(D0+t0)/2.0; r0d=(D0+2.0*t0)/2.0; k0=(As*Temp+Bg*Siga*Jc/Es)*r0d/(1.0+Bg); /*k0=0.4e-3*rm;*/ /*Amstutz*/ Phi=1.68;Psi=0.25;Omega=0.175;/*水鉄基準*/ x1=0.0;x2=SigF; do{ xm=0.5*(x1+x2); fn1=func(k0,rm,x1,Ess,t,SigF,Phi,Psi); fn2=func(k0,rm,x2,Ess,t,SigF,Phi,Psi); fnm=func(k0,rm,xm,Ess,t,SigF,Phi,Psi); if(fn1*fnm<0.0){x1=x1;x2=xm;} if(fnm*fn2<0.0){x1=xm;x2=x2;} SigN=xm; }while(fabs(fnm)>1e-6); Pk=SigN/(rm/t)/(1.0+Omega*2.0*rm/t*(SigF-SigN)/Ess); pkr[iii]=Pk; } printf("%.1f %.1f %.1f %.3f %.3f %.3f %.3f %.3f\n",D0,t0,0.5*D0/t0,pkr[0],pkr[1],pkr[2],pkr[3],pkr[4]); fprintf(fp,"%.1f %.1f %.1f %.3f %.3f %.3f %.3f %.3f\n",D0,t0,0.5*D0/t0,pkr[0],pkr[1],pkr[2],pkr[3],pkr[4]); /******************************/ } /******************************/ fclose(fp); return 0; } /*---------------------------------------------------------------------------*/ double func(double k0,double rm,double SigN,double Ess,double t,double SigF,double Phi,double Psi) { double a,b,fn; a=(k0/rm+SigN/Ess)*pow(1.0+12.0*rm*rm/t/t*SigN/Ess,1.5); b=Phi*2.0*rm/t*(SigF-SigN)/Ess*(1.0-Psi*2.0*rm/t*(SigF-SigN)/Ess); fn=a-b; return fn; } /*---------------------------------------------------------------------------*/