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

📄 main.cpp

📁 结构矩阵分析
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#include <iostream.h>
#include <fstream.h>
#include<math.h>
#include"LDLT.cpp"
/*格式说明:

数据段以空行隔开

每行写一组信息,每个数据用空格分开

第一段(行):节点数,材料数,单元数,节点荷载数目,跨内集中荷载数目,跨内分布荷载数目

第二段:
       依顺序输入:
       节点i的坐标和约束(1 表示被约束),结构所在平面为  X——Y  平面!。(每行一个)

第三段:  
	    材料i的A,E,I。(每行一个)

第四段:
        单元的材料种类号,起始,终止节点号,单元种类(T为杆,F为梁)。(每行一个)

第四段:
      节点荷载的作用节点号,在各个方向的分量。(每行一个)

第五段:
      跨内集中荷载作用单元号,位置(-1~0之间),各个方向的分量大小。

第六段:  
	  跨内分布荷载作用单元号,起始位置(-1~0之间),结束位置(-1~~0之间),各个方向分量大小。

*/ 

struct jiedian     //节点信息。
{
	jiedian()
	{
		x=y=z=0;
	    rx=ry=rz=rmx=rmy=rmz=false;//初始化
	}
    double x;
    double y;
	double z;       //坐标
	int rx;
	int ry;
	int rz;
	int rmx;
	int rmy;
	int rmz;       //表示该节点是否被约束,eg. rx=1(true) 表示该节点的x方向被约束。
};

struct node_df     // 节点的自由度编号
{
	int x;
	int y;
	int m;
};

struct element_df  // 单元的两个节点自由度编号
{
	int x1;
	int y1;
	int m1;
	int x2;
	int y2;
	int m2;
};

struct cailiao     //材料信息。符号与书中规定一致
{
	double A;
	double E;
	double I;
};

struct danyuan // 单元信息。
{
	int serial_of_material ;// 材料种类。
	int head;               // 头节点。
	int tail;               // 尾节点。
	char C;
	double gan_matrix[4][4];
	double gangjia_matrix[6][6];
};

struct hezai//荷载信息
{
	int serial_of_node; //作用节点号
	double fx;
	double fy;
	double fz;
	double mx;
	double my;
	double mz;
};

struct inner_focus_load             //跨中的集中荷载信息
{
    int   serial_of_element;    //作用单元号
	double local_of_force;
	double fx;
	double fy;
	double fz;
	double mx;
	double my;
	double mz;
};

struct inner_spread_load      //跨中的分布荷载信息
{
	int serial_of_element;     //作用单元号
	double start_local;
	double end_local;
	double start_fx;
	double start_fy;
	double start_fz;
	double end_fx;
	double end_fy;
	double end_fz;
};

struct matrix_for_gan//杆的刚度矩阵
{
	matrix_for_gan(double c,double s,double e)
	{
		cos=c;sin=s;ea_l=e;
		matrix_gan[0][0]=cos*cos;matrix_gan[0][1]=cos*sin;matrix_gan[0][2]=-cos*cos;matrix_gan[0][3]=-sin*cos;
		matrix_gan[1][0]=sin*cos;matrix_gan[1][1]=sin*sin;matrix_gan[1][2]=-sin*cos;matrix_gan[1][3]=-sin*sin;
		matrix_gan[2][0]=-cos*cos;matrix_gan[2][1]=-sin*cos;matrix_gan[2][2]=cos*cos;matrix_gan[2][3]=cos*sin;
		matrix_gan[3][0]=-sin*cos;matrix_gan[3][1]=-sin*sin;matrix_gan[3][2]=sin*cos;matrix_gan[3][3]=sin*sin;
		for(int i1=0;i1<=3;i1++) 
			for(int j1=0;j1<=3;j1++)
				matrix_gan[i1][j1]=matrix_gan[i1][j1]*ea_l;
	}
	double matrix_gan[4][4];
	double ea_l,cos,sin;
};


struct matrix_for_gangjia//刚架的刚度矩阵
{
	matrix_for_gangjia(double cos_,double sin_,double e_,double i_,double a_,double l_)
	{
		cos=cos_;sin=sin_;e=e_;i=i_;a=a_;l=l_;
		matrix_gangjia[0][0]=cos*cos*a+sin*sin*12*i/l*l;matrix_gangjia[0][1]=cos*sin*a-sin*cos*12*i/l*l;matrix_gangjia[0][2]=-sin*6*i/l;matrix_gangjia[0][3]=-1*matrix_gangjia[0][0];matrix_gangjia[0][4]=-1*matrix_gangjia[0][1];matrix_gangjia[0][5]=matrix_gangjia[0][2];
		matrix_gangjia[1][1]=sin*sin*a+cos*cos*12*i/l*l;matrix_gangjia[1][2]=cos*6*i/l;matrix_gangjia[1][3]=-sin*cos*a+sin*cos*12*i/l*l;matrix_gangjia[1][4]=-matrix_gangjia[1][1];matrix_gangjia[1][5]=matrix_gangjia[1][2];
		matrix_gangjia[2][2]=4*i;matrix_gangjia[2][3]=-sin*6*i/l;matrix_gangjia[2][4]=cos*6*i/l;matrix_gangjia[2][5]=2*i;
		matrix_gangjia[3][3]=matrix_gangjia[0][0];matrix_gangjia[3][4]=matrix_gangjia[0][1];matrix_gangjia[3][5]=sin*6*i/l;
		matrix_gangjia[4][4]=matrix_gangjia[1][1];matrix_gangjia[4][5]=-matrix_gangjia[1][2];
		matrix_gangjia[5][5]=4*i;

		int k1,k2;
		for(k1=0;k1<=5;k1++)
		{for(k2=k1;k2<=5;k2++)
		matrix_gangjia[k1][k2]=e*matrix_gangjia[k1][k2]/l;}

		for(k1=0;k1<=5;k1++)
			for(k2=k1;k2<=5;k2++)
				matrix_gangjia[k2][k1]=matrix_gangjia[k1][k2];
					
	}

	double matrix_gangjia[6][6];
	double cos,sin,e,i,a,l;
};

struct equivalent_jiedian_force_spread   //均布荷载的等效节点力
{
	double Nx1_x;                             //局部坐标系下的x方向均布力在单元起始端的等效轴力在整体坐标系x轴方向的分力
	double Nx1_y;                             //局部坐标系下的x方向均布力在单元起始端的等效轴力在整体坐标系y轴方向的分力
	double Nx2_x;                             //局部坐标系下的x方向均布力在单元终末端的等效轴力在整体坐标系x轴方向的分力
	double Nx2_y;                             //局部坐标系下的x方向均布力在单元终末端的等效轴力在整体坐标系y轴方向的分力
	double Qx1_x;                             //局部坐标系下的x方向均布力的单元起始端的等效切向力在整体坐标系x轴方向的分力
	double Qx1_y;                             //局部坐标系下的x方向均布力的单元起始端的等效切向力在整体坐标系y轴方向的分力
	double Qx2_x;                             //局部坐标系下的x方向均布力的单元终末端的等效切向力整体坐标系x轴方向的分力
	double Qx2_y;                             //局部坐标系下的x方向均布力的单元终末端的等效切向力整体坐标系y轴方向的分力
	double Mx1;                               //局部坐标系下的x方向均布力的单元起始端的等效弯矩
	double Mx2;                               //局部坐标系下的x方向均布力的单元终末端的等效弯矩 
	double Ny1_x;                             //局部坐标系下的y方向均布力的单元起始端的等效轴力在整体坐标系x轴方向的分力
	double Ny1_y;                             //局部坐标系下的y方向均布力的单元起始端的等效轴力在整体坐标系y轴方向的分力
	double Ny2_x;                             //局部坐标系下的y方向均布力的单元终末端的等效轴力在整体坐标系x轴方向的分力
	double Ny2_y;                             //局部坐标系下的y方向均布力的单元终末端的等效轴力在整体坐标系y轴方向的分力
	double Qy1_x;                             //局部坐标系下的y方向均布力的单元起始端的等效切向力在整体坐标系x轴方向的分力
	double Qy1_y;                             //局部坐标系下的y方向均布力的单元起始端的等效切向力在整体坐标系y轴方向的分力
	double Qy2_x;                             //局部坐标系下的y方向均布力的单元终末端的等效切向力在整体坐标系x轴方向的分力
	double Qy2_y;                             //局部坐标系下的y方向均布力的单元终末端的等效切向力在整体坐标系y轴方向的分力
	double My1;                             //局部坐标系下的y方向均布力的单元起始端的等效弯矩
	double My2;                             //局部坐标系下的y方向均布力的单元终末端的等效弯矩

	/*double Nz1;                             //局部坐标系下的z方向均布力的单元起始端的等效轴力
	double Nz2;                             //局部坐标系下的z方向均布力的单元终末端的等效轴力
	double Qz1;                             //局部坐标系下的z方向均布力的单元起始端的等效切向力
	double Qz2;                             //局部坐标系下的z方向均布力的单元终末端的等效切向力
	double Mz1;                             //局部坐标系下的z方向均布力的单元起始端的等效弯矩
	double Mz2;                             //局部坐标系下的z方向均布力的单元终末端的等效弯矩*/ 

};
struct equivalent_jiedian_force_focus    //集中荷载的等效节点力
{
	double Nx1_x;                            //局部坐标系下的x方向集中力的单元起始端的等效轴力在整体坐标系x轴方向的分力
	double Nx1_y;                            //局部坐标系下的x方向集中力的单元起始端的等效轴力在整体坐标系y轴方向的分力
	double Nx2_x;                            //局部坐标系下的x方向集中力的单元终末端的等效轴力在整体坐标系x轴方向的分力
	double Nx2_y;                            //局部坐标系下的x方向集中力的单元终末端的等效轴力在整体坐标系y轴方向的分力
    double Qx1_x;                            //局部坐标系下的x方向集中力的单元起始端的等效切向力在整体坐标系x轴方向的分力
	double Qx1_y;                            //局部坐标系下的x方向集中力的单元起始端的等效切向力在整体坐标系y轴方向的分力
	double Qx2_x;                            //局部坐标系下的x方向集中力的单元终末端的等效切向力在整体坐标系x轴方向的分力
	double Qx2_y;                            //局部坐标系下的x方向集中力的单元终末端的等效切向力在整体坐标系y轴方向的分力 
	double Mx1;                            //局部坐标系下的x方向集中力的单元起始端的等效弯矩
	double Mx2;                            //局部坐标系下的x方向集中力的单元终末端的等效弯矩
	double Ny1_x;                            //局部坐标系下的y方向集中力的单元起始端的等效轴力在整体坐标系x轴方向的分力
	double Ny1_y;                            //局部坐标系下的y方向集中力的单元起始端的等效轴力在整体坐标系y轴方向的分力
	double Ny2_x;                            //局部坐标系下的y方向集中力的单元终末端的等效轴力在整体坐标系x轴方向的分力
	double Ny2_y;                            //局部坐标系下的y方向集中力的单元终末端的等效轴力在整体坐标系y轴方向的分力
    double Qy1_x;                            //局部坐标系下的y方向集中力的单元起始端的等效切向力在整体坐标系x轴方向的分力
	double Qy1_y;                            //局部坐标系下的y方向集中力的单元起始端的等效切向力在整体坐标系y轴方向的分力
	double Qy2_x;                            //局部坐标系下的y方向集中力的单元终末端的等效切向力在整体坐标系x轴方向的分力
	double Qy2_y;                            //局部坐标系下的y方向集中力的单元终末端的等效切向力在整体坐标系y轴方向的分力
	double My1;                            //局部坐标系下的y方向集中力的单元起始端的等效弯矩
	double My2;                            //局部坐标系下的y方向集中力的单元终末端的等效弯矩

	/*double Nz1;                            //局部坐标系下的z方向集中力的单元起始端的等效轴力
	double Nz2;                            //局部坐标系下的z方向集中力的单元终末端的等效轴力
	double Qz1;                            //局部坐标系下的z方向集中力的单元起始端的等效切向力
	double Qz2;                            //局部坐标系下的z方向集中力的单元终末端的等效切向力
	double Mz1;                            //局部坐标系下的z方向集中力的单元起始端的等效弯矩
	double Mz2;                            //局部坐标系下的z方向集中力的单元终末端的等效弯矩*/
};
#define number_of_node neq
#define number_of_unit nElem
//单元信息,叠加总刚与总节点力用
template<int nd>
struct Element{
	double Fe[nd];
	int LM[nd];
};
int number_of_node;
int number_of_material;
int number_of_unit;
int number_of_load;
int number_of_focus_load;
int number_of_spread_load;

void work1_work2_work3()///1 2 3 组所写
{  ////////////////////////////////////////////////////////belong to team 1
	int i ;   
	
	ifstream fin("data.txt");
	
	fin>>number_of_node>>number_of_material>>number_of_unit>>number_of_load
       >>number_of_focus_load>>number_of_spread_load;

    struct jiedian *node=new struct jiedian[number_of_node];
    struct cailiao *material=new struct cailiao[number_of_material];
    struct danyuan *unit=new struct danyuan[number_of_unit];
    struct hezai *load=new struct hezai[number_of_load];
    struct inner_focus_load *focus_load=new struct inner_focus_load[number_of_focus_load];
    struct inner_spread_load *spread_load=new struct inner_spread_load [number_of_spread_load];

for(i=0;i<number_of_node;i++)
{
	fin>>(node+i)->x;
	fin>>(node+i)->y;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -