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

📄 tempf3d.h

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

double Colu_high;                  //异形柱的高度
double Colu_h1;                    //柱底端第一层箍筋离柱底的距离
double Colu_h2;                    //柱底箍筋加密区高度
double Colu_h3;                    //柱箍筋均布区高度
double Colu_h4;                    //柱顶箍筋加密区高度
double Colu_h5;                    //柱顶层箍筋离柱顶的距离 

double ColuBot_Tiedist;            //柱底端箍筋加密区间距
double Tie_dist;                   //均布区的箍筋间距
double ColuTop_Tiedist;            //柱顶端箍筋加密区间距

int TStoryElem_num=0;              //初始层单元数
int TStoryNode_num=0;              //初始层节点数

long Border_Elemnum;               //单元在边界处的数目总数,按面计算
long *TBorderCon;                  //温度场分析时存贮边界条件的数组,为[Bord_num,3+TElem_node]的数组依次为单元号,总体节点编号(TElem_node/2个)局部节点编号(TElem_node/2个),受火类型,对应的表面编号
double BorderFz1;                  //边界受火信息,受火面的起始高度z1
double BorderFz2;                  //边界受火信息,受火面的顶点高度z2
int BFbegceng;                     //边界受火对应的沿柱高度方向的起始层
int BFendceng;                     //边界受火对应的沿柱高度方向起始层
int *BodreArea;                    //边界条件 6*2的数组,0为面号,1受火边界情况

int TElem_node;                    //温度场分析所用每个混凝土单元的节点数
int zdiv;                          //柱沿高度方向的划分层数
int bzdiv;                         //箍筋沿柱高度方向的层数
int zdiv1;                         //柱底端第一层箍筋至柱底这一段的单元划分数
int zdiv2;                         //柱底箍筋加密区每段的单元划分数
int zdiv3;                         //柱中部箍筋每段的单元划分数
int zdiv4;                         //柱顶箍筋加密区每段的单元划分数
int zdiv5;                         //柱顶端第一层箍筋至柱顶这一段的单元划分数
int zdiv22;                        //柱底箍筋加密区的单元划分层数
int zdiv33;                        //柱中部箍筋均布区的单元划分层数
int zdiv44;                        //柱顶箍筋加密区的单元划分层数

int Bartype_num;                   //钢筋的种类
double *Bar_Info;                  //钢筋的信息,包括截面积,常温下的屈服强度
double Longbar_diam;               //纵筋的直径
int LbarType;                      //每根纵筋对应的类型号,为[Longbar_num,1]的数组
int Lbar_Enum;                     //纵筋网格划分后的单元数目
int Tie_Enumc;                     //箍筋网格划分后的层单元数目
int Tie_Enum;                      //箍筋网格划分后的单元数目
double LongbarX;                   //每根纵筋位置x坐标
double LongbarY;                   //每根纵筋位置y坐标
int Tie_SecType;                   //箍筋对应的钢筋类型号
double *Tie_Info;                  //箍筋信息;起点坐标,终点坐标
long *TLbarElem_Info;              //纵筋单元信息,编号从1开始,总体坐标中的节点编号,钢筋类型
long *TTieElem_Info;               //箍筋单元信息,编号从1开始,总体坐标中的节点编号,局部坐标中的节点编号,钢筋类型
int SteelExit;                     //温度场计算是否考虑钢筋的影响

double TimeStep;                   //温度场分析的时间步,以分钟为单位输入,输入后转为国际单位制s
double TotalTime;                  //温度场分析的结束时间,以分钟为单位输入,输入后转为国际单位制s

int CCondu_Type;                   //温度场分析时混凝土热传导系数的取值公式
int CSpecilHeat_Type;              //温度场分析时混凝土体积比热的取值公式
int SCondu_Type;                   //温度场分析时钢筋的热传导系数的取值公式
int SSpecilHeat_Type;              //温度场分析时钢筋体积比热的取值公式
int ComputeMethod;                 //温度场分析求解选项,1-采用两点向后差分格式,2-权函数按Galerkin取值时得到的隐格式
int TemperAlsub;                   //温度场求解是否采用子空间过滤

int IterStop;                      //判断迭代是否结束的标志;0表示结束,1表示继续迭代

double Time;                       //温度场分析的当前时间
double Envtemper;                  //受火的环境温度
int Bord_heatType;                 //边界受火条件的处理,1-分开考虑,2-综合考虑

double *KTG,*CcG,*KG,*KBG;         //刚度矩阵
double *PBG,*PBG0;                 //热荷载矩阵
double *CcG0,*KG0,*KTG0,*KBG0;     //刚度矩阵、热荷载矩阵备份用的
double *A,*B,*C;                   //解方程用来简化表达的数组

double *Temp0;                     //t时刻的节点温度
double *Temp1,*Temp;               //t+DelT时刻的节点温度
double TempAverage;                //单元的平均节点温度

//**********函数声明***************************//
double CalcuSSpecilHeat(int,double);      

void TempF3D()
{
	ifstream Tempfin("Temp3D.txt");
	ofstream OutResults("Struc_Tin.txt");   //只输出中截面的节点温度场
	ofstream TimeOut("TimeHistory.txt");
	ofstream Temperp("Temperp.csv");
	ofstream OutTemp("温度提取.csv");
	ofstream YunTu("云图.csv");
	ofstream WResult("WResult.txt");

	if(Tempfin.fail())
	{
		cerr<<"error opening the Temp3D.txt!\n";
		exit(0);
	}

	WResult<<"\n********!!!钢筋混凝土矩形柱三维瞬态温度场非线性有限元计算程序!!!*********\n"<<endl;
	WResult<<"  **************************************************************\n"<<endl;
	WResult<<"\n***!!!华南理工大学建筑学院土木工程系结构工程2003级硕士研究生唐贵和编制!!!***\n"<<endl;
	WResult<<"***!!!下面进行三维瞬态温度场非线性有限元分析!!!***\n"<<endl;
	cout<<"\n********!!!钢筋混凝土矩形柱三维瞬态温度场非线性有限元计算程序!!!*********\n"<<endl;
	cout<<"  **************************************************************"<<endl;
	cout<<"\n***!!!华南理工大学建筑学院土木工程系结构工程2003级硕士研究生唐贵和编制!!!***\n"<<endl;
	cout<<"******!!!!!下面进行三维瞬态温度场非线性有限元分析!!!!!******\n"<<endl;

	int NumTime=0;                          //累计时间步的数量
	int IterCount=0;                        //累计时间步内迭代的次数
	int IterMax;                            //每一时间步内迭代的最大次数
	double FNMaxErr;                        //前后两次迭代容差
	double error=0.0;                       //前后两次迭代最大温差

	double ChangHeatCT;                     //温度T时的综合换热系数/对流换热系数
    double hc_Heat;                         //迎火面的对流换热系数
    double hc_Nort;                         //背火面的对流换热系数
    double hr_Heat;                         //迎火面的辐射系数
    double hr_Nort;                         //背火面的辐射系数

	double Solid_a;                         //六面体单元边长2a的一半
    double Solid_b;                         //六面体单元边成2b的一半
    double Solid_c;                         //六面体单元边长2c的一半

	double Steel_l;                         //钢筋单元长度的一半
    double Steelarea;                       //钢筋单元的截面积

    double CKTe[8][8];                      //六面体单元的导热矩阵
    double Cce[8][8];                       //六面体单元的质量热容矩阵
    double CKBe[4][4];                      //六边形单元的单元传热矩阵
    double PBe[4];                          //六面体单元的传热热载荷向量
    double SKTe[2][2];                      //钢筋单元link33的导热矩阵
    double SCce[2][2];                      //钢筋单元link33的质量热容矩阵

	double CK,CSpecialHeat;                 //计算混凝土单元刚度矩阵的导热系数和体积热容
	double SK,SSpecialHeat;                 //计算钢筋单元刚度矩阵的导热系数和体积热容

	int BordEnum0;                          //边界单元所对应的单元号
	int Enode1;                             //边界单元节点号1
	int Enode2;                             //边界单元节点号2
	int Enode3;                             //边界单元节点号3
	int Enode4;                             //边界单元节点号4
    double Bord6_a;                         //六面体单元在边界处四边形一边的长度的一半
    double Bord6_b;                         //六面体单元在边界处四边形中另一边的长度的一半  
 
	double Defer;                           //对流和辐射分开考虑时,炉壁温度的折减系数

	int Num_TiQu=0;                         //按坐标提取温度点的个数
	int Points=0;                           //按节点号提取法的点数   
	double *CorX_TiQu,*CorY_TiQu;           //需要提取温度点的坐标
	double *Temp_TiQu;                      //需要提取温度点的温度
	double *PointsTemp;                     //由节点号提取点的温度
	int *PointsNum;                         //提取点的节点号
	int ContourNum;                         //提取云图的时刻个数
	double *Contour;                        //提取云图的时刻

	long Bord_num;                          //边界处理时的临时变量已经编好的单元等

	BodreArea=(int *)calloc(6*2,2);         //边界面数和受火条件

	double *Linshi;                         //两点后差法时的温度增量TNode_num*1
	int loop,loop1,loop2;                   //循坏变量
	int ibuf=0;                             //
	int iRow,iCol;                          // 

	//**********从文件读取初始数据**********
	char NoUse[200];                        //为输入设置的无用的变量
	Tempfin.getline(NoUse,sizeof(NoUse));   //钢筋混凝土柱的几何尺寸
	Tempfin>>Colu_high;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Colu_h1>>Colu_h2>>Colu_h3>>Colu_h4>>Colu_h5;
	if(Colu_high!=(Colu_h1+Colu_h2+Colu_h3+Colu_h4+Colu_h5))
	{
		WResult<<"***!!!高强混凝土柱在高度方向的几何尺寸有错!!!***"<<endl;
		cout<<"***!!!高强混凝土柱在高度方向的几何尺寸有错!!!***"<<endl;	
	}
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>BorderFz1>>BorderFz2;
	if(Colu_high<BorderFz2)
	{
		WResult<<"***!!!高强混凝土柱在高度方向的几何尺寸有错Colu_high<BorderFz2!!!***"<<endl;
		cout<<"***!!!高强混凝土柱在高度方向的几何尺寸有错Colu_high<BorderFz2!!!***"<<endl;	
	}
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>ColuBot_Tiedist>>Tie_dist>>ColuTop_Tiedist;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Longbar_diam;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>TElem_node;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>zdiv1>>zdiv2>>zdiv3>>zdiv4>>zdiv5;
	Tempfin.getline(NoUse,sizeof(NoUse));   //受火形式
	for(loop=0; loop<6;loop++)
	{		
		Tempfin>>*(BodreArea+loop*2+0)>>*(BodreArea+loop*2+1);
	}
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>TotalTime>>TimeStep;
	TotalTime=TotalTime*60.0;         //把时间变成秒制单位的时间
	TimeStep=TimeStep*60.0;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>IterMax>>FNMaxErr;	
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>CCondu_Type>>CSpecilHeat_Type;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>SCondu_Type>>SSpecilHeat_Type;
	Tempfin.getline(NoUse,sizeof(NoUse));//含水量热工参数
	Tempfin>>CWaterContent;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Qw;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Cw>>PWater;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>CWaterPeakT;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Water_Method;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>PConcrete;	
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Bord_heatType;
	Tempfin.getline(NoUse,sizeof(NoUse));//受火面和背火面的对流换热系数
	Tempfin>>hc_Heat>>hc_Nort;
	Tempfin.getline(NoUse,sizeof(NoUse));//受火面和背火面的辐射换热系数
	Tempfin>>hr_Heat>>hr_Nort;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Defer;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>ComputeMethod;
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>SteelExit; 
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>ContourNum; 
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>TemperAlsub; 
	if(ContourNum>=1)
	{
		Contour=(double *)calloc(ContourNum,8);
		Tempfin.getline(NoUse,sizeof(NoUse));
		for(loop=0; loop<ContourNum; loop++)
			Tempfin>>Contour[loop];
	}
	if(ContourNum<1) //不需要提取云图 
	{
		Tempfin.getline(NoUse,sizeof(NoUse));
		Tempfin.getline(NoUse,sizeof(NoUse));
	}
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Num_TiQu; 
	if(Num_TiQu>=1)
	{	
		CorX_TiQu=(double *)calloc(Num_TiQu,8);
		CorY_TiQu=(double *)calloc(Num_TiQu,8);
		Temp_TiQu=(double *)calloc(Num_TiQu,8);
		Tempfin.getline(NoUse,sizeof(NoUse));
		for(loop=0; loop<Num_TiQu; loop++)
			Tempfin>>CorX_TiQu[loop];		
		Tempfin.getline(NoUse,sizeof(NoUse));
		for(loop=0; loop<Num_TiQu; loop++)
			Tempfin>>CorY_TiQu[loop];
	}
	if(Num_TiQu<1)  //没有依靠坐标提取点 
	{
		Tempfin.getline(NoUse,sizeof(NoUse));
		Tempfin.getline(NoUse,sizeof(NoUse));
	}
	Tempfin.getline(NoUse,sizeof(NoUse));
	Tempfin>>Points;
	if(Points>=1)
	{
		PointsTemp=(double *)calloc(Points,8);
		PointsNum=(int *)calloc(Points,2);
		Tempfin.getline(NoUse,sizeof(NoUse));
		for(loop=0;loop<Points;loop++)
			Tempfin>>PointsNum[loop];
	}
	
	WResult<<"***************************************************************"<<endl;
	WResult<<"***!!!程序状态: 输入的信息已经读入!!!***"<<endl;

	if(ComputeMethod==1)
	{
		WResult<<"***!!!采用过镇海推导的Galerkin法迭代式,ComputeMethod=  "<<ComputeMethod<<endl;
		cout<<"***!!!采用过镇海推导的Galerkin法迭代式,ComputeMethod=  "<<ComputeMethod<<endl;	
	}
	else if(ComputeMethod==2)

⌨️ 快捷键说明

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