📄 main.cpp
字号:
#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 + -