📄 youixanyuan.cpp
字号:
#include"iostream.h"
#include"math.h"
#include"stdlib.h"
#include"conio.h"
//*****************
//声明必要变量
//*****************
#define PI 3.141592654
int NE; //单元数
int NJ; //节点数
int NZ; //支承数
int NPJ; //有节点载荷作用的节点数
int NPF; //非节点载荷数
int HZ; //载荷码
int E; //单元码
int fangchengshu;
double F[303]; //各节点等效总载荷数值
int dym_jdm[100][2]; //单元码对应的节点码:dym_jdm[][0],为单元对应的前节点总码,
// dym_jdm[][1]为该单元对应的后节点总码
int zhichengweizhi[300]; //记录支持节点作用点的数组
int fjzhzuoyongdanyuan[100]; //非节点载荷作用单元
int fjzhleixing[100]; //非节点载荷类型:1-均布,2-垂直集中,3-平行集中,4-力偶,5-角度集中
double fjzhzhi[100]; //非节点载荷的值
double fjzhzuoyongdian[100]; //非节点载荷在各竿的作用点
double fjzhjiaodu[100]; //非节点载荷作用角度
int jdzhzuoyongdian[100]; //节点载荷作用的节点数组
double jiedianzaihe[101][3]; //各节点载荷值,其中jiedianzaihe[][0]为U,
// jiedianzaihe[][1]为V,
// jiedianzaihe[][2]为M
double zhengtigangdu[303][303]; //整体刚度数组
double changdu[100]; //各单元竿长数组
double jiaodu[100]; //各单元角度数组
double tanxingmoliang[100]; //各单元弹性模量数组
double J_moliang[100]; //各单元J模量数组
double mianji[100]; //各单元面积数组
double weiyi[303]; //记录各个节点位移的数组
double dy_weiyi[100][6]; //记录各个单元在局部坐标系中的位移数组
// dy_weiyi[i][0]-dyweiyi[i][6]分别为第i+1单元的u1,v1,@1,u2,v2,@2
double dy_neili[100][6]; //记录各个单元在局部坐标系中的固端内力
// dy_weiyi[i][0]-dyweiyi[i][6]分别为第i+1单元的U1,V1,M1,U2,V2,M2
double gan_neili[100][6]; //记录各个单元的竿端内力数组,gan_neili[i][6]表示第i+1单元的6内力.
//*******************
//一些处理过程的函数
//*******************
void input(); //数据的输入
void zonggang(); //计算总刚度,存放于zhengtigangdu[][]数组中
void zongzaihe(); //计算等效总节点载荷
void zhichengyinru(); //引入支承条件
void jsweiyi(); //求各个节点位移
void js_dy_weiyi(); //求局部坐标系中的位移
void ganduanneili(); //求竿端内力
void dy_gangdu(int i,double dg[6][6]); //求单元在局部坐标系中的单刚
void js_T_T1(int i,double T[6][6],double T1[6][6]); //求单元的转换矩阵及其逆阵
//************
//主函数
//************
void main()
{
input();
cout<<endl;
cout<<"========================================";
zonggang();
/*
cout<<"总刚度:"<<endl;
for(int i=0;i<NJ*3;i++)
{
for(int j=0;j<NJ*3;j++)
cout<<zhengtigangdu[i][j]<<" ";
cout<<endl;
}
cout<<endl;
*/
zongzaihe();
/*
cout<<"总载荷:"<<endl;
for( i=0;i<NJ*3;i++)
cout<<F[i]<<endl;
cout<<endl;
*/
zhichengyinru();
/*
cout<<"引入支撑的总载荷:"<<endl;
for( i=0;i<NJ*3;i++)
cout<<F[i]<<endl;
cout<<endl;
*/
jsweiyi();
cout<<"输出位移:"<<endl;
//输出位移
for( int i=0;i<NJ;i++)
{
cout<<"u["<<i+1<<"]:"<<weiyi[i*3]<<endl;
cout<<"v["<<i+1<<"]:"<<weiyi[i*3+1]<<endl;
cout<<"@["<<i+1<<"]:"<<weiyi[i*3+2]<<endl;
cout<<endl;
}
js_dy_weiyi();
cout<<"单元唯一:"<<endl;
for( i=0;i<NE;i++)
{
for(int j=0;j<6;j++)
cout<<dy_weiyi[i][j]<<" ";
cout<<endl;
}
cout<<endl;
for(i=0;i<NE;i++)
{
for(int j=0;j<6;j++)
cout<<gan_neili[i][j]<<" ";
cout<<endl;
}
ganduanneili();
//输出竿端内力
cout<<"输出竿内力:"<<endl;
for( i=0;i<NE;i++)
{
cout<<"第"<<i+1<<"单元:"<<endl;
cout<<"U1:"<<gan_neili[i][0]<<" V1:"<<gan_neili[i][01]<<" M1:"<<gan_neili[i][2]<<" U2:"<<gan_neili[i][3]<<" V2:"<<gan_neili[i][4]<<" M2:"<<gan_neili[i][5]<<endl;
cout<<endl;
}
cout<<"输出完毕"<<endl;
}
//***************************
//求单元在局部坐标系中的单刚
//***************************
void dy_gangdu(int i,double dg[6][6])
{
dg[0][0]=tanxingmoliang[i]*mianji[i]/changdu[i];
dg[0][1]=0;
dg[0][2]=0;
dg[0][3]=-tanxingmoliang[i]*mianji[i]/changdu[i];
dg[0][4]=0;
dg[0][5]=0;
dg[1][0]=0;
dg[1][1]=12*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]*changdu[i]);
dg[1][2]=-6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[1][3]=0;
dg[1][4]=-12*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]*changdu[i]);
dg[1][5]=-6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[2][0]=0;
dg[2][1]=-6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[2][2]=4*tanxingmoliang[i]*J_moliang[i]/changdu[i];
dg[2][3]=0;
dg[2][4]=6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[2][5]=2*tanxingmoliang[i]*J_moliang[i]/changdu[i];
dg[3][0]=-tanxingmoliang[i]*mianji[i]/changdu[i];
dg[3][1]=0;
dg[3][2]=0;
dg[3][3]=tanxingmoliang[i]*mianji[i]/changdu[i];
dg[3][4]=0;
dg[3][5]=0;
dg[4][0]=0;
dg[4][1]=-12*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]*changdu[i]);
dg[4][2]=6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[4][3]=0;
dg[4][4]=12*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]*changdu[i]);
dg[4][5]=6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[5][0]=0;
dg[5][1]=-6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[5][2]=2*tanxingmoliang[i]*J_moliang[i]/changdu[i];
dg[5][3]=0;
dg[5][4]=6*tanxingmoliang[i]*J_moliang[i]/(changdu[i]*changdu[i]);
dg[5][5]=4*tanxingmoliang[i]*J_moliang[i]/changdu[i];
}
//*************************
//求单元的转换矩阵及其逆阵
//*************************
void js_T_T1(int i,double T[6][6],double T1[6][6])
{
int Tti,Tti2;
for( Tti=0;Tti<6;Tti++)
{
//********************
//计算单元的转换矩阵T
//********************
for( Tti2=0;Tti2<6;Tti2++)
{
if(Tti==0&&Tti2==0)
T[Tti][Tti2]=cos(jiaodu[i]);
else if(Tti==0&&Tti2==1)
T[Tti][Tti2]=sin(jiaodu[i]);
else if(Tti==1&&Tti2==0)
T[Tti][Tti2]=-sin(jiaodu[i]);
else if(Tti==1&&Tti2==1)
T[Tti][Tti2]=cos(jiaodu[i]);
else if(Tti==2&&Tti2==2)
T[Tti][Tti2]=1;
else if(Tti==3&&Tti2==3)
T[Tti][Tti2]=cos(jiaodu[i]);
else if(Tti==3&&Tti2==4)
T[Tti][Tti2]=sin(jiaodu[i]);
else if(Tti==4&&Tti2==3)
T[Tti][Tti2]=-sin(jiaodu[i]);
else if(Tti==4&&Tti2==4)
T[Tti][Tti2]=cos(jiaodu[i]);
else if(Tti==5&&Tti2==5)
T[Tti][Tti2]=1;
else
T[Tti][Tti2]=0;
if(fabs(T[Tti][Tti2])<0.000001)
T[Tti][Tti2]=0;
if(T[Tti][Tti2]>0.9999999)
T[Tti][Tti2]=1;
if(T[Tti][Tti2]<-0.9999999)
T[Tti][Tti2]=-1;
}
}
//************************
//计算T的转置矩阵T1
//************************
for(Tti=0;Tti<6;Tti++)
{
for(Tti2=0;Tti2<6;Tti2++)
T1[Tti2][Tti]=T[Tti][Tti2];
}
}
//*******************
//计算竿端内力的函数
//*******************
void ganduanneili()
{
int Ti,Ti2;
double chengji=0;
double danyuan_gangdu[6][6]; //单元刚度数组
for(int i=0;i<NE;i++)
{
//***********************
//局部坐标系中的单元刚度
//***********************
dy_gangdu(i,danyuan_gangdu);
for(Ti=0;Ti<6;Ti++)
{
for(Ti2=0;Ti2<6;Ti2++)
chengji=chengji+danyuan_gangdu[Ti][Ti2]*dy_weiyi[i][Ti2];
gan_neili[i][Ti]=chengji+dy_neili[i][Ti];
chengji=0;
if(i==3&&Ti==0)
{
cout<<"单元单元刚度:"<<endl;
for(int yy=0;yy<6;yy++)
{
for(int tt=0;tt<6;tt++)
cout<<danyuan_gangdu[yy][tt]<<" ";
cout<<endl;
cout<<endl;
}
cout<<"输出位移:"<<endl;
for(yy=0;yy<6;yy++)
cout<<dy_weiyi[i][yy]<<" ";
cout<<endl;
cout<<"输出杆力:"<<endl;
for(yy=0;yy<6;yy++)
cout<<gan_neili[i][yy]<<" ";
}
}
}
}
//************************************************************
//计算各个单元在局部坐标系中的位移的函数,存放在dy_weiyi[][]中
//************************************************************
void js_dy_weiyi()
{
int Ti,Ti3;
double T[6][6],T1[6][6];
double chengji=0;
for(int i=0;i<NE;i++)
{
js_T_T1(i,T,T1);
int qianjiedian,houjiedian;
qianjiedian=dym_jdm[i][0];
houjiedian=dym_jdm[i][1];
for(Ti=0;Ti<6;Ti++)
{
dy_weiyi[i][Ti]=T[Ti][0]*weiyi[(qianjiedian-1)*3]+T[Ti][1]*weiyi[(qianjiedian-1)*3+1]+T[Ti][2]*weiyi[(qianjiedian-1)*3+2]+T[Ti][3]*weiyi[(houjiedian-1)*3]+T[Ti][4]*weiyi[(houjiedian-1)*3+1]+T[Ti][5]*weiyi[(houjiedian-1)*3+2];
/*
for(Ti3=0;Ti3<3;Ti3++)
chengji=chengji+T[Ti][Ti3]*weiyi[(qianjiedian-1)*3+Ti3];
for(Ti3=0;Ti3<3;Ti3++)
chengji=chengji+T[Ti][Ti3+3]*weiyi[(houjiedian-1)*3+Ti3];
dy_weiyi[i][Ti]=chengji;
chengji=0;
*/
}
}
}
//***********************
//计算得位移的函数
//***********************
void jsweiyi()
{
int Ti,Ti2;
int i,j,k;
int i_max;
double max,zhongjian;
double gd_kz[303][303];
for(Ti=0;Ti<NJ*3;Ti++)
{
for(Ti2=0;Ti2<NJ*3;Ti2++)
gd_kz[Ti][Ti2]=zhengtigangdu[Ti][Ti2];
gd_kz[Ti][NJ*3]=F[Ti];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -