📄 struct2d.h
字号:
Node_Coor[2*i*(divProt*2+Tdiv1+1)+2*j+1]=Sectlen-Prot_thick+(i-divProt-Tdiv2)*Prot_thick/divProt;
}
}
for(i=0; i<F2ConElem_num; i++)
{
*(F2CElemNode_Info+4*i+0)=i+int(i/(div1+divProt*2));
*(F2CElemNode_Info+4*i+1)=i+int(i/(div1+divProt*2))+1;
*(F2CElemNode_Info+4*i+2)=i+int(i/(div1+divProt*2))+(div1+divProt*2)+1;
*(F2CElemNode_Info+4*i+3)=i+int(i/(div1+divProt*2))+(div1+divProt*2)+2;
}
for(i=0; i<div2+2*divProt+1; i++) //行号
{
for(j=0; j<div1+2*divProt+1; j++)//
{
//节点z坐标
if(j<divProt+1)
F2Node_Coor[2*i*(divProt*2+div1+1)+2*j]=Prot_thick*j/divProt;
if(j>divProt && j<div1+divProt+1)
F2Node_Coor[2*i*(divProt*2+div1+1)+2*j]=Prot_thick+(Sectwid-Prot_thick*2)*(j-divProt)/div1;
if(j>div1+divProt)
F2Node_Coor[2*i*(divProt*2+div1+1)+2*j]=Sectwid-Prot_thick+(j-divProt-div1)*Prot_thick/divProt;
//节点y坐标
if(i<divProt+1)
F2Node_Coor[2*i*(divProt*2+div1+1)+2*j+1]=Prot_thick*i/divProt;
if(i>divProt && i<div2+divProt+1)
F2Node_Coor[2*i*(divProt*2+div1+1)+2*j+1]=Prot_thick+(Sectlen-Prot_thick*2)*(i-divProt)/div2;
if(i>div2+divProt)
F2Node_Coor[2*i*(divProt*2+div1+1)+2*j+1]=Sectlen-Prot_thick+(i-divProt-div2)*Prot_thick/divProt;
}
}
}
if(MeshID==1) //只有同时进行温度场分析时才可以
{
F2Node_num=TNode_num; //节点总数
F2ConElem_num=TConElem_num; //单元总数
F2Node_Coor=(double *)calloc(F2Node_num*2,8);
F2CElemNode_Info=(long *)calloc(F2ConElem_num*4,4);
for(i=0; i<F2ConElem_num; i++)
{
*(F2CElemNode_Info+4*i+0)=*(TCElemNode_Info+4*i+0);
*(F2CElemNode_Info+4*i+1)=*(TCElemNode_Info+4*i+1);
*(F2CElemNode_Info+4*i+2)=*(TCElemNode_Info+4*i+2);
*(F2CElemNode_Info+4*i+3)=*(TCElemNode_Info+4*i+3);
}
for(i=0; i<TNode_num; i++)
{
//z坐标
F2Node_Coor[2*i]=*(Node_Coor+i*2);
//y坐标
F2Node_Coor[2*i+1]=*(Node_Coor+i*2+1);
}
}
//下面形成截面的形函数矩阵;
NCSect=(double *)calloc(F2ConElem_num*3,8);
NSSect=(double *)calloc(F2Longbar_num*3,8);
//混凝土单元的形函数矩阵
for(i=0; i<F2ConElem_num; i++)
{
*(NCSect+3*i)=1.0;
//单元相对于截面形心的z坐标;
xyytemp1=F2Node_Coor[*(F2CElemNode_Info+4*i)*2];
xyytemp2=F2Node_Coor[*(F2CElemNode_Info+4*i+1)*2];
xyytemp3=F2Node_Coor[*(F2CElemNode_Info+4*i+2)*2];
xyytemp4=F2Node_Coor[*(F2CElemNode_Info+4*i+3)*2];
*(NCSect+3*i+2)=(xyytemp1+xyytemp2+xyytemp3+xyytemp4)/4.0-z0;
//单元相对于截面形心的y坐标
xyytemp1=F2Node_Coor[*(F2CElemNode_Info+4*i)*2+1];
xyytemp2=F2Node_Coor[*(F2CElemNode_Info+4*i+1)*2+1];
xyytemp3=F2Node_Coor[*(F2CElemNode_Info+4*i+2)*2+1];
xyytemp4=F2Node_Coor[*(F2CElemNode_Info+4*i+3)*2+1];
*(NCSect+3*i+1)=(xyytemp1+xyytemp2+xyytemp3+xyytemp4)/4.0-y0;
}
//钢筋单元的形函数矩阵
for(i=0; i<F2Longbar_num; i++)
{
*(NSSect+3*i)=1.0;
//单元相对于截面形心的z坐标
*(NSSect+3*i+2)=F2LbarInfo[5*i+0]-z0;
//单元相对于截面形心的y坐标
*(NSSect+3*i+1)=F2LbarInfo[5*i+1]-y0;
}
//计算混凝土单元面积和钢筋单元面积的列矩阵
ConAc=(double *)calloc(F2ConElem_num*F2ConElem_num,8);
SteAs=(double *)calloc(F2Longbar_num*F2Longbar_num,8);
for(i=0; i<F2ConElem_num; i++) //混凝土单元面积
{
xyytemp1=fabs(*(F2Node_Coor+*(F2CElemNode_Info+4*i+1)*2)-*(F2Node_Coor+*(F2CElemNode_Info+4*i)*2));
xyytemp2=fabs(*(F2Node_Coor+*(F2CElemNode_Info+4*i+2)*2+1)-*(F2Node_Coor+*(F2CElemNode_Info+4*i)*2+1));
*(ConAc+i*F2ConElem_num+i)=xyytemp1*xyytemp2;
}
for(i=0; i<F2Longbar_num; i++) //钢筋单元面积
{
SteAs[i*F2Longbar_num+i]=pi*(*(F2LbarInfo+5*i+2))*(*(F2LbarInfo+5*i+2))/4.0;
}
Ttnode=(double *)calloc(TNode_num,8);
for(i=0;i<TNode_num;i++) //网格点的初始温度
*(Ttnode+i)=iniT0;
//结构分析的网格节点所对应的温度场分析时的单元号
F2CN_TE=(long *)calloc(F2Node_num,4);
for(i=0; i<F2Node_num; i++)
{
//每个节点所对应的坐标;
xyytemp1=*(F2Node_Coor+i*2); //z坐标
xyytemp2=*(F2Node_Coor+i*2+1); //y坐标
for(j=0;j<TConElem_num;j++)
{
if(xyytemp1>=*(Node_Coor+*(TCElemNode_Info+4*j)*2)-0.0000000000000001 && xyytemp1<=*(Node_Coor+*(TCElemNode_Info+4*j+1)*2)+0.0000000000000001 )
{
if(xyytemp2>=*(Node_Coor+*(TCElemNode_Info+4*j)*2+1)-0.0000000000000001 && xyytemp2<=*(Node_Coor+*(TCElemNode_Info+4*j+2)*2+1)+0.0000000000000001 )
{
*(F2CN_TE+i)=j;
}
}
}
}
FTnode0=(double *)calloc(F2Node_num,8);
FTnode1=(double *)calloc(F2Node_num,8);
//下面计算结构网格的各节点所对应的初始温度
for(i=0;i<F2Node_num;i++)
{
*(FTnode0+i)=iniT0;
*(FTnode1+i)=iniT0;
}
//计算钢筋对应的初始温度
STnode0=(double *)calloc(F2Longbar_num,8);
STnode1=(double *)calloc(F2Longbar_num,8);
//结构分析的钢筋点的位置所对应的温度场分析时的单元号
F2SN_TE=(long *)calloc(F2Longbar_num,4);
for(i=0;i<F2Longbar_num;i++)
{
//每根钢筋所对应的点的坐标
xyytemp1=*(F2LbarInfo+5*i+0); //z坐标
xyytemp2=*(F2LbarInfo+5*i+1); //y坐标
for(j=0;j<TConElem_num;j++)
{
if(xyytemp1>=*(Node_Coor+*(TCElemNode_Info+4*j)*2)-0.0000000000000001 && xyytemp1<=*(Node_Coor+*(TCElemNode_Info+4*j+1)*2)+0.0000000000000001 )
{
if(xyytemp2>=*(Node_Coor+*(TCElemNode_Info+4*j)*2+1)-0.0000000000000001 && xyytemp2<=*(Node_Coor+*(TCElemNode_Info+4*j+2)*2+1)+0.0000000000000001 )
{
*(F2SN_TE+i)=j;
}
}
}
}
for(i=0;i<F2Longbar_num;i++)//钢筋单元的温度
{
*(STnode0+i)=iniT0;
*(STnode1+i)=iniT0;
}
curtime0=0.0; curtime1=0.0; TimeZ=0.0; //初始时间
CTempZ=(double *)calloc(F2ConElem_num,8); //混凝土单元温度增量
STempZ=(double *)calloc(F2Longbar_num,8); //钢筋单元温度增量
CElemtemp0=(double *)calloc(F2ConElem_num,8);//各混凝土单元当前时间步的温度
CElemtemp1=(double *)calloc(F2ConElem_num,8);//各混凝土单元下一时间步的温度
//给变量赋初值
e0=0.0; wany=0.0; wanz=0.0;
//变量赋初值
CUy0=0.0; CUz0=0.0; UAxial0=0.0; UAxial1=0.0;
xewywz[0][0]=e0;
xewywz[1][0]=wanz;
xewywz[2][0]=wany;
Zxewywz=(double *)calloc(3,8);
Zload=(double *)calloc(3,8);
JuZhen31=(double *)calloc(3,8);
JuZhens31=(double *)calloc(3,8);
FcSect=(double *)calloc(3*1,8); //截面总内力向量
RFnbanlan=(double *)calloc(3*1,8); //不平衡力向量
uAitken31=(double *)calloc(3*1,8);
Zxewywz0=(double *)calloc(3*1,8);
JuZhenC2=(double *)calloc(F2ConElem_num*1,8);
JuZhenS2=(double *)calloc(F2Longbar_num*1,8);
for(i=0;i<F2ConElem_num;i++)
*(JuZhenC2+i)=0.0;
for(i=0;i<F2Longbar_num;i++)
*(JuZhenS2+i)=0.0;
ConEstr=(double *)calloc(F2ConElem_num*F2ConElem_num,8);//混凝土单元的应力切线模量列矩阵
CJZ0=(double *)calloc(F2ConElem_num*F2ConElem_num,8); //临时变量
CElemstress=(double *)calloc(F2ConElem_num,8); //各混凝土单元的应力
CElemstrain=(double *)calloc(F2ConElem_num,8); //各混凝土单元的应变
ConET=(double *)calloc(F2ConElem_num*F2ConElem_num,8); //混凝土的温度切线模量矩阵
ConETime=(double *)calloc(F2ConElem_num*F2ConElem_num,8); //混凝土的时间切线模量矩阵
SteEstr=(double *)calloc(F2Longbar_num*F2Longbar_num,8); //钢筋单元的应力切线模量
SteET=(double *)calloc(F2Longbar_num*F2Longbar_num,8); //钢筋的温度切线模量矩阵
SteETime=(double *)calloc(F2Longbar_num*F2Longbar_num,8);//钢筋的时间切线模量矩阵
SJZ0=(double *)calloc(F2Longbar_num*F2Longbar_num,8); //临时变量
SElemstress=(double *)calloc(F2Longbar_num,8); //各钢筋单元的应力
SElemstrain=(double *)calloc(F2Longbar_num,8); //各钢筋单元的应变
ZCZstrain=(double *)calloc(F2ConElem_num,8); //混凝土的总应变增量向量
ZSZstrain=(double *)calloc(F2Longbar_num,8); //钢筋的总应变增量向量
ZCStstrain=(double *)calloc(F2ConElem_num,8); //混凝土的应力应变增量向量
ZSStstrain=(double *)calloc(F2Longbar_num,8); //钢筋的应力应变增量向量
liyishuox0=(double *)calloc(F2ConElem_num,8); //临时变量
liyishuox1=(double *)calloc(F2ConElem_num,8); //临时变量
liyishuok0=(double *)calloc(F2ConElem_num,8); //临时变量
liyishuok1=(double *)calloc(F2ConElem_num,8); //临时变量
liyishuoy0=(double *)calloc(F2ConElem_num,8); //临时变量
liyishuoy1=(double *)calloc(F2ConElem_num,8); //临时变量
DelFT=(double *)calloc(3,8); //混凝土的温度增量荷载向量
DelFTime=(double *)calloc(3,8); //混凝土的时间增量荷载向量
SJZ_Wendubu=(double *)calloc(F2Longbar_num,8); //钢筋温度补偿时间(小时)
SJZ_WendubuDT=(double *)calloc(F2Longbar_num,8); //钢筋温度补偿时间对温度的导数
//给变量赋初值;各混凝土单元应力
for(i=0;i<F2Longbar_num;i++)
{
*(SJZ_Wendubu+i)=0.0;
*(SJZ_WendubuDT+i)=0.0;
}
for(i=0;i<F2ConElem_num;i++)
{
*(CElemstress+i)=0.0;
*(CElemstrain+i)=0.0;//各混凝土单元应变
}
//各钢筋单元应力
for(i=0;i<F2Longbar_num;i++)
{
*(SElemstress+i)=0.0;
*(SElemstrain+i)=0.0;
}
for(i=0;i<F2ConElem_num*F2ConElem_num;i++)
{
*(ConET+i)=0.0; //混凝土的温度切线模量
*(ConETime+i)=0.0; //混凝土的时间切线模量
}
for(i=0;i<3;i++)
{
*(DelFT+i)=0.0;
*(DelFTime+i)=0.0;
}
CUy1=0.0; //当前增量步绕z轴的第二次迭代的侧向位移
CUz1=0.0; //当前增量步绕y轴的第二次迭代的侧向位移
CEsmAC=(double *)calloc(F2ConElem_num*F2ConElem_num,8); //混凝土的应变总弹塑性矩阵
CETmAC=(double *)calloc(F2ConElem_num*F2ConElem_num,8);
CETmAC0=(double *)calloc(F2ConElem_num*F2ConElem_num,8); //混凝土的温度总弹塑性矩阵
CETimAc=(double *)calloc(F2ConElem_num*F2ConElem_num,8);//混凝土的时间切线模量矩阵
CETimAc0=(double *)calloc(F2ConElem_num*F2ConElem_num,8);//混凝土的时间切线模量矩阵备份
NCmES=(double *)calloc(3*F2ConElem_num,8);
NSmES=(double *)calloc(3*F2Longbar_num,8); //钢筋单元形函数矩阵和钢筋应变刚度的乘积
JuZhenC1=(double *)calloc(3*F2ConElem_num,8);
JuZhenC10=(double *)calloc(3*F2ConElem_num,8); //临时矩阵
JuZhenS1=(double *)calloc(3*F2Longbar_num,8); //钢筋的临时矩阵
JuZhenS10=(double *)calloc(3*F2Longbar_num,8); //钢筋的临时矩阵
for(i=0;i<F2ConElem_num*F2ConElem_num;i++)
{
*(CETmAC+i)=0.0;
*(CETmAC0+i)=0.0;
*(CETimAc+i)=0.0;
*(CETimAc0+i)=0.0;
*(CEsmAC+i)=0.0;
}
for(i=0;i<3*F2ConElem_num;i++)
*(NCmES+i)=0.0;
F2KZ=(double *)calloc(3*3,8);
F2KZtemp=(double *)calloc(3*3,8);
for(i=0;i<3*3;i++)
{
*(F2KZ+i)=0.0;
*(F2KZtemp+i)=0.0;
}
SEsmAs=(double *)calloc(F2Longbar_num*F2Longbar_num,8);
SETmAs=(double *)calloc(F2Longbar_num*F2Longbar_num,8);
SETmAs0=(double *)calloc(F2Longbar_num*F2Longbar_num,8); //钢筋的温度总弹塑性矩阵备份
SETimAs=(double *)calloc(F2Longbar_num*F2Longbar_num,8);
SETimAs0=(double *)calloc(F2Longbar_num*F2Longbar_num,8);//钢筋的时间总弹塑性矩阵备份
CTimeZ=(double *)calloc(F2ConElem_num,8); //混凝土单元的时间增量
STimeZ=(double *)calloc(F2Longbar_num,8); //钢筋单元的时间增量
for(i=0; i<F2Longbar_num*F2Longbar_num; i++)
{
*(SETmAs+i)=0.0;
*(SteET+i)=0.0;
*(SteETime+i)=0.0;
*(SETimAs+i)=0.0;
*(SETmAs0+i)=0.0;
*(SETimAs0+i)=0.0;
*(SEsmAs+i)=0.0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -