📄 tempf3d.h
字号:
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 + -