📄 tempf3d.h
字号:
{
WResult<<"****!!!采用两点向后差分法而推导的迭代式,ComputeMethod= "<<ComputeMethod<<endl;
cout<<"***!!!采用两点向后差分法而推导的迭代式,ComputeMethod= "<<ComputeMethod<<endl;
}
else
{
WResult<<"****!!!计算方法选择有错,ComputeMethod= "<<ComputeMethod<<endl;
cout<<"***!!!计算方法选择有错,ComputeMethod= "<<ComputeMethod<<endl;
exit(0);
}
if(VarTstep==1)
{
WResult<<"***!!!采用定时间步长的求解策略,VarTstep= "<<VarTstep<<endl;
cout<<"***!!!采用定时间步长的求解策略,VarTstep= "<<VarTstep<<endl;
}
else if(VarTstep==2)
{
WResult<<"***!!!采用变时间步长的求解策略,VarTstep= "<<VarTstep<<endl;
cout<<"***!!!采用变时间步长的求解策略,VarTstep= "<<VarTstep<<endl;
}
else
{
WResult<<"****!!!求解策略选择有错,VarTstep= "<<VarTstep<<endl;
cout<<"***!!!求解策略选择有错,VarTstep= "<<VarTstep<<endl;
exit(0);
}
if(Water_Method==0)
{
WResult<<"***!!!不考虑钢筋混凝土含湿量对温度场的影响,Water_Method= "<<Water_Method<<endl;
cout<<"***!!!不考虑钢筋混凝土含湿量对温度场的影响,Water_Method= "<<Water_Method<<endl;
}
else if(Water_Method==1 || Water_Method==2)
{
WResult<<"***!!!考虑钢筋混凝土含湿量对温度场的影响****"<<endl;
WResult<<"***!!!:含湿量!!!***: "<<CWaterContent*100<<"%"<<endl;
WResult<<"***!!!:含湿量采用的计算方法是!!!***: ";
cout<<"***!!!考虑钢筋混凝土含湿量对温度场的影响*****"<<endl;
cout<<"***!!!:含湿量!!!***: "<<CWaterContent*100<<"%"<<endl;
cout<<"***!!!:含湿量采用的计算方法是!!!***: ";
if(Water_Method==1)
{
WResult<<" 参考Lie-韩林海的方法!!!"<<endl;
cout<<" 参考Lie-韩林海的方法!!!"<<endl;
}
else if(Water_Method==2)
{
WResult<<" 参考欧洲规范(EC94)的方法!!!"<<endl;
cout<<" 参考欧洲规范(EC94)的方法!!!"<<endl;
}
else if(Water_Method==3){
WResult<<" 徐玉野建议的方法!!!"<<endl;
cout<<" 徐玉野建议的方法!!!"<<endl;
}
}
else
{
WResult<<"***!!!含水量方法选择有错(Water_Method)!!! "<<Water_Method<<endl;
cout<<"***!!!含水量方法选择有错(Water_Method)!!! "<<Water_Method<<endl;
exit(0);
}
if(Bord_heatType==1)
{
WResult<<"***!!!分开考虑辐射和对流换热:Bord_heatType= "<<Bord_heatType<<endl;
cout<<"***!!!分开考虑辐射和对流换热:Bord_heatType= "<<Bord_heatType<<endl;
}
else if(Bord_heatType==2)
{
WResult<<"***!!!采用综合换热系数(段文玺建议的1985)Bord_heatType= "<<Bord_heatType<<endl;
cout<<"***!!!采用综合换热系数(段文玺建议的1985)Bord_heatType= "<<Bord_heatType<<endl;
}
else
{
WResult<<"***!!!换热系数方法选择有错(Bord_heatType)!!! "<<Bord_heatType<<endl;
cout<<"***!!!换热系数方法选择有错(Bord_heatType)!!! "<<Bord_heatType<<endl;
exit(0);
}
//***********下面进行单元划分************
TStoryElem_num=0; TStoryNode_num=0;
TStoryElem_num=TStoryElem_num+(divProt*2+Tdiv1)*(divProt*2+Tdiv2);
TStoryNode_num=TStoryNode_num+(divProt*2+Tdiv1+1)*(divProt*2+Tdiv2+1);
zdiv=0; //设置初值
zdiv=zdiv1+zdiv5; //
zdiv22=zdiv2*(int)(Colu_h2/ColuBot_Tiedist+0.0001); //柱底箍筋加密区的单元划分层数
zdiv=zdiv+zdiv22; //
zdiv33=zdiv3*(int)(Colu_h3/Tie_dist+0.0001); //柱中部箍筋均布区的单元划分层数
zdiv=zdiv+zdiv33; //
zdiv44=zdiv4*(int)(Colu_h4/ColuTop_Tiedist+0.0001); //柱顶部箍筋加密区的单元划分层数
zdiv=zdiv+zdiv44; //
bzdiv=zdiv22+zdiv33+zdiv44; //柱箍筋沿柱高的分层数
//计算温度场分析时的块体单元总数 温度场三维时的情况
TConElem_num=TStoryElem_num*zdiv; //计算有限元分析时的单元总数
TNode_num=TStoryNode_num*(zdiv+1); //计算有限元分析时的节点总数
TCElemNode_Info=(long *)calloc(TConElem_num*TElem_node,4); //三维混凝土块单元信息
Node_Coor=(double *)calloc(TNode_num*TDimension,8); //有限元节点坐标信息
for(loop=0;loop<zdiv;loop++) //混凝土单元信息编码
{
for(loop1=0;loop1<2*divProt+Tdiv2;loop1++)
{
for(loop2=0;loop2<2*divProt+Tdiv1;loop2++)
{
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+0)=loop1*(2*divProt+Tdiv1+1)+loop2+loop*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+1)=loop1*(2*divProt+Tdiv1+1)+loop2+1+loop*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+2)=(loop1+1)*(2*divProt+Tdiv1+1)+loop2+loop*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+3)=(loop1+1)*(2*divProt+Tdiv1+1)+loop2+1+loop*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+4)=loop1*(2*divProt+Tdiv1+1)+loop2+(loop+1)*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+5)=loop1*(2*divProt+Tdiv1+1)+loop2+1+(loop+1)*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+6)=(loop1+1)*(2*divProt+Tdiv1+1)+loop2+(loop+1)*TStoryNode_num;
*(TCElemNode_Info+TElem_node*TStoryElem_num*loop+TElem_node*(loop1*(2*divProt+Tdiv1)+loop2)+7)=(loop1+1)*(2*divProt+Tdiv1+1)+loop2+1+(loop+1)*TStoryNode_num;
}
}
}
for(loop=0;loop<zdiv+1;loop++)//混凝土单元节点坐标信息
{
for(loop1=0;loop1<2*divProt+Tdiv2+1;loop1++)
{
for(loop2=0;loop2<divProt*2+Tdiv1+1;loop2++)
{
//计算x坐标
if(loop2<divProt+1)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+0)=loop2*Prot_thick/divProt;
if(loop2>=divProt+1 && loop2<divProt+Tdiv1+1)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+0)=Prot_thick+(loop2-divProt)*(Sectwid-2*Prot_thick)/Tdiv1;
if(loop2>=divProt+Tdiv1+1)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+0)=Sectwid-Prot_thick+(loop2-divProt-Tdiv1)*Prot_thick/divProt;
//计算y坐标
if(loop1<divProt+1)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+1)=loop1*Prot_thick/divProt;
if(loop1>=divProt+1 && loop1<divProt+Tdiv2+1)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+1)=Prot_thick+(loop1-divProt)*(Sectlen-2*Prot_thick)/Tdiv2;
if(loop1>=divProt+Tdiv2+1)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+1)=Sectlen-Prot_thick+(loop1-divProt-Tdiv2)*Prot_thick/divProt;
//计算z坐标
if(loop<zdiv1) //柱底第一段箍筋至柱底处
{
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+2)=loop*Colu_h1/zdiv1;
}
if(loop>=zdiv1 && loop<zdiv1+zdiv22) //柱底箍筋加密区
{
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+2)=Colu_h1+(loop-zdiv1)*ColuBot_Tiedist/zdiv2;
}
if(loop>=zdiv1+zdiv22 && loop<zdiv1+zdiv22+zdiv33) //柱中部箍筋均布区
{
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+2)=Colu_h1+Colu_h2+(loop-zdiv1-zdiv22)*Tie_dist/zdiv3;
}
if(loop>=zdiv1+zdiv22+zdiv33 && loop<zdiv1+zdiv22+zdiv33+zdiv44) //柱顶箍筋加密区
{
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+2)=Colu_h1+Colu_h2+Colu_h3+(loop-zdiv1-zdiv22-zdiv33)*ColuTop_Tiedist/zdiv4;
}
if(loop>=zdiv1+zdiv22+zdiv33+zdiv44 && loop<=zdiv) //柱顶箍筋至柱顶那一段
{
if(zdiv5!=0)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+2)=Colu_h1+Colu_h2+Colu_h3+Colu_h4+(loop-zdiv1-zdiv22-zdiv33-zdiv44)*Colu_h5/zdiv5;
if(zdiv5==0)
*(Node_Coor+TStoryNode_num*TDimension*loop+TDimension*loop1*(divProt*2+Tdiv1+1)+TDimension*loop2+2)=Colu_high;
}
}
}
}
//***********钢筋单元信息编码*******
//***********钢筋单元节点坐标信息*******
//计算带宽
BandWidth=(long *)calloc(TNode_num,4);
DiagAddress=(long *)calloc(TNode_num,4);
for(loop=0; loop<TConElem_num; loop++)//带宽的计算
{
ibuf=*(TCElemNode_Info+TElem_node*loop+0); //选出单元中节点编号最小的节点
if(ibuf>*(TCElemNode_Info+TElem_node*loop+1)) ibuf=*(TCElemNode_Info+TElem_node*loop+1);
if(ibuf>*(TCElemNode_Info+TElem_node*loop+2)) ibuf=*(TCElemNode_Info+TElem_node*loop+2);
if(ibuf>*(TCElemNode_Info+TElem_node*loop+3)) ibuf=*(TCElemNode_Info+TElem_node*loop+3);
if(ibuf>*(TCElemNode_Info+TElem_node*loop+4)) ibuf=*(TCElemNode_Info+TElem_node*loop+4);
if(ibuf>*(TCElemNode_Info+TElem_node*loop+5)) ibuf=*(TCElemNode_Info+TElem_node*loop+5);
if(ibuf>*(TCElemNode_Info+TElem_node*loop+6)) ibuf=*(TCElemNode_Info+TElem_node*loop+6);
if(ibuf>*(TCElemNode_Info+TElem_node*loop+7)) ibuf=*(TCElemNode_Info+TElem_node*loop+7);
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+0)]<=(*(TCElemNode_Info+TElem_node*loop+0)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+0)]=*(TCElemNode_Info+TElem_node*loop+0)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+1)]<=(*(TCElemNode_Info+TElem_node*loop+1)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+1)]=*(TCElemNode_Info+TElem_node*loop+1)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+2)]<=(*(TCElemNode_Info+TElem_node*loop+2)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+2)]=*(TCElemNode_Info+TElem_node*loop+2)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+3)]<=(*(TCElemNode_Info+TElem_node*loop+3)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+3)]=*(TCElemNode_Info+TElem_node*loop+3)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+4)]<=(*(TCElemNode_Info+TElem_node*loop+4)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+4)]=*(TCElemNode_Info+TElem_node*loop+4)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+5)]<=(*(TCElemNode_Info+TElem_node*loop+5)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+5)]=*(TCElemNode_Info+TElem_node*loop+5)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+6)]<=(*(TCElemNode_Info+TElem_node*loop+6)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+6)]=*(TCElemNode_Info+TElem_node*loop+6)-ibuf+1;
if(BandWidth[*(TCElemNode_Info+TElem_node*loop+7)]<=(*(TCElemNode_Info+TElem_node*loop+7)-ibuf))
BandWidth[*(TCElemNode_Info+TElem_node*loop+7)]=*(TCElemNode_Info+TElem_node*loop+7)-ibuf+1;
}
//对角地址的计算按一维压缩数组贮存
for(loop=0; loop<TNode_num; loop++)
DiagAddress[loop]=1;
for(loop=1; loop<TNode_num; loop++)
{
DiagAddress[loop]=0;
for(loop1=0; loop1<=loop; loop1++)
{
DiagAddress[loop]+=BandWidth[loop1];
}
}
for(loop=0; loop<TNode_num; loop++)
DiagAddress[loop]--;
TotalLen=DiagAddress[TNode_num-1]+1; //一维变带宽存储的总个数
cout<<"***!!!x方向划分单元总数!!!***: "<<Tdiv1+divProt*2<<endl;
cout<<"***!!!y方向划分单元总数!!!***: "<<Tdiv2+divProt*2<<endl;
cout<<"***!!!钢筋混凝土柱高度z方向划分单元层总数!!!***: "<<zdiv<<endl;
cout<<"***!!!三维温度场单元总数!!!***: "<<TConElem_num<<endl;
cout<<"***!!!三维温度场节点总数!!!***: "<<TNode_num<<endl;
cout<<"***!!!变带宽下三角一维存储总刚度矩阵存储的总刚元素的个数为!!!***: "<<TotalLen<<endl;
WResult<<"***!!!x方向划分单元总数!!!***: "<<Tdiv1+divProt*2<<endl;
WResult<<"***!!!y方向划分单元总数!!!***: "<<Tdiv2+divProt*2<<endl;
WResult<<"***!!!钢筋混凝土柱高度z方向划分单元层总数!!!***: "<<zdiv<<endl;
WResult<<"***!!!三维温度场单元总数!!!***: "<<TConElem_num<<endl;
WResult<<"***!!!三维温度场节点总数!!!***: "<<TNode_num<<endl;
WResult<<"***!!!变带宽下三角一维存储总刚度矩阵存储的总刚元素的个数为!!!***: "<<TotalLen<<endl;
//**********边界单元的处理*********
Border_Elemnum=TStoryElem_num*2; //先算柱底和柱顶的边界单元数
Border_Elemnum=Border_Elemnum+2*(Tdiv1+divProt*2)*zdiv; //边界底边、上边面
Border_Elemnum=Border_Elemnum+2*(Tdiv2+divProt*2)*zdiv; //边界右边、左边面
cout<<"***!!!三维温度场边界单元总数!!!***: "<<Border_Elemnum<<endl;
WResult<<"***!!!三维温度场边界单元总数!!!***: "<<Border_Elemnum<<endl;
TBorderCon=(long *)calloc(Border_Elemnum*(1+TElem_node+2),4);
//下面计算柱侧面受火部分所对应柱沿高度方向的起始层数和终止层数
//判断起始层位置
BFbegceng=0;
if(BorderFz1<Colu_h1)
{
if(Colu_h1!=0) BFbegceng=(int)(BorderFz1/(Colu_h1/zdiv1)+0.00001);
}
if(BorderFz1>=Colu_h1 && BorderFz1<Colu_h1+Colu_h2)
{
BFbegceng=zdiv1+(int)((BorderFz1-Colu_h1)/(ColuBot_Tiedist/zdiv2)+0.00001);
}
if(BorderFz1>=Colu_h1+Colu_h2 && BorderFz1<Colu_h1+Colu_h2+Colu_h3)
{
BFbegceng=zdiv1+zdiv22+(int)((BorderFz1-Colu_h1-Colu_h2)/(Tie_dist/zdiv3)+0.00001);
}
if(BorderFz1>=Colu_h1+Colu_h2+Colu_h3 && BorderFz1<Colu_h1+Colu_h2+Colu_h3+Colu_h4)
{
BFbegceng=zdiv1+zdiv22+zdiv33+(int)((BorderFz1-Colu_h1-Colu_h2-Colu_h3)/(ColuTop_Tiedist/zdiv4)+0.00001);
}
if(BorderFz1>=Colu_h1+Colu_h2+Colu_h3+Colu_h4 && BorderFz1<Colu_high)
{
BFbegceng=zdiv1+zdiv22+zdiv33+zdiv44+(int)((BorderFz1-Colu_h1-Colu_h2-Colu_h3-Colu_h4)/(Colu_h5/zdiv5)+0.00001);
}
//判断侧面受火终止层的位置
BFendceng=zdiv;
if(BorderFz2<Colu_h1)
{
if(Colu_h1!=0) BFendceng=(int)(BorderFz2/(Colu_h1/zdiv1)+0.00001);
}
if(BorderFz2>=Colu_h1 && BorderFz2<Colu_h1+Colu_h2)
{
BFendceng=zdiv1+(int)((BorderFz2-Colu_h1)/(ColuBot_Tiedist/zdiv2)+0.00001);
}
if(BorderFz2>=Colu_h1+Colu_h2 && BorderFz2<Colu_h1+Colu_h2+Colu_h3)
{
BFendceng=zdiv1+zdiv22+(int)((BorderFz2-Colu_h1-Colu_h2)/(Tie_dist/zdiv3)+0.00001);
}
if(BorderFz2>=Colu_h1+Colu_h2+Colu_h3 && BorderFz2<Colu_h1+Colu_h2+Colu_h3+Colu_h4)
{
BFendceng=zdiv1+zdiv22+zdiv33+(int)((BorderFz2-Colu_h1-Colu_h2-Colu_h3)/(ColuTop_Tiedist/zdiv4)+0.00001);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -