⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 3.txt

📁 文件1.txt,2.txt,3.txt和5.txt为用Fortran编写的有限元程序 4.txt为用c++编写的钢筋混凝土异形柱的全过程非线性分析源程序
💻 TXT
字号:
//Lshape 200*700*500
#include "iostream.h"
#include "iomanip.h"
#include "fstream.h"
#include "math.h"
#include "stdio.h"  
#include "stdlib.h"
const int M=70;
const int H=20;
const int N=50;
const int P=N-H;
const int Q=M-H;
const int C=3;
const double fc=30.0;
const double d=2.0;//纵筋直径  
const double E=0.002; 
const double B=16; 
const double s=6;//箍筋间距 
const double ES=200000;
const double e0=0.002; 
const double pi=3.1415926;
const double F=fc*0.79*145.138;

//***********************
//约束混凝土区的本构关系

double strc(double e,double p, double s)
{
double a,a0,m,nn,l,z; 
double e50u,e50h;
e50u=(3+0.003*1.2*F)/(1.2*F-1000);
e50h=0.75*p*sqrt(B/s);
z=0.5/(e50u+e50h-0.0030);
a0=F;
m=1.2*F*((-2*e)/(1.5*E)-(e*e)/(1.5*1.5*E*E));
nn=1.2*F*(1-z*(-e-0.003));
l=0.24*F;
if(e>=-0.002&&e<0) a=-m/171.44;
else if(e>0) a=0;
else
{
if(nn>l)
a=-nn/171.44;
else
a=-l/171.44;
}
return(a);
}

 //***********************
//非约束保护层混凝土区的本构关系 

double strc1(double e)
{
  double a,a0;      
  a0=0.67*fc;
  if(e>=-0.002&&e<=0) a=-a0*((-2*e)/e0-(e*e)/(e0*e0));    
  else if(e>=-0.004&&e<-0.002) a=-a0*(1-0.8*(fabs(e)-0.002)/0.002);
  else a=0; 
   return(a);  	  
 }

//***************************
//钢筋本构关系
double strs(double e)
  {
double as,fy;
fy=400;
if(e<fy/ES&&e>-fy/ES)
as=ES*e;
else if(e<=-fy/ES&&e>=-0.016)
as=-fy;
else if(e<-0.016) as=-(fy+0.01*ES*(fabs(e)-0.016));
else if(e>=fy/ES&&e<=0.016) as=fy;
else  as=fy+0.01*ES*(e-0.016);

return(as); 
  }

//************************
//主程序
void  main()
{
int i,j,k;
int kk,kkk;
int z0=0;
kk=1;kkk=1;
double fy=400.0;
k=0;
double dans[14][2],danc[2000][2];
//***********************
//形成钢筋单元坐标数组

dans[0][0]=C+d/2;dans[0][1]=C+d/2;
dans[1][0]=H-C-d/2;dans[1][1]=C+d/2;
dans[2][0]=C+d/2;dans[2][1]=H-C-d/2;
dans[3][0]=H-C-d/2;dans[3][1]=H-C-d/2;
dans[4][0]=M-C-d/2;dans[4][1]=C+d/2;
dans[5][0]=M-C-d/2;dans[5][1]=H-C-d/2;
dans[6][0]=C+d/2;dans[6][1]=N-C-d/2;
dans[7][0]=H-C-d/2;dans[7][1]=N-C-d/2;
dans[8][0]=H+Q/3-C;dans[8][1]=C+d/2;
dans[9][0]=H+Q/3-C;dans[9][1]=H-C-d/2;
dans[10][0]=H+2*Q/3-C;dans[10][1]=C+d/2;
dans[11][0]=H+2*Q/3-C;dans[11][1]=H-C-d/2;
dans[12][0]=C+d/2;dans[12][1]=H+P/2-C;
dans[13][0]=H-C-d/2;dans[13][1]=H+P/2-C;

for(i=0;i<14;i++)
cout<<dans[i][0]<<" "<<dans[i][1]<<" ";
//形成混凝土单元节点数组

//**********************1
for(i=0;i<M;i++)
{for(j=0;j<3;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
//**********************2
for(i=0;i<3;i++)
{for(j=3;j<N-3;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
//**********************3
for(i=0;i<H;i++)
{for(j=N-3;j<N;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
//**********************4
for(i=M-3;i<M;i++)
{for(j=3;j<H;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
//**********************5
for(i=H-3;i<M-3;i++)
{for(j=H-3;j<H;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
//**********************6
for(i=H-3;i<H;i++)
{for(j=H;j<N-3;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
z0=k;
//形成约束区内混凝土单元的坐标数组
for(i=3;i<M-3;i++)
{for(j=3;j<H-3;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
for(i=3;i<H-3;i++)
{for(j=H-3;j<N-3;j++)
{danc[k][0]=i+0.5;
danc[k][1]=j+0.5;
k++;}
}
//************************
//混凝土单元数组形成完毕

for(i=0;i<2000;i++)
cout<<danc[i][0]<<" "<<danc[i][1]<<" ";
//输入原始数据
double n,m,p,alf,as1,as2,x0,y0,d0;
double l1,l2;
double as3;
double rou;
double zhou=0.40;
n=zhou*fc*0.67*200000;
x0=27.5;y0=17.5;alf=pi*1.75;
d0=1.0;//箍筋直径
as1=100*d*d*pi/4.0;
as2=100*d0*d0*pi/4.0; 
as3=12*12*pi/4.0;
l1=10*((H-2*C)*2+(M-2*C)*2);
l2=10*((H-2*C)*2+(N-2*C)*2);
p=as2*(l1+l2)/((M+N-H-2*C)*(H-2*C)*s*1000.0);
rou=(8*as1+4*as3)/180000;
double esb,sb;
sb=s/d;
esb=44200*pow(sb,-0.412)/1000000.0;
cout<<esb<<" ";
double r,ri,r1,dr;
double fai,dfai,sita,dsita,fai1,sita1;
double nc,ns1,nsc,np;
double mcx,mcy;

double msx,msy,mscx,mscy;
double msx1,msy1;
double mx,my;
double eic,eis[14];
//***************************
double eicm,eism;
int q,u,a,w,aa;
char quf;
int end=0;
double miu;
double shi;

int tt=0;
double mfai[10000][6],mmax=0;
double fac[10000],fag[10000];


double facg;
//***************************************
//strs1数组储存钢筋屈服时各钢筋单元的应变
//strs2数组储存第一批混凝土单元屈服时各钢筋单元的应变
//strs3数组储存极限状态个钢筋单元的应变

double strs1[14],strs2[14],strs3[14];

double *ang1,*ang2;
double *dist1,*dist2;
double anga,angb,dista,distb;
double angle,dist;
int number;
number=10000;
//申请动态内存
ang1=new double[number];
ang2=new double[number];
dist1=new double[number];
dist2=new double[number];




fai=10e-7;
dfai=2e-7;
sita1=alf;
dsita=0.0005;
r1=-5;
dr=0.005;
int num1=0;
do{
fai=fai+dfai;

q=1;k=0;u=0;

do{
sita=sita1+u*q*dsita;

a=0;w=1;aa=0;

do{
eicm=0;eism=0;
r=r1+aa*w*dr;

np=0;nc=0;
ns1=0;nsc=0;
mcx=0;mcy=0;
msx=0;msy=0;mscx=0;mscy=0;
msx1=0;msy1=0;
mx=0;my=0;
for(i=0;i<z0;i++)
{ri=r-danc[i][0]*cos(sita)-danc[i][1]*sin(sita);
 eic=ri*fai*10.0;
 if(eic<eicm)
	 eicm=eic;
 { 		  
       nc=nc+strc1(eic)*100;
       mcx=mcx+strc1(eic)*100.0*(danc[i][1]-y0)*10.0;
       mcy=mcy+strc1(eic)*100.0*(danc[i][0]-x0)*10.0;
}
}
  for(i=z0;i<2000;i++)
         {ri=r-danc[i][0]*cos(sita)-danc[i][1]*sin(sita);
          eic=ri*fai*10.0;
         
          nc=nc+strc(eic,p,s)*100;
          mcx=mcx+strc(eic,p,s)*100.0*(danc[i][1]-y0)*10.0;
          mcy=mcy+strc(eic,p,s)*100.0*(danc[i][0]-x0)*10.0;
}


for(i=0;i<8;i++)
{
     ri=r-dans[i][0]*cos(sita)-dans[i][1]*sin(sita);
     eis[i]=fai*ri*10.0;
     if(eis[i]>eism)
		 eism=eis[i];
         ns1=ns1+strs(eis[i])*as1;
         nsc=nsc+strc(eis[i],p,s)*as1;
         msx1=msx1+strs(eis[i])*as1*(dans[i][1]-y0)*10.0;
         msy1=msy1+strs(eis[i])*as1*(dans[i][0]-x0)*10.0;
         mscx=mscx+strc(eis[i],p,s)*as1*(dans[i][1]-y0)*10.0;
         mscy=mscy+strc(eis[i],p,s)*as1*(dans[i][0]-x0)*10.0;
}
for(i=8;i<14;i++)
{
     ri=r-dans[i][0]*cos(sita)-dans[i][1]*sin(sita);
     eis[i]=fai*ri*10.0;
     if(eis[i]>eism)
		 eism=eis[i];
         ns1=ns1+strs(eis[i])*as3;
         nsc=nsc+strc(eis[i],p,s)*as3;
         msx1=msx1+strs(eis[i])*as3*(dans[i][1]-y0)*10.0;
         msy1=msy1+strs(eis[i])*as3*(dans[i][0]-x0)*10.0;
         mscx=mscx+strc(eis[i],p,s)*as3*(dans[i][1]-y0)*10.0;
         mscy=mscy+strc(eis[i],p,s)*as3*(dans[i][0]-x0)*10.0;
}
  
  
np=nc+ns1-nsc;
msx=msx1-mscx;
msy=msy1-mscy;
a++;
aa=(a+1)/2;
w=-w;



}while((fabs((np+n)/n))>=0.02);

r1=r;

k++;
u=(k+1)/2;
q=-q;
      
     mx=mcx+msx;
     my=mcy+msy;
  shi=atan2(mx,my);
    }while((shi-alf)>=0.005);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 


sita1=sita;
m=sqrt(mx*mx+my*my)/1000000.0;
fai1=1000*fai;

//**************************
//求混凝土达到0.0033时的曲率
for(i=0;i<2000;i++)
{
ri=r-danc[i][0]*cos(sita1)-danc[i][1]*sin(sita1);
eic=ri*fai*10.0;
if(eic<-0.0033) 
{
 fac[kkk]=fai;
 ang2[kkk]=sita1;
 dist2[kkk]=r;
 cout<<eic<<"   "<<danc[i][0]<<"   "<<danc[i][1]<<"  ";
 kkk++;
 break;
}
}



//***********************
//求钢筋达到屈服时的曲率
for(i=0;i<14;i++)
{
ri=r-dans[i][0]*cos(sita1)-dans[i][1]*sin(sita1);
eis[i]=ri*fai*10.0;
if(eis[i]>fy/ES)
{fag[kk]=fai;
ang1[kk]=sita;
dist1[kk]=r;
cout<<eis[i]<<"  "<<dans[i][0]<<"  "<<dans[i][1]<<"  ";

kk++;
break;
}
}
//**********************
//计算纵筋压曲时的end值
for(i=0;i<14;i++)
{
ri=r-dans[i][0]*cos(sita1)-dans[i][1]*sin(sita1);
eis[i]=ri*fai*10.0;
if(eis[i]<=-esb) 
{end=1;
cout<<end<<"   "<<eis[i]<<"  "<<dans[i][0]<<"   "<<dans[i][1]<<"  ";
break;}
}

    tt++;
    mfai[tt][0]=m;
    mfai[tt][1]=fai1;
    mfai[tt][2]=eicm;
    mfai[tt][3]=eism;
    mfai[tt][4]=r;
    mfai[tt][5]=sita1;	
    mmax=5.0;
	for(i=1;i<=tt;i++)
	{      
    if(mfai[i][0]>mmax)
    mmax=mfai[i][0]; 
	}
   
    } while((mfai[tt][0]>=0.7*mmax)&&(end!=1));
	//*****************************
	//跳出循环~~~~~~~~~~·

    angle=sita1;
	dist=r;
	anga=ang1[1];
	dista=dist1[1];
	angb=ang2[1];
	distb=dist2[1];
	//释放堆内存空间
	delete[]ang1;
	delete[]ang2;
	delete[]dist1;
	delete[]dist2;
	
	

     int num2,num3,num4;
	    num2=num3=num4=0;

	int conc[2000],stel[14],stelp[14];
	//*******************************
	//计算混凝土压碎的单元,1表示压碎
	for(i=0;i<2000;i++)
	{ri=r-danc[i][0]*cos(sita1)-danc[i][1]*sin(sita1);
	eic=ri*fai*10.0;
	if(eic<-0.0033)
		{
		num2++;
	 conc[i]=1;
		}
	 else
		 conc[i]=0;
	}

	//*****************************************
	//计算达到极限曲率时钢筋屈服的单元,1表示屈服
	for(i=0;i<14;i++)
	{
		ri=r-dans[i][0]*cos(sita1)-dans[i][1]*sin(sita1);
		eis[i]=ri*fai*10.0;
		//求解极限状态时各钢筋单元的应变
		strs3[i]=eis[i];
		if(eis[i]>fy/ES)
		{
			num3++;
			stel[i]=1;
		}
			else 
				stel[i]=0;
	//**********************************************
	//计算达到极限曲率时纵筋压曲的钢筋单元,1表示压曲
			if(eis[i]<-esb)
		{
				num4++;
			stelp[i]=1;
		}
			else
				stelp[i]=0;
	}
    //***************************
	// 求解屈服曲率
   if(fac[1]>=fag[1])
  {facg=fag[1]*1000;
   quf='g';
  }
  else
  {facg=fac[1]*1000;
  quf='h';
  }
   miu=fai1/facg;
   //***********************************
   //求解钢筋开始屈服时各钢筋单元的应变
       for(i=0;i<14;i++)
		{ri=dista-dans[i][0]*cos(anga)-dans[i][1]*sin(anga);
          strs1[i]=fag[1]*ri*10.0;
        }
   //***********************************
   //求解混凝土压应变达到0.0033时各钢筋单元的应变
      for(i=0;i<14;i++)
		{ri=distb-dans[i][0]*cos(angb)-dans[i][1]*sin(angb);
          strs2[i]=fac[1]*ri*10.0;
		 }
   ofstream out;
out.open("d10-60-315.dat");
out<<setw(10)<<"轴压比n=" <<zhou<<endl;
out<<"esb="<<esb<<endl;
out<<"配箍率p=" <<p<<endl;
out<<"配筋率ρ="<<rou<<endl;
out<<"荷载角alf="<<alf<<endl;
out<<"end="<<end<<endl;
out<<num2<<" "<<num3<<" "<<num4<<endl;
out<<"屈服曲率:"<<facg<<"  "<<"极限曲率:"<<fai1<<"\n";
out<<"最大承载力:"<<mmax<<"截面延性:"<<miu<<"\n";
out<<"最先屈服单元是:"<<quf<<endl;
out<<setw(15)<<'M'<<setw(15)<<"fai"<<endl;
//****************************************
for(i=1;i<=tt;i++)
out<<setw(15)<<mfai[i][0]<<setw(15)<<mfai[i][1]<<endl;
out<<setw(15)<<"eicm"<<setw(15)<<"eism"<<endl;
for(i=1;i<=tt;i++) 
out<<setw(15)<<mfai[i][2]<<setw(15)<<mfai[i][3]<<endl;
out<<setw(15)<<'R'<<setw(15)<<"sita"<<endl;
for(i=1;i<=tt;i++)
out<<setw(15)<<mfai[i][4]<<setw(15)<<mfai[i][5]<<endl;
 for(i=0;i<2000;i++)
	{ out<<conc[i]<<" ";
    if(i%10==0)
		out<<endl;}
 out<<endl;
     for(i=0;i<14;i++)
	 out<<stel[i]<<"    "<<stelp[i]<<endl;
//******************************
out<<"混凝土应变达到0.0033时的曲率为:"<<endl;
out<<fac[1]*1000<<endl;
out<<"R="<<distb<<endl;
out<<"中和轴法线角度:"<<angb<<endl;
//**********************************
out<<"钢筋屈服时截面的曲率为:"<<endl;
out<<fag[1]*1000<<endl;
out<<"R="<<dista<<endl;
out<<"中和轴法线角度:"<<anga<<endl;

//******************************
out<<"钢筋屈服时各钢筋单元的应变为:" <<endl;
for(i=0;i<14;i++)
out<<strs1[i]<<endl;
out<<"第一批混凝土单元屈服时各钢筋单元的应变为:" <<endl;
for(i=0;i<14;i++)
out<<strs2[i]<<endl;
out<<"极限破坏时各钢筋单元的应变为:" <<endl;
for(i=0;i<14;i++)
out<<strs3[i]<<endl;

out.close();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -