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

📄 struct2d.h

📁 是一个结构试验设计的加工曲线的跟踪实现 没有密码。第一次
💻 H
📖 第 1 页 / 共 5 页
字号:
void Struct2D();

void Struct2D()
{
	ifstream F2comp("F2comp.txt");
	ifstream F2zbar("F2zbar.txt");
	ifstream Struc_Tin("Struc_Tin.txt");
    ofstream R2Weiyi("R2Weiyi.csv");           
    ofstream R2Sectwei("R2Sectwei.csv");
	ofstream WResult("WResult.txt",ios::ate);
	ofstream OutInitData("OutInitData.txt");

	if(F2comp.fail())  //检查输入文件
	{
		cerr<<"error opening the F2comp.txt!\n";
		exit(0);
	}
	if(F2zbar.fail())
	{
		cerr<<"error opening the F2zbar.txt!\n";
		exit(0);
	}

//	int Expand;                       //轴向位移是否处于膨胀段,1是,0否
//	double MaxUAxial=-1000.0;         //最大轴向位移
	
	double *Ttnode;                   //每一时间步各节点的温度
	double e0;                        //截面几何中心处的正应变
	double wany,wanz;                 //截面绕y轴的曲率,绕z轴的曲率
	double z0,y0;                     //截面形心处的z坐标z0,y坐标y0
	double *NCSect;                   //截面混凝土单元的形函数矩阵
	double *NSSect;                   //截面钢筋单元的形函数矩阵

	double xewywz[3][1];              //截面基本未知量向量
    double *ConAc;                    //混凝土单元的单元面积矩阵
    double *SteAs;                    //钢筋单元的单元面积矩阵
    double *ConEstr;                  //混凝土单元的应力切线模量列矩阵
    double *ConET;                    //混凝土单元的温度切线模量列矩阵
    double *ConETime;                 //混凝土单元的时间切线模量	   
    double *SteEstr;                  //钢筋单元的应力切线模量列矩阵
    double *SteET;                    //钢筋的温度切线模量矩阵
    double *SteETime;                 //钢筋的时间切线模量矩阵
	//截面的状态
	double *CElemstress;              //各混凝土单元的应力 
    double *CElemstrain;              //各混凝土单元的应变 
    double *CElemtemp0;               //各混凝土单元的温度
	double *CElemtemp1;               //混凝土单元下一迭代步的单元温度

    double *SElemstress;              //各钢筋单元的应力 
    double *SElemstrain;              //各钢筋单元的应变 

    double curtime0;                  //当前时间步对应的时间 
    double curtime1;                  //下一时间步对应的时间
    long *F2CN_TE;                    //结构分析的每个混凝土单元的节点所对应的温度场分析的单元号 

	double *FTnode0;                  //结构分析当前时间步结构网格各节点所对应的温度 
    double *FTnode1;                  //结构分析下一时间步结构网格各节点所对应的温度 
    double *STnode0;                  //钢筋所在位置点的当前时间步的温度 
    double *STnode1;                  //钢筋所在位置点的下一时间步的温度 
    long *F2SN_TE;                    //钢筋位置所对应的温度场分析时混凝土单元编号 

    double TimeZ;                     //每个时间步的时间增量 
    double *CTempZ;                   //混凝土单元每个时间步的温度增量 
    double *STempZ;                   //钢筋单元每个时间步的温度增量 
    double *CTimeZ;                   //混凝土单元的时间增量 
    double *STimeZ;                   //钢筋单元的时间增量 

    double e0y,e0z;                   //荷载绕z轴,y轴的偏心矩 
    double EfLength;                  //柱的计算长度系数 
    double u0y,u0z;                   //柱在绕z轴,y轴方向的初始缺陷 
    double Coepx;                     //柱的初始缺陷系数,取柱计算长度的1/1000.0 
    double CFirLength;                //柱的受火高度 
	double ComLength;                 //柱计算长度 
    double PCentral;                  //柱的集中荷载大小,单位KN 
    int Pdiv;                         //采用恒载升温途径时,先恒载时划分的荷载步数   
    double DelP;                      //恒载时的荷载步增量 

	double *F2KZ;                     //简化分析时的总刚度矩阵 
    double *CEsmAC;                   //混凝土应力切线模量和混凝土面积的乘积 
    double *SEsmAs;                   //钢筋应力切线模量和钢筋面积的乘积    
    double *CETmAC;                   //混凝土的温度总弹塑性矩阵 温度切线模量和混凝土面积的乘积;
    double *CETmAC0;                   //混凝土的温度总弹塑性矩阵备份;温度切线模量和混凝土面积的乘积 
    double *CETimAc;                  //混凝土的时间总弹塑性矩阵,时间切线模量和混凝土面积的乘积 
    double *CETimAc0;                 //混凝土的时间总弹塑性矩阵备份,时间切线模量和混凝土面积的乘积 
    double *SETmAs;                   //钢筋的温度总弹塑性矩阵,钢筋温度切线模量和钢筋面积的乘积 
    double *SETmAs0;                  //钢筋的温度总弹塑性矩阵备份,钢筋温度切线模量和钢筋面积的乘积 
    double *SETimAs;                  //钢筋的时间切线模量和钢筋面积的乘积 
    double *SETimAs0;                 //钢筋的时间总弹塑性矩阵备份;钢筋的时间切线模量和钢筋面积的乘积 
    double *NCmES;                    //混凝土单元形状函数和Es,cs的乘积;中间矩阵用于形成总刚度矩阵 
    double *NSmES;                    //钢筋单元形状函数和Es,cs的乘积 中间矩阵用于形成总刚度矩阵

	double *F2KZtemp;                  //3*3的临时矩阵 
    double *JuZhenC1;                  //混凝土单元的临时矩阵F2ConElem_num*3 
    double *JuZhenC10;                 //混凝土单元的临时矩阵F2ConElem_num*3 
    double *JuZhenC2;                  //混凝土单元的临时矩阵F2ConElem_num*1   
    double *JuZhenS1;                  //钢筋单元的临时矩阵3*F2Longbar_num 
    double *JuZhenS10;                 //钢筋单元的临时矩阵3*F2Longbar_num 
    double *JuZhenS2;                  //钢筋单元的临时矩阵F2Longbar_num*1 
    double *JuZhen31;                  //3*1的临时矩阵 
    double *JuZhens31;                 //3*1的临时矩阵  

	double *Zxewywz;                   //截面基本未知量增量向量 
    double *Zxewywz0;                  //截面基本未知量增量向量备份 
    double *Zload;                     //荷载增量 

    double UAxial1;                    //轴向变形 
    double UAxial0;                    //前一时间步的轴向位移
    double CUy0,CUz0;                  //当前增量步绕z轴,y轴的侧向位移;
    double CUy1,CUz1;                  //当前增量步绕z轴,y轴的迭代过程中的侧向位移 
   
    double *ZCZstrain;                 //混凝土的总应变增量向量 
    double *ZSZstrain;                 //钢筋的总应变增量向量
    double *ZCStstrain;                //混凝土的应力应变增量向量
    double *ZSStstrain;                //钢筋的应力应变增量向量

	double *FcSect;                    //截面总内力向量
    double *RFnbanlan;                 //不平衡力向量            
    double FNMaxErr;                   //常温时不平衡力的最大误差
    double FNMaxErr0;                  //升温时不平衡力的最大误差
    int Aitken;                        //增量步内是否采用Aitken加速收敛方法;1表示采用,0表示不采用  
    double wAitken;                    //Aitken的加速收敛因子
    double *uAitken31;                 //计算wAitken的临时矩阵3*1
    int PHxiaozheng;                   //是否采用平衡校正的迭代算法
	int EuAdams;                       //解除温度增量荷载和时间增量荷载与基本变量间的耦合性
    
    double *DelFT;                     //温度增量荷载向量
    double *DelFTime;                  //时间增量荷载向量
	double *CJZ0;                      //临时变量
    double *SJZ0;                      //临时变量
    
	double *SJZ_Wendubu;               //钢筋温度补偿时间(小时)
    double *SJZ_WendubuDT;             //钢筋温度补偿时间对温度的导数

	double xyytemp1,xyytemp2,xyytemp3,xyytemp4;
	double *liyishuox0,*liyishuox1;             //临时变量;
    double *liyishuok0,*liyishuok1;             //临时变量;
    double *liyishuoy0,*liyishuoy1;             //临时变量;

	int i,j,k,liang2,liang3;
	double error=0.0;
	
	char NoUse[200];//为输入设置的无用的变量
   	//***从文件F2comp.txt读取初始数据***
	F2comp.getline(NoUse,sizeof(NoUse));  
	F2comp>>Csresta;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>Ssresta;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>sgaowenx; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>fc;
	fc=fc*1.0e6;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>cp; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>ceutt;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>sfu; 
	sfu=sfu*1.0e6;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>e0y>>e0z; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>CFirLength;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>EfLength; 
    ComLength=CFirLength*EfLength; //柱的计算长度
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>Coepx; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>PCentral;
    PCentral=1000.0*PCentral;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>Pdiv;               
    DelP=PCentral/Pdiv;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>FNMaxErr0; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>FNMaxErr; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>Aitken;  
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>PHxiaozheng; 
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>EuAdams;
	F2comp.getline(NoUse,sizeof(NoUse));
	F2comp>>F2method;
	//***从文件F2zbar.txt读取初始数据***
	F2zbar>>F2Longbar_num;
	F2LbarInfo=(double *)calloc(F2Longbar_num*5,8);
	for(i=0; i<F2Longbar_num; i++)
	{
		F2zbar.getline(NoUse,sizeof(NoUse));
		for(j=0; j<5; j++)
			F2zbar>>*(F2LbarInfo+5*i+j);
		*(F2LbarInfo+5*i+3)=*(F2LbarInfo+5*i+3)*1000000.0;
		*(F2LbarInfo+5*i+4)=*(F2LbarInfo+5*i+4)*1000000.0;
	}
	OutInitData<<"     从文件F2mesh.txt读取初始数据"<<endl;
	OutInitData<<"矩形截面边长为: "<<Sectwid<<"  "<<Sectlen<<endl;
	OutInitData<<"保护层厚度为: "<<Prot_thick<<endl;
	OutInitData<<"爆裂厚度为: "<<Spall_thick<<endl;
	if(MeshID==1)OutInitData<<"与温度场网格划分一样"<<endl;
	if(MeshID==0)OutInitData<<"与温度场网格划分不一样"<<endl;
	OutInitData<<"结构单元网格划分数为: "<<div1<<"  "<<div2<<" "<<divProt<<endl;
	OutInitData<<"温度场单元网格划分数为: "<<Tdiv1<<"  "<<Tdiv2<<endl;
	OutInitData<<endl;
	OutInitData<<"   从文件F2comp.txt读取初始数据"<<endl;
	if(Csresta==1) OutInitData<<"采用过镇海的混凝土高温本构关系"<<endl;
    if(Csresta==2) OutInitData<<"采用LIE的混凝土高温本构关系"<<endl;
	if(Csresta==3) OutInitData<<"采用Kodur硅质骨料高强混凝土高温本构关系"<<endl;
    if(Ssresta==1) OutInitData<<"采用过镇海的钢筋高温本构关系"<<endl;
    if(Ssresta==2) OutInitData<<"采用LIE的钢筋高温本构关系"<<endl;
	if(sgaowenx==0) OutInitData<<"不考虑钢筋高温蠕变"<<endl;
	if(sgaowenx==1) OutInitData<<"考虑钢筋高温蠕变"<<endl;
	OutInitData<<"混凝土的棱柱体强度为: "<<fc/1000000.0<<"MPa"<<endl;
    OutInitData<<"混凝土受压峰值应力所对应的峰值应变 "<<cp<<endl;
    OutInitData<<"混凝土极限拉应变 "<<ceutt<<endl;
    OutInitData<<"钢筋极限抗拉强度 "<<sfu/1000000.0<<"MPa"<<endl;
    OutInitData<<"荷载偏心矩 "<<e0y<<" "<<e0z<<endl;
	OutInitData<<"受火长度 "<<CFirLength<<endl;
	OutInitData<<"计算长度有效系数 "<<EfLength<<endl; 
	OutInitData<<"初始缺陷系数 "<<Coepx<<endl;
	OutInitData<<"荷载大小 "<<PCentral/1000.0<<"KN"<<endl;
	OutInitData<<"采用恒载升温途径时,先恒载时划分的荷载步数 "<<Pdiv<<endl;
	OutInitData<<"不平衡力的最大误差 "<<FNMaxErr0<<" "<<FNMaxErr<<endl;
	OutInitData<<"初始温度和爆裂临界温度为:"<<iniT0<<"  "<<Critical_T<<endl;
	OutInitData<<"温度场分析时间步数 "<<Step<<endl;
	if(Aitken==1)  OutInitData<<"增量步内采用AitKen加速收敛方法"<<endl;
	if(Aitken==0)  OutInitData<<"增量步内不采用AitKen加速收敛方法"<<endl;
	if(PHxiaozheng==1) OutInitData<<"采用平衡校正的迭代算法"<<endl;
	if(PHxiaozheng==0) OutInitData<<"不采用平衡校正的迭代算法"<<endl;
	if(EuAdams==1) OutInitData<<"采用Euler方法解除耦合"<<endl;
	if(EuAdams==0) OutInitData<<"采用Euler和Adams方法联合解除耦合"<<endl;
	if(F2method==1) OutInitData<<"采用LIE的简化方法"<<endl;
	if(F2method==2) OutInitData<<"采用韩林海的简化方法"<<endl;
	OutInitData<<endl;
	OutInitData<<"    从文件F2zbar.txt读取初始数据"<<endl;
	OutInitData<<"钢筋根数: "<<F2Longbar_num<<endl;
	for(i=0; i<F2Longbar_num; i++){
		for(j=0; j<5; j++)
			OutInitData<<*(F2LbarInfo+5*i+j)<<"  ";
		OutInitData<<endl;
	}

	if(fabs(e0y)<=0.000001)
	{
		if(e0y>=0.0)
			u0y=Coepx*ComLength; //柱在绕z轴方向的初始缺陷
		if(e0y<0.0)
			u0y=-Coepx*ComLength; 
	}
    if(fabs(e0y)>=0.000001)
	    u0y=e0y; 
	if(fabs(e0z)<=0.000001)
	{
		if(e0z>=0.0)
			u0z=Coepx*ComLength; //柱在绕z轴方向的初始缺陷
		if(e0z<0.0)
			u0z=-Coepx*ComLength;
	}
    if(fabs(e0z)>=0.000001)
	    u0z=e0z; 

	if(Sect_Type==1)       //矩形截面几何中心
	{
		z0=Sectwid/2.0;
		y0=Sectlen/2.0;
	}
	if(MeshID==0)
	{
		TNode_num=(Tdiv1+divProt*2+1)*(Tdiv2+divProt*2+1);   //温度场分析时节点总数目
		TConElem_num=(Tdiv1+divProt*2)*(Tdiv2+divProt*2);    //温度场分析时单元总数目
        F2Node_num=(div1+divProt*2+1)*(div2+divProt*2+1);    //节点总数              
        F2ConElem_num=(div1+divProt*2)*(div2+divProt*2);     //单元总数
		Node_Coor=(double *)calloc(TNode_num*2,8);
		F2Node_Coor=(double *)calloc(F2Node_num*2,8);
		TCElemNode_Info=(long *)calloc(TConElem_num*4,4);
		F2CElemNode_Info=(long *)calloc(F2ConElem_num*4,4);
		for(i=0; i<TConElem_num; i++)
		{
			*(TCElemNode_Info+4*i+0)=i+int(i/(Tdiv1+divProt*2));
			*(TCElemNode_Info+4*i+1)=i+int(i/(Tdiv1+divProt*2))+1;
			*(TCElemNode_Info+4*i+2)=i+int(i/(Tdiv1+divProt*2))+(Tdiv1+divProt*2)+1;
			*(TCElemNode_Info+4*i+3)=i+int(i/(Tdiv1+divProt*2))+(Tdiv1+divProt*2)+2;
		}
		for(i=0; i<Tdiv2+2*divProt+1; i++)  //温度场坐标
		{
			for(j=0; j<Tdiv1+2*divProt+1; j++)//
			{
				//节点z坐标 
				if(j<divProt+1)
					Node_Coor[2*i*(divProt*2+Tdiv1+1)+2*j]=Prot_thick*j/divProt;	
				if(j>divProt && j<Tdiv1+divProt+1) 
					Node_Coor[2*i*(divProt*2+Tdiv1+1)+2*j]=Prot_thick+(Sectwid-Prot_thick*2)*(j-divProt)/Tdiv1;
				if(j>Tdiv1+divProt)
					Node_Coor[2*i*(divProt*2+Tdiv1+1)+2*j]=Sectwid-Prot_thick+(j-divProt-Tdiv1)*Prot_thick/divProt;
				//节点y坐标
				if(i<divProt+1)
					Node_Coor[2*i*(divProt*2+Tdiv1+1)+2*j+1]=Prot_thick*i/divProt;
				if(i>divProt && i<Tdiv2+divProt+1) 
					Node_Coor[2*i*(divProt*2+Tdiv1+1)+2*j+1]=Prot_thick+(Sectlen-Prot_thick*2)*(i-divProt)/Tdiv2;
				if(i>Tdiv2+divProt)

⌨️ 快捷键说明

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