?? youixanyuan.cpp
字號(hào):
#include"iostream.h"
#include"math.h"
#include"stdlib.h"
#include"conio.h"
//*****************
//聲明必要變量
//*****************
#define PI 3.141592654
int NE; //單元數(shù)
int NJ; //節(jié)點(diǎn)數(shù)
int NZ; //支承數(shù)
int NPJ; //有節(jié)點(diǎn)載荷作用的節(jié)點(diǎn)數(shù)
int NPF; //非節(jié)點(diǎn)載荷數(shù)
int HZ; //載荷碼
int E; //單元碼
int fangchengshu;
double F[303]; //各節(jié)點(diǎn)等效總載荷數(shù)值
int dym_jdm[100][2]; //單元碼對(duì)應(yīng)的節(jié)點(diǎn)碼:dym_jdm[][0],為單元對(duì)應(yīng)的前節(jié)點(diǎn)總碼,
// dym_jdm[][1]為該單元對(duì)應(yīng)的后節(jié)點(diǎn)總碼
int zhichengweizhi[300]; //記錄支持節(jié)點(diǎn)作用點(diǎn)的數(shù)組
int fjzhzuoyongdanyuan[100]; //非節(jié)點(diǎn)載荷作用單元
int fjzhleixing[100]; //非節(jié)點(diǎn)載荷類型:1-均布,2-垂直集中,3-平行集中,4-力偶,5-角度集中
double fjzhzhi[100]; //非節(jié)點(diǎn)載荷的值
double fjzhzuoyongdian[100]; //非節(jié)點(diǎn)載荷在各竿的作用點(diǎn)
double fjzhjiaodu[100]; //非節(jié)點(diǎn)載荷作用角度
int jdzhzuoyongdian[100]; //節(jié)點(diǎn)載荷作用的節(jié)點(diǎn)數(shù)組
double jiedianzaihe[101][3]; //各節(jié)點(diǎn)載荷值,其中jiedianzaihe[][0]為U,
// jiedianzaihe[][1]為V,
// jiedianzaihe[][2]為M
double zhengtigangdu[303][303]; //整體剛度數(shù)組
double changdu[100]; //各單元竿長(zhǎng)數(shù)組
double jiaodu[100]; //各單元角度數(shù)組
double tanxingmoliang[100]; //各單元彈性模量數(shù)組
double J_moliang[100]; //各單元J模量數(shù)組
double mianji[100]; //各單元面積數(shù)組
double weiyi[303]; //記錄各個(gè)節(jié)點(diǎn)位移的數(shù)組
double dy_weiyi[100][6]; //記錄各個(gè)單元在局部坐標(biāo)系中的位移數(shù)組
// dy_weiyi[i][0]-dyweiyi[i][6]分別為第i+1單元的u1,v1,@1,u2,v2,@2
double dy_neili[100][6]; //記錄各個(gè)單元在局部坐標(biāo)系中的固端內(nèi)力
// dy_weiyi[i][0]-dyweiyi[i][6]分別為第i+1單元的U1,V1,M1,U2,V2,M2
double gan_neili[100][6]; //記錄各個(gè)單元的竿端內(nèi)力數(shù)組,gan_neili[i][6]表示第i+1單元的6內(nèi)力.
//*******************
//一些處理過程的函數(shù)
//*******************
void input(); //數(shù)據(jù)的輸入
void zonggang(); //計(jì)算總剛度,存放于zhengtigangdu[][]數(shù)組中
void zongzaihe(); //計(jì)算等效總節(jié)點(diǎn)載荷
void zhichengyinru(); //引入支承條件
void jsweiyi(); //求各個(gè)節(jié)點(diǎn)位移
void js_dy_weiyi(); //求局部坐標(biāo)系中的位移
void ganduanneili(); //求竿端內(nèi)力
void dy_gangdu(int i,double dg[6][6]); //求單元在局部坐標(biāo)系中的單剛
void js_T_T1(int i,double T[6][6],double T1[6][6]); //求單元的轉(zhuǎn)換矩陣及其逆陣
//************
//主函數(shù)
//************
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();
//輸出竿端內(nèi)力
cout<<"輸出竿內(nèi)力:"<<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;
}
//***************************
//求單元在局部坐標(biāo)系中的單剛
//***************************
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];
}
//*************************
//求單元的轉(zhuǎn)換矩陣及其逆陣
//*************************
void js_T_T1(int i,double T[6][6],double T1[6][6])
{
int Tti,Tti2;
for( Tti=0;Tti<6;Tti++)
{
//********************
//計(jì)算單元的轉(zhuǎn)換矩陣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;
}
}
//************************
//計(jì)算T的轉(zhuǎn)置矩陣T1
//************************
for(Tti=0;Tti<6;Tti++)
{
for(Tti2=0;Tti2<6;Tti2++)
T1[Tti2][Tti]=T[Tti][Tti2];
}
}
//*******************
//計(jì)算竿端內(nèi)力的函數(shù)
//*******************
void ganduanneili()
{
int Ti,Ti2;
double chengji=0;
double danyuan_gangdu[6][6]; //單元?jiǎng)偠葦?shù)組
for(int i=0;i<NE;i++)
{
//***********************
//局部坐標(biāo)系中的單元?jiǎng)偠? //***********************
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<<"單元單元?jiǎng)偠?"<<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]<<" ";
}
}
}
}
//************************************************************
//計(jì)算各個(gè)單元在局部坐標(biāo)系中的位移的函數(shù),存放在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;
*/
}
}
}
//***********************
//計(jì)算得位移的函數(shù)
//***********************
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];
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -