⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 youixanyuan.cpp

📁 有限元算法。平面绗架结构的有限元分析
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#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 + -